Storage Systems

43 篇内容

技术文章Phil Eaton - databases

Writing a document database from scratch in Go: Lucene-like filters and indexes

文章从零构建一个基于 Go 和 Pebble 的简易文档数据库,支持通过 HTTP 插入、按 ID 获取和搜索 JSON 文档,代码控制在 500 行以内。作者实现了一个简化版 Lucene 查询语言,包括带引号字段名/值、嵌套路径、相等和范围比较以及隐式 AND。为了加速等值查询,系统在独立索引库中存储“路径=值”到文档 ID 列表的映射,并在搜索时对多个等值条件取交集;基准测试显示 year=1918 的查询从约 1 秒降至 0.03 秒。文章明确指出现有实现不支持范围索引、全文搜索和数组字段,且索引存储采用逗号分隔的 ID 字符串,适合作为理解文档数据库基本原理的教学项目而非生产系统。

推荐收录:文章提供了可运行的 Go 实现,完整覆盖查询解析、路径求值、基于 Pebble 的存储和等值索引构建,并给出了索引前后的性能对比,具有清晰的动手教学价值。适合后端工程师、数据库初学者或希望理解 Lucene 风格查询和倒排索引简化模型的读者。可迁移价值在于展示如何用少量代码实现可扩展的键值查询与索引设计,同时明确标出范围查询、数组和全文搜索等未覆盖边界,避免误导。

技术文章Phil Eaton - databases

A minimal distributed key-value database with Hashicorp's Raft library

文章用单文件 Go 代码演示如何基于 Hashicorp Raft 库构建一个最小分布式键值数据库,约 260 行,通过 HTTP API 支持 set/get 和 join 操作。作者从 Raft 背景出发,逐步实现状态机(Apply、Restore、Snapshot 空实现)、节点初始化(BoltDB 日志存储、TCP 传输)和 HTTP 接口,其中 set 通过 Raft 日志复制,get 直接读本地内存但不保证强一致。文章最后给出可运行的完整示例,并提示未实现快照、不支持删除、节点需手动加入且仅用于学习。整体内容清晰展示了 Raft 库的集成流程与关键注意点,适合分布式系统入门参考。

推荐收录,因为文章以完整可运行的最小示例展示了 Hashicorp Raft 库的端到端集成路径,对理解 Raft 状态机、日志复制和集群管理具有直接帮助。适合分布式系统初学者或需要快速上手的开发者,其简洁实现可作为进一步实践和扩展的起点;同时文中明确指出了快照、读一致性和生产约束等简化点,避免了误用。

工程实践Phil Eaton - databases

Writing a minimal in-memory storage engine for MySQL/MariaDB

文章记录了作者在一周黑客活动中探索 MariaDB 内部机制并实现一个 218 行 C++ 的最小内存存储引擎的全过程。作者从构建调试版 MariaDB 开始,发现存储引擎插件必须放在源码树内而非独立仓,并实现了 handler 子类的 create、write_row、rnd_next、rnd_init 等关键方法。文中解释了 MySQL 的固定字节行格式和全局内存表结构,同时坦诚该引擎仅支持 INTEGER 字段、单数据库、非线程安全且不支持 NULL。作者还将 MySQL 与 Postgres 的存储引擎 API 进行对比,认为基于单行传递的设计限制了列存压缩和向量化的收益。最终通过 SQL 查询验证了引擎功能,并指出这类最小项目可作为探索其他存储后端的起点,适合作为学习数据库存储层原理的入门材料。

本文是难得的数据库存储引擎实战教程,作者以最小可行方式展示了如何从零接入 MariaDB 存储接口,代码完整且步骤清晰,并诚实标注了线程安全、数据类型等局限。适合对数据库内核、存储引擎或后端系统感兴趣的开发者阅读,可迁移价值在于理解存储引擎接口的设计约束以及如何快速验证自定义存储方案,同时避免被过度简化的示例误导。

技术文章Phil Eaton - databases

Writing a SQL database, take two: Zig and RocksDB

文章展示了如何在 Zig 语言中用约 1700 行代码实现一个基于 RocksDB 的嵌入式 SQL 数据库。作者将项目拆分为词法分析、语法分析、存储层和执行层,详细讲解了每个组件的设计,包括手写 lexer/parser 支持 SELECT、INSERT、CREATE TABLE 等语句,以及如何用 RocksDB 持久化表元数据和行数据。文中还介绍了 Zig 的内存管理(Arena allocator)、数据序列化方案和表达式求值。该实现仅支持极小的 SQL 子集,无主键、事务和索引,主要用于学习数据库内部原理和 Zig/RocksDB 的实践,而非生产用途。

推荐收录,因为文章提供了完整可运行的代码实现和逐步讲解,清晰展示了从 SQL 解析到键值存储映射的完整流程。适合对数据库内部实现、Zig 语言或 RocksDB 感兴趣的开发者阅读,可迁移价值在于理解手写 lexer/parser 的实践、内存管理策略以及嵌入式数据库的架构设计。主要风险是项目功能有限,但作为教学参考具有长期价值。

技术文章Phil Eaton - databases

What's the big deal about key-value databases like FoundationDB and RocksDB?

文章系统介绍键值数据库(嵌入式如 RocksDB、LevelDB、PebbleDB,分布式如 FoundationDB、TiKV)在当代数据库系统中的重要性。作者从数据库可扩展性切入,解释存储引擎可替换如何帮助优化分析型或写密集型负载,并详细说明将 SQL 行映射为键值对的具体编码方法,包括表标识、主键和行标识组合及高效前缀扫描。文章梳理了可靠存储、嵌入式部署、高效前缀扫描等关键特性,并列举构建在这些存储上的多种数据库实例。最后区分了嵌入式与分布式键值数据库的架构差异,并指出非数据库开发者或非大规模场景可忽略存储层细节。

推荐收录,因为文章清晰梳理了键值存储在现代数据库架构中的核心作用,提供了 SQL 到 KV 映射的具体思路和真实数据库案例,适合想理解数据库存储层或构建数据库系统的开发者。它作为入门导览具有较好的长期参考价值,能帮助读者建立对存储引擎选型和架构分层的整体认知。

技术文章Phil Eaton - databases

Writing a storage engine for Postgres: an in-memory Table Access Method

文章围绕Postgres 12引入的可插拔表访问方法(Table Access Method)API,通过实现一个内存存储引擎原型系统介绍了其工作机制。作者从Postgres调试构建和扩展基础设施开始,逐步探索TableAmRoutine结构体中必需的回调函数,通过日志和断言定位到slot_callbacks、scan_begin、getnextslot等关键方法。文章详细记录了如何在C扩展中管理表结构、存储行数据、处理插入和扫描,并解决slot填充、扫描状态管理等实际问题。最终原型支持创建内存表、插入整数和执行简单SQL查询,展示了复用Postgres上层SQL、协议和生态的潜力。作者明确说明这是原型质量代码,尚未实现索引、删除、更新等完整功能,适合作为进一步探索的基础。

推荐收录,因为文章填补了Postgres表访问方法缺乏最小实现教程的空白,以逐层调试和可运行代码展示了从扩展骨架到内存存储引擎的完整过程。适合数据库内核开发者、Postgres扩展作者和想理解可插拔存储引擎的读者,文中的调试方法、API使用陷阱和原型边界具有直接参考价值。

技术文章Phil Eaton - databases

A write-ahead log is not a universal part of durability

文章围绕持久性与预写日志(WAL)展开,作者通过伪代码逐步演示:内存数据库先写全量 B 树到磁盘并 fsync,虽然可实现持久性但效率很低;随后引入 group commit 摊销 fsync 成本,但每次仍写全量结构。作者指出更优做法是先写客户端请求到只追加日志并 fsync,即可安全返回,主数据结构延迟写入,启动时重放日志,这就是 WAL。文章还讨论了 fsync 失败处理、磁盘/文件系统损坏时 checksum 的作用、CDC 与 WAL 的关系,并强调多数数据库默认配置在安全与性能间权衡。最后总结持久性首先取决于向客户端返回成功前是否已落盘,WAL 是低成本实现手段。文章以浅显代码示例搭建直觉,适合理解存储持久性机制,但不涉及具体数据库生产实现细节。

推荐收录,因为文章以清晰的伪代码推演解释了 WAL 并非持久性唯一手段,而是针对全量写盘低效的优化方案。它把 fsync、group commit、checksum 和日志重放等概念串联起来,有助于读者建立数据库持久性的正确心智模型。适合后端工程师、数据库学习者和对存储系统感兴趣的人阅读。需要注意的是,文中为教学目的做了简化,不能直接等同于生产级实现。

技术文章Phil Eaton - databases

Build a serverless ACID database with this one neat trick (atomic PutIfAbsent)

文章以 Delta Lake 论文和协议为蓝本,用约 500 行 Go 零依赖代码实现了一个受 Delta Lake 启发的 serverless ACID 数据库。核心是利用对象存储的原子 putIfAbsent 语义,通过不可变数据文件和带事务 ID 的元数据日志实现快照隔离。文中详细演示了基于 POSIX link 的文件系统原子写入、事务动作、内存行缓冲、数据对象刷新和扫描迭代器,并用两个并发测试验证写冲突与读快照行为。作者明确指出该实现仅支持建表、插入和全表扫描,未覆盖更新、删除、日志 checkpoint、压实等,且合并所有表的事务日志比 Delta Lake 更严格,带来更高写冲突。

推荐收录,因为文章不是泛泛介绍,而是给出了从对象存储原语到事务提交的完整可运行实现,并通过测试展示了并发读写的实际行为。适合想理解 Delta Lake、Iceberg 类事务机制或实现对象存储上最小 ACID 数据库的读者,其抽象接口和原子提交思路可直接迁移到教学或原型系统。主要边界是省略了更新删除等生产特性,单写者模型也限制了并发写能力。

技术文章Phil Eaton - databases

Things that go wrong with disk IO

本文围绕磁盘 I/O 中可能导致数据丢失或损坏的场景展开,涵盖写入未达磁盘、fsync 失败、数据损坏、部分写入、假写、误写/误读等。作者基于 Parity Lost and Parity Regained 与 Characteristics, Impact, and Tolerance of Partial Disk Failures 两篇论文,解释了 buffered I/O 下 fsync 的必要性及其不可靠性,并介绍校验和、原子写、O_DIRECT 等缓解措施。文中对比了 Postgres、SQLite、MySQL、MongoDB、RocksDB 等系统在持久化、校验和与撕裂写处理上的默认行为,指出部分系统默认开启校验和,部分未开启,且假写和误写/误读常被忽视。文章限定于 Linux 环境,强调不同文件系统与磁盘的扇区大小差异,适合需要理解存储可靠性边界的开发者和数据库工程师。

本文以具体故障场景为线索,结合真实数据库系统的默认行为,清晰解释了磁盘 I/O 中容易被忽视的可靠性问题,如 fsync 失败、撕裂写和假写。适合需要设计或维护持久化系统的工程师,尤其是数据库与存储系统开发者。其价值在于将零散的 I/O 风险系统化,帮助读者在事务性场景中做出更稳妥的 fsync、校验和与原子写决策。

工程实践LinkedIn Engineering - Scalability

Introducing Northguard and Xinfra: scalable log storage at Lin...

文章介绍 LinkedIn 为替代 Kafka 而自研的可扩展日志存储系统 Northguard,以及其上的虚拟化发布订阅层 Xinfra。Northguard 通过分段、范围、主题的数据模型,基于 Raft 的动态分片元数据状态机(DS-RSM)和 SWIM 去中心化成员协议实现高可扩展性与可运维性。核心设计是以段为复制单元的日志条带化,自然均衡负载、避免资源倾斜,并论证范围模型相比固定分区能减少流处理中的 shuffle。评测对比显示 Northguard 在元数据可扩展性、集群数量、负载均衡、自愈、一致性和持久性上均优于 Kafka,且通过 Xinfra 虚拟化和双写实现了透明迁移。文章主要面向大规模日志存储和分布式系统工程,技术细节以高层设计为主,缺少底层实现参数和故障恢复的深入展开。

本文来自 LinkedIn 真实生产环境,规模达 32T 记录/天、17PB/天,详细展示了从 Kafka 迁移到自研系统的完整工程决策与权衡,包括数据模型、复制单元选择、元数据分片和虚拟化迁移。适合分布式存储、基础设施和架构师参考,尤其关注日志存储、自动负载均衡和大规模系统演进。其可迁移价值在于以细粒度分段替代整日志复制来改善可运维性和可用性的思路,但读者需注意文章未公开具体实现代码和完整故障处理细节。

工程实践LinkedIn Engineering - Scalability

Scaling maintenance: Rethinking HDFS block placement for exaby...

文章介绍了LinkedIn在管理约5EB数据和100亿对象的HDFS集群时,如何通过重新设计块放置策略来加速维护操作。默认BPP在维护时会导致大量数据复制和网络拥塞,而采用升级域BPP并定义20个升级域,将同一机架节点归入同一升级域,可以消除维护时的数据复制需求。文章详细描述了对3+EB存量数据进行分批再分布的过程,以及发现开源升级域BPP的写性能问题并开发新BPP排除已选升级域节点的改进。最终实现了每天升级约4.5%节点,显著提升了可靠性和安全性。

推荐收录,因为文章提供了真实超大规模HDFS集群维护中的完整工程案例,包含问题定义、架构取舍、数据迁移方案和性能优化细节,证据充分。适合负责分布式存储、大规模基础设施或HDFS运维的读者参考,其中升级域划分、利用维护模式减少复制和分批迁移的策略可直接迁移到类似系统。

技术文章SelectDB 技术分享

Apache Doris 4.1 全面增强 Iceberg:支持 UPDATE、MERGE INTO 与 Iceberg V3 在已有查询能力的基础上,Doris 进一步支持了 UPDATE、DELETE、MERGE INTO 等数据...

本文介绍 Apache Doris 4.1 对 Iceberg 的能力扩展,从仅支持查询扩大到 UPDATE、DELETE、MERGE INTO 等 DML、表结构管理与日常维护,并完整支持 Iceberg V3。文章重点解析 Deletion Vector 机制:V3 用位图记录失效行并写入 Puffin 文件,使删除文件数量与数据文件同阶,文中测试显示文件数从336降至17、删除信息存储从98MiB降至3.8MiB、高删除比例查询时间降至约1/3。同时介绍 Row Lineage 提供的 _row_id 和 _last_updated_sequence_number 系统列,用于稳定行标识和增量变化识别,可配合 Time Travel 定位记录。作者也说明这些能力仅适用于 format-version=3 且需 Doris 4.1+,收益受数据规模和文件布局影响,Row Lineage 不等同审计系统。文章最后给出五分钟入门步骤并展望 Variant 读写和增量物化视图。

推荐收录,因为文章不是单纯的产品发布,而是提供了 Iceberg V3 关键机制(Deletion Vector、Row Lineage)的清晰解释、具体 SQL 示例和量化测试结果,并明确标注了版本、格式和场景边界。适合从事湖仓一体、Doris 或 Iceberg 数据管线的工程师理解如何在 OLAP 引擎中收敛查询、修改和维护,其关于减少删除文件开销和行级增量识别的思路具有可迁移价值。

技术文章SelectDB 技术分享

宽表元数据膨胀怎么解?Doris Segment V3 对比 Parquet、Lance 要让查询真正只为目标列付出元数据成本,思路无非有三种:让 Footer 更容易定位,把重型列元数据...

文章围绕宽表场景下 Footer 元数据膨胀问题展开,对比 Parquet、Lance 与 Doris Segment V3 的解决思路。作者首先指出列式存储中 Footer 会随列数和 Row Group 增长,在数千列、复杂 JSON/Variant 子列时可达数 MB 甚至数十 MB,拖慢查询启动与元数据解析。随后分析三种格式的约束:Parquet 受生态兼容限制,通过 FlatBuffer 随机访问、裁剪冗余和兼容扩展降低开销;Lance 从文件结构重设计,将列元数据独立存储并放弃传统 Row Group;Doris 则在保留 OLAP 能力前提下,将每列 ColumnMetaPB 外置到独立 Column Meta Region(CMR),并在 Footer 中仅保留轻量目录,同时为 Variant 增加路径索引。性能测试显示极端宽表下 Segment 打开时间从 65 秒降至 4 秒,内存从 60 GB 降至不足 1 GB。适用边界是数千列宽表、复杂 Variant 和大量 Segment 场景,窄表收益有限。

推荐收录,因为文章对列式存储元数据膨胀问题提供了清晰的问题拆解和三种主流格式的取舍对比,并详细说明了 Doris Segment V3 的 CMR 外置、Variant 路径索引以及性能验证数据。适合数据库内核、存储引擎、数据仓库以及对宽表/半结构化数据查询优化感兴趣的工程师阅读。可迁移价值在于理解文件格式设计中的兼容性、功能完整性与查询性能之间的权衡;主要风险是内容带有 Apache Doris 厂商视角,但对 Parquet 和 Lance 的分析仍较客观。

工程实践JuiceFS 工程技术

GPFS vs. Alluxio vs. JuiceFS: Architecture and Use Cases Compared

本文系统比较了GPFS、Alluxio和JuiceFS三种存储系统在AI工作负载下的架构与适用场景。作者首先梳理了自动驾驶、LLM训练、多模态、计算平台、量化金融和AI代理等场景的I/O特征与存储挑战。随后深入分析GPFS的元节点和分布式令牌锁机制,说明其强一致性与高性能依赖稳定网络和硬件,运维复杂;JuiceFS采用元数据与数据分离架构,结合对象存储实现弹性和成本优势。性能测试显示GPFS在高并发随机读写和顺序写方面领先,JuiceFS在低深度随机读和写回缓存下有竞争力。对Alluxio与JuiceFS的比较则突出透明缓存层与完整文件系统的定位差异。文章来自JuiceFS官方,存在厂商视角,但提供了具体测试数据和架构权衡,适合存储选型参考。

推荐收录,因为文章详细对比三种主流AI存储系统,包含具体性能测试数据和架构机制解析,而非单纯产品宣传。适合从事AI基础设施、存储选型、分布式系统设计的工程师和架构师参考。可迁移价值在于提供了评估存储系统的维度:I/O模式、一致性、缓存策略、成本与运维;主要风险是厂商立场可能对自家产品有所偏重,阅读时需结合独立评估。

技术文章LWN.net

[$] Block-layer error injection

文章介绍 Christoph Hellwig 提出的块层错误注入补丁系列。现有内核支持多种注入块层 I/O 错误的方法,但都无法直接指定要失败的操作、返回的状态码或直接针对特定磁盘,通常需要叠加设备,导致测试对象变成映射设备而非真实磁盘。新方案通过每个磁盘的 debugfs 文件提供可配置接口,能够选择操作类型、返回状态码并直接作用于目标磁盘,补齐了现有错误注入能力的三个缺口。该机制主要用于测试存储代码对异常硬件故障的响应,增强块层和文件系统的可靠性验证。

推荐收录,因为它清晰说明了块层错误注入的现有局限、新接口的设计动机和实现方式,对内核存储开发者、测试工程师和文件系统可靠性验证具有直接参考价值。文中提到的按操作类型和状态码注入错误、直接针对真实磁盘的思路是可迁移的故障注入方法,适合需要构建块层故障测试场景的读者。

工程实践Xe Iaso

Extending immutability: deletion without losing data

本文深入探讨了在全球分布式、主动-主动复制对象存储系统中实现软删除的挑战与方案。作者分析了传统墓碑标记在跨区域删除-更新时序冲突时导致数据复活的问题,并设计了将对象元数据移至独立命名空间(类似回收站)的软删除机制,保留垃圾回收根以避免误删后数据丢失。文中详细描述了反复活策略:任何写入必须证明时间戳严格晚于删除记录,否则被丢弃,以此保证分布式一致性。文章还对比了S3的删除标记实现,展示了Tigris的API用法,并指出该方案适用于需要抗误删、防勒索和代理安全场景,但反复活逻辑增加了写入验证开销,且恢复操作需客户端显式调用。适用边界在于依赖底层不可变追加存储,且需预先启用软删除特性。

推荐收录。本文不是简单的API介绍,而是从分布式系统时序冲突的根本难题出发,完整展示了软删除与反复活机制的设计逻辑、实现细节和工程取舍。对构建跨区域数据持久化、设计类似回收站功能或处理最终一致性问题的工程师有直接参考价值,其中的元数据分离和写前检查模式可迁移至其他键值存储或数据库系统。

技术文章Simon Willison

SQLite compressed text-history prototypes

文章探索在 SQLite 关系数据库中高效存储文本修订历史的方案。作者提出将文档的每个历史版本完整放入 JSON 字符串数组,再整体用 zlib 或 Zstandard 压缩,以 BLOB 形式存储;另用整数数组列保存时间戳,避免压缩。通过 GPT 辅助生成 Python 原型并模拟 1000 次修订,实验显示 20.4MB 原始修订文本压缩后仅 80.3KB,验证了冗余重复带来的高压缩比。为规避每次编辑全量解压重压缩的开销,进一步提出将历史拆分为多行,每行最多保留 128 个修订或 3MB 未压缩 JSON。该方案实现简单,适用于编辑频繁且文本重复度高的历史记录场景,但尚未评估高频写入、版本检索和并发冲突等生产级问题。

推荐收录,因为文章给出了一个可复现的原型验证:1000 次修订从 20.4MB 压缩至 80.3KB,并明确了拆行存储的工程折衷。这种利用全文冗余进行压缩的简单方案对处理版本历史、审计日志或文档快照的工程师有直接参考价值,可迁移到其他需要高效存储多版本文本的场景。主要风险是未与增量存储或事件溯源等常见方案做对比,也未覆盖高并发写入和随机版本读取的约束。

技术文章LWN.net

[$] FUSE status and plans

本文记录了2026年Linux存储、文件系统、内存管理和BPF峰会上关于FUSE(用户空间文件系统)的BoF讨论。FUSE维护者Miklos Szeredi主持了会议,重点介绍了当前维护面临的挑战、正在推进的功能及其状态,以及他对全新FUSE API的计划。社区对FUSE的兴趣和近期活动明显增加,讨论涉及如何解决现有设计局限、提升性能和扩展能力。文章从内核开发者视角出发,反映了子系统演进中的工程权衡和长期方向,为关注Linux文件系统、用户空间接口及内核API设计的读者提供了第一手的规划信息和发展背景。

本文源自LWN对一线内核开发者BoF的深度报道,提供了FUSE维护者公开讨论的技术痛点、功能路线和API重构思路,证据具体且可信。适合从事Linux文件系统开发、内核模块设计或依赖FUSE的用户空间文件系统构建者阅读,可借此预判技术走向并提前适配。文中关于子系统技术债处理、API演进和社区协作的实践思路,对理解大型内核项目的长期工程决策也具迁移价值。

工程实践NVIDIA Technical Blog

NVIDIA Vera Storage Benchmarks: Faster Encryption, Compression, Integrity Checking, and Recovery for AI-Native Storage

文章探讨了NVIDIA Vera处理器在AI原生存储中的加速能力,通过基准测试对比了加密、压缩、数据完整性校验等关键存储操作在Vera与AMD EPYC、Intel Xeon平台上的性能。作者指出,在代理式AI工作流中,存储需要频繁进行检索、持久化内存和KV缓存等操作,传统CPU在加密和压缩计算上成为瓶颈。Vera集成的数据流加速器能高效卸载这些任务,在加密吞吐量和压缩延迟/吞吐方面均取得显著提升。文章以VAST Data的Cosmos平台为例,展示了Vera如何实现端到端数据完整性、快速恢复和数据缩减,从而减轻CPU压力并提升整体系统效率。结论认为Vera可作为AI存储基础设施的核心加速部件,适用对性能和安全性有苛刻要求的环境,但其结果基于特定硬件和软件组合,未涵盖所有部署场景。

推荐收录,因为文章提供了具体的硬件加速基准测试数据,直观展示了NVIDIA Vera在加密和压缩等任务上相比传统x86服务器的性能优势。对于从事AI基础设施、存储系统设计或性能优化的工程师,这些数据可用于评估硬件加速方案的收益,了解如何将专用加速器集成到AI存储栈中以降低成本并提升吞吐。尽管局限于特定厂商产品,其评估思路和卸载设计可作为类似系统设计的参考。

技术文章Crunchy Data Blog

Postgres 19 Compression: from pglz to LZ4

Postgres 19计划将默认TOAST压缩算法从pglz切换为LZ4。本文追溯了从Postgres 7.0引入lztext到7.1实现TOAST与pglz的历史,解释了pglz设计的取舍:速度优先、极小内存占用、快速终止和零外部依赖。然后对比了LZ4的优势:更快的压缩速度(测试中提速约8倍)、更大的滑动窗口带来更好的压缩率,并保留了快速终止特性。文章详细说明了变长类型的varlena格式、EXTENDED/PLAIN/EXTERNAL/MAIN四种存储策略,以及写入时的压缩决策树:行大小超过约2KB阈值时,依次压缩前列大对象或移入TOAST表。此外,还介绍了B树索引中机会主义压缩的机制:当键值超过510字节时尝试压缩,并举例说明可压缩与不可压缩数据对索引的影响。整体内容既包含机制解析也包含实践测试,展示了Postgres团队在压缩演进上的谨慎策略。边界在于测试非科学化,且未深入LZ4算法内部细节。

本文系统梳理了Postgres压缩框架的历史、原理与决策路径,并结合代码示例和对比数据说明LZ4替代pglz的收益。适合需要理解Postgres存储优化、TOAST机制或索引限制的DBA与开发者,可迁移的价值在于掌握如何诊断压缩效果、选择存储策略以及评估算法升级对性能的影响。内容详实且有长期参考价值。

技术文章Xe Iaso

Presigned URLs are technically a security vuln

文章深入分析了预签名URL的安全设计,揭示其本质是将SigV4签名协议原有的重放攻击防御机制转化为一种可控的功能。作者从SigV4的签名过程讲起,说明通过将当前时间戳纳入签名来限制请求有效期为约15分钟,从而避免全局nonce管理的复杂性。接着详细解剖了预签名URL的各个组成部分,展示其如何将认证信息平铺为URL参数,使任何HTTP客户端都能在指定有效期内无限次重放该请求。文章将预签名URL视为基于时间的权限凭证,并讨论了其实际代价:无法单独撤销、URL容易泄漏、每次调用都计费等。结论指出,预签名URL将签名时间限制反转成了可定时的访问功能,是构建临时分享链接的基础构件,但使用者需理解其适用边界和风险。

本文值得收录,因为它不是浅层的功能介绍,而是从安全协议的底层原理出发,清晰阐释了预签名URL的设计思路和权衡。文章适合后端开发、安全工程师和架构师阅读,帮助理解云存储临时访问机制的实现与局限,其分析的签名时间窗口、能力凭证模型和不可撤销特性可直接迁移到任何使用S3兼容存储的系统设计中。

工程实践Grab Tech

Scaling Grab's Data Lake: Our journey to Apache Iceberg adoption

文章详细介绍了 Grab 从 Hive Parquet 向 Apache Iceberg 迁移数据湖的完整工程实践。首先分析了原始架构在目录延迟、小文件碎片、运维负担和信息一致性上的瓶颈,然后说明了选择 Iceberg 的决策依据。迁移采用按表优先级逐步推进的策略,在导航数据集上通过 Z-ordering 获得约 10 倍查询性能提升,并在运营表上节省了 95% 的 S3 API 成本。为应对 Iceberg、Delta、Hudi 等多格式共存的开发体验问题,团队自研并开源了 UnifiedSparkCatalog,透明路由不同表格式操作。文中还分享了 Hive 锁竞争、时间戳兼容性、存储层级成本等实际坑位和解决方案。案例适合大型数据平台的可扩展存储架构改造,迁移策略和工具设计具有较高的可迁移性。

本文提供了从中型数据湖到现代表格式转型的完整路线图,包含明确的性能与成本量化证据、自研工具的架构取舍和开源发布,以及生产环境踩坑经验。适合数据平台工程师和架构师参考,尤其对计划从 Hive 迁往 Iceberg、需要多格式兼容的团队有直接借鉴价值。

技术文章LWN.net

[$] The kernel's iomap layer

这篇文章解释了 Linux 内核里的 iomap 层到底是什么,以及它为什么会出现在文件系统实现中。作者把 iomap 描述为连接“文件偏移”与“底层存储位置”的映射层:上层面对的是某个文件中的数据范围,下层则可能对应内存地址或磁盘块。基于这层映射,iomap 统一承接了多种文件系统常见操作,从而减少各个文件系统里重复的样板代码。文章的核心结论是,iomap 主要价值在于把通用数据路径抽出来集中处理,但它并不替代文件系统自身的语义和映射逻辑,后者仍然需要各自实现。

收录价值明确,因为正文直接解释了 iomap 的职责边界、抽象对象和它替代重复代码的原因,属于内核文件系统实现层面的长期知识。适合 Linux 内核、存储系统和文件系统开发者阅读,尤其适合想理解通用数据路径如何被抽象与复用的人。

工程实践Grab Tech

Migrating Counter Service storage: Design choices and learnings

文章复盘了 Grab 将 Counter Service 从宽表数据库迁移到 Aerospike 的全过程,核心不是简单换存储,而是先重构读写分层,再按访问模式重新设计数据模型。读路径上,作者把存储访问从业务逻辑中抽出,采用带枚举分发的 facade,并通过 shadow read、split traffic 和配置切换实现无停机、可回滚迁移。写路径上,团队尝试了按桶存行、Secondary Index 和 BatchGet,最终选择“单 counter 单记录 + 有序 map”的结构,用原子 MapIncrement 和显式清理旧桶来降低索引和磁盘占用。文中还记录了 Rust 客户端不成熟、DNS 解析和 NVMe 索引实验带来的问题与回退原因。最终系统在读延迟、成本和存储 footprint 上都有明显收益,但这些收益主要来自 schema 与架构重构,而非数据库替换本身。

推荐收录,因为文章给出了迁移前后的存储分层、影子流量、逐步切流、数据建模和回退验证等完整证据,而不是泛泛谈“换数据库”。适合做存储迁移、在线系统无停机改造和性能/成本权衡的参考,尤其对需要处理高 QPS 计数服务的工程师有直接迁移价值。

工程实践Meta Engineering

Meta’s AI Storage Blueprint at Scale

文章系统复盘了 Meta 为 AI 工作负载重构 BLOB 存储的过程,目标是同时提升 GPU 利用率与研究迭代速度。旧架构沿用多层状态化元数据与全局默认复制,面对闪存级低延迟和 pMax 要求时,跨层查询与跨地域访问会把元数据延迟放大到毫秒乃至百毫秒级,直接造成 GPU stall。新方案将元数据压平为统一 schema 并由 ZippyDB 支撑,去掉数据面代理,改为客户端 SDK 直接从 Tectonic 拉取数据,同时按区域部署以贴近 GPU。为应对热点和突发流量,文中引入 GPU 主机分布式缓存、read-plan 缓存、hedged read 与动态并发控制,并通过预取、显式 hydration 和分层缓存把跨地域等待降到分钟级。文章也明确了边界:该架构更适合写一次、多次读取的训练数据与检查点场景,未来还需继续解决更高规模的网络上限与推理负载。

推荐收录,因为文章给出了从旧版全局存储到 AI 友好型区域化存储的完整重构证据,包括元数据压平、客户端直连、缓存分层和并发控制等可验证设计。适合做大规模训练存储、GPU 利用率优化和数据分发架构的参考,迁移价值高,但也明确依赖写多读多、可预取的训练型负载。

技术文章LWN.net

[$] Initiating writeback earlier

文章围绕 Linux 内核中的 writeback 机制展开,解释了脏页或脏 folio 何时从页缓存刷盘、以保证文件修改持久化。作者转述在 2026 Linux Storage、Filesystem、Memory Management and BPF Summit 上的讨论:Jeff Layton 提出是否应比现状更早触发 writeback,以减少延迟堆积和后续集中回写带来的压力。与会者对“应该更早启动”基本达成共识,但对于由谁触发、触发条件如何设定、以及如何兼顾吞吐和抖动控制,仍没有清晰可落地的路径。文章更像一次内核社区方案讨论纪要,重点在问题定义、权衡关系和未决点,而不是给出最终实现。其价值主要在于帮助读者理解写回策略与内存/存储子系统之间的耦合边界。

收录理由很明确:正文直接讨论 Linux 内核 writeback 的触发时机、系统权衡和社区共识,属于可长期参考的存储/内存管理议题。适合做内核、文件系统和性能调优的背景阅读,但它偏讨论纪要,缺少最终方案与实现细节,读者需注意其阶段性和未决性。

工程实践知乎 - TencentDB腾讯云数据库

腾讯云 NoSQL 技术之 MongoDB 篇:物理备份磁盘膨胀率减少 90% 的内核优化实践

文章围绕 MongoDB 基于 WiredTiger 的物理备份在 hidden 节点上持续膨胀的问题展开,指出根因是 backup cursor 将历史 checkpoint 持续 pin 住,导致旧 extent 不能回收,新写入只能不断追加到文件尾部。作者进一步分析了 oplog.wt 在备份期既最容易膨胀、又几乎没有回档价值的特点,并给出按表级粒度释放 checkpoint 的内核接口 `WT_CONNECTION::backup_release_checkpoint`,让旁路备份服务在拷完单表后即时通知引擎恢复空间回收。针对 oplog,则在备份开始即释放并跳过拷贝,同时配合元数据处理避免恢复失败。文章还补充了 crash recovery 场景下的 sentinel 文件方案,用于区分备份中断与备份完成,避免错误进入 hot backup restore 路径。实测显示,在多表场景下备份耗时约减半,hidden 节点峰值占用和物理膨胀率显著下降,但方案强依赖 MongoDB/WiredTiger 备份与恢复语义。

推荐收录,因为文章给出了从根因分析、内核改造到恢复语义兜底的完整闭环,并用线上实测数据证明了膨胀率和回档成本的下降。适合做数据库存储引擎、备份系统和稳定性优化的参考,尤其对需要处理 checkpoint、快照一致性和 crash recovery 的读者有直接迁移价值。

工程实践Xe Iaso

I taught a bucket to speak git

这篇文章讲的是作者如何把一个对象存储 bucket 改造成能直接承载 Git 仓库的后端,并基于 go-git 与 billy 这些抽象实现了一个纯 Go 的 git server。正文不只是展示“能跑”,还系统复盘了 rename 原语、packfile 写入与读取、stat/list 级联、clone 过程中的随机读放大,以及用本地缓存缓解对象存储高延迟等关键问题,并明确指出哪些地方只是实验性权衡、并不适合直接用于生产。

推荐收录,因为它把“把 Git 放到对象存储上”这个看似奇技淫巧的问题,拆解成了可验证的系统设计与性能问题,具有很强的迁移价值。读者可以从中学习如何用抽象层适配存储语义、如何识别网络存储与本地文件系统的性能鸿沟,以及如何用指标驱动优化。

工程实践知乎 - 皮振伟

漫谈AI推理与存储

这篇文章围绕 AI 推理中的存储需求展开,重点分析了模型权重加载、KV Cache 的数据形态、外部存储布局,以及单机和分布式场景下的 IO 路径选择。作者把 LLM 推理中的启动延迟、GPU 空转、缓存共享、存储分层和成本控制串成一条完整链路,并系统比较了 mmap、GDS、Direct IO、RDMA、NVMe-oF、对象存储等方案的适用边界。最后,文章结合自研 GD2FS 和若干实测数据,提出了面向推理场景的 GPU 直连分布式存储架构,但也明确这些优化高度依赖数据对齐、缓存形态和具体工作负载。

推荐收录,因为它不是泛泛谈“AI 存储”,而是从推理引擎的数据特征出发,逐层分析了存储栈、网络栈和 GPU 直连路径的取舍,具有很强的工程可迁移性。文中还给出了自研系统和实测结果,适合做 AI 基础设施、推理优化和分布式存储方向的长期参考。

工程实践知乎 - SmartCode 得物技术

HorizonVault 技术深潜:如何在 HDD 上做出 100GB/s+ 级大吞吐分布式存储|得物技术

文章深度解析了得物自研分布式存储引擎 HorizonVault 的设计,目标是在通用 HDD 上支撑 Kafka 远程存储、冷热数据下沉等场景,并实现 100GB/s+ 级别的集群吞吐。作者围绕 Broker、Meta、Store、Network、HA 等模块,说明了如何通过顺序追加、小索引定位、磁盘状态治理、线程隔离、网络背压和 follower 主动追赶,把 HDD 的随机 I/O 短板限制在系统可控范围内。文章的核心结论是:高吞吐并不只靠单盘性能,而是依赖资源调度、路由打散和副本同步等机制的组合;但这种方案主要适用于大对象、顺序写占主导的远端存储场景。

推荐收录,因为它不是泛泛介绍“做了一个存储系统”,而是完整讲清了面向 HDD 的高吞吐分布式存储如何在架构、路由、索引、复制和背压上协同工作。对做存储、Kafka Tiered Storage、分布式系统和性能治理的读者来说,这篇文章提供了可直接迁移的设计思路和边界判断。

工程实践知乎 - 皮振伟

LLM分布式推理终极方案——以GPU为中心的云原生架构

文章围绕 LLM 推理部署中 KV Cache 依赖带来的扩缩容困难、命中率波动、内存冗余和成本不透明等问题,提出以 GPU 为中心、通过 GD2FS 这类分布式文件系统承载 L2 缓存的无状态化推理架构。作者进一步用 Kubernetes 的弹性调度类比互联网后端演进,说明显式 KV Cache、零拷贝数据路径、预读分层缓存和可调副本策略如何提升资源利用率、降低主机内存占用,并给出了一组 RDMA/TCP 与多节点推理测试数据作为支撑。文章的主要边界在于:它更像一篇面向落地的架构提案与实践总结,部分性能结论需要结合具体硬件、负载和实现细节理解,不能直接泛化到所有推理场景。

推荐收录,因为它不是单纯讨论 LLM 推理概念,而是把缓存层级、调度弹性、状态管理和存储协议放到同一套架构框架里分析,具备较强的工程可迁移性。对做大规模推理平台、云原生基础设施和 GPU 资源调度的读者来说,这篇文章能提供有参考价值的设计思路、性能指标视角和权衡点。

工程实践Yelp Engineering

How Partition Access Visualizations Reduced our Data Lake S3 Cost by 33%

这篇文章介绍了 Yelp 如何通过“分区访问可视化”来分析数据湖中表分区的真实使用模式:把分区键取值与访问事件时间进行对齐,从而识别出临时查询、每日批处理和周期性回填等不同访问签名。基于这种可观测性,团队进一步推进了大规模表迁移到 Apache Iceberg,并发现了存储和访问层面的优化机会,最终将 S3 成本降低了 33%。文章的核心价值在于把数据资产的“被谁、何时、如何使用”变成可视化、可操作的工程信号,但其效果依赖于较完整的访问日志和分区化数据湖场景。

推荐收录,因为它不是泛泛讲成本优化,而是给出了一种可迁移的数据使用分析方法:通过分区访问模式可视化来指导表格式迁移、生命周期管理和存储优化。对做数据平台、湖仓治理和成本治理的工程师来说,这篇文章能直接启发指标设计、治理流程和架构决策。

工程实践知乎 - 携程技术

携程 JDK25 升级踩坑记:一场由 G1GC “偷走”对象引发的数据静默损坏

这篇文章复盘了携程在将大数据计算集群升级到 JDK25 过程中遇到的一起极其隐蔽的数据静默损坏事故:Spark/Flink 写出的 Parquet、ORC 文件表面写入正常、校验也通过,但下游读取时出现 Zstd/Zip 解压失败。作者通过列级定位、排除存储介质、构造复现环境、JDK 版本二分和自建可指定 commit 的编译环境,最终将根因锁定为 JDK25 G1GC 的一个 bug:Optional Evacuation 错误移动了被 JNI 临界区锁定的对象,进而导致 native 压缩写入指向失效内存。 文章不仅给出了从现象到根因的完整排查链路,还解释了 G1 GC、pinned 对象、GetPrimitiveArrayCritical 这类底层机制之间的关系,并验证了影响范围、规避方案与 OpenJDK 后续 backport 修复。整体上它既是一次高质量线上事故复盘,也是对 JDK 升级、JNI 交互和 GC 风险的可迁移经验总结。

推荐收录,因为它不是简单的“踩坑记录”,而是完整呈现了线上数据损坏问题的定位方法、验证手段、复现路径和最终根因确认过程。对于做 Java 基础设施、计算引擎、存储格式或 JDK 升级治理的读者,这篇文章具有很强的可迁移参考价值。

工程实践知乎 - 胡津铭

Caliby:面向 AI Agent 的嵌入式高性能向量数据库,我们把它开源了

这篇文章介绍了一个面向 AI Agent 和 RAG 场景的嵌入式向量数据库 Caliby,核心卖点是把文本、向量、元数据统一放进同一套进程内引擎,并通过 HNSW、DiskANN、IVF+PQ 三类索引覆盖不同规模与延迟需求。文章还说明了它在磁盘持久化、SIMD 加速、Python 绑定、批量并发检索上的设计思路,并给出与 pgvector、FAISS 的性能对比,强调“pip install 即可用”的本地化部署体验。需要注意的是,正文更偏项目发布与产品介绍,性能数字和结论主要来自作者展示,适合作为选型与架构参考,但不宜当作严谨基准报告直接引用。

推荐收录,因为它不是单纯的产品宣传,而是把“AI Agent 需要什么样的数据引擎”这个问题具体化到了嵌入式、持久化、索引选择和文本/向量统一管理等工程决策上。对做向量检索、RAG、Agent 记忆系统或本地优先工具的读者,这些设计取舍和场景划分具有可迁移价值。

工程实践NVIDIA Technical Blog

Cut Checkpoint Costs with About 30 Lines of Python and NVIDIA nvCOMP

文章介绍在大模型训练中,如何借助 NVIDIA nvCOMP 和约 30 行 Python 为 checkpoint 加入压缩,以降低频繁保存模型权重、优化器状态和梯度带来的存储与传输开销。作者以 70B 模型每次约 782GB、15-30 分钟一次的检查点为背景,指出 checkpoint 已成为训练预算中的重要成本项。方案核心是把压缩与解压尽量放到 GPU 侧处理,减少写盘数据量,同时保持训练中断后的可恢复性。文中展示了接入方式与落地路径,适合 I/O 或存储受限的训练任务,但在算力已接近饱和或检查点规模较小的场景,收益会下降并引入额外压缩开销。

推荐收录,因为文章给出了大模型 checkpoint 降本的具体工程做法,并用 70B 模型 782GB、15-30 分钟一次的量化背景证明问题真实存在。适合训练平台、GPU 基础设施和存储优化读者参考,但需注意压缩会带来额外算力与延迟,效果依赖 I/O 是否为主要瓶颈。

工程实践Dropbox Tech

Improving storage efficiency in Magic Pocket, our immutable blob store

文章复盘 Dropbox 在 Magic Pocket 这个不可变 blob 存储中的一次空间效率退化事件:新上线的 Live Coder 改变了数据放置方式,虽然降低了写放大,却意外制造出大量极度稀疏的卷,导致碎片化和实际复制开销迅速上升。作者先解释不可变存储里删除不会立刻释放空间、只能依赖垃圾回收加压缩回收的基本机制,再说明原有 L1 只能维持“接近满卷”的稳态,无法快速处理长尾稀疏卷。为此团队引入 L2,用动态规划把多个中度稀疏卷合并到近满新卷;又引入 L3,把最稀疏的卷交给 Live Coder 流式重写回收。文章进一步给出动态阈值、候选排序、速率限制、机房内本地化等控制手段,并指出元数据压力是主要约束。最终该方案把膨胀的 overhead 拉回到可持续水平,甚至低于之前基线。

推荐收录,因为它给出了 exabyte 级不可变存储中“碎片化—压缩—元数据压力”三者联动的完整工程解法,且明确展示了 L1/L2/L3 分层策略、动态阈值和限流边界。对做存储系统、容量治理或大规模后台任务调度的读者,具有很强的可迁移参考价值。

工程实践Crunchy Data Blog

Postgres 18 New Default for Data Checksums and How to Deal with Upgrades

文章介绍了 Postgres 18 将数据校验和(data checksums)设为 initdb 的默认开启项,强调其核心价值是及早发现磁盘页的静默损坏。作者先解释校验和如何在写入数据页时生成、存入页头,并在读取时重新计算比对,从而把原本难以察觉的数据腐败转化为可报警错误。随后文章说明这一默认变化对新建集群是纯收益,但会影响使用 pg_upgrade 的大版本升级,因为新旧集群的校验和开关必须一致。文中给出两条应对路径:升级时可用 --no-data-checksums 保持兼容,或提前用 pg_checksums 为现有集群补开校验和,但后者通常需要停机或通过副本切换来降低影响。整体适用于自建 PostgreSQL 运维、升级规划和备份完整性管理场景。

文章直接给出 Postgres 18 默认行为变化、pg_upgrade 兼容条件和 pg_checksums 处理方案,证据明确且可操作性强。适合数据库运维、平台工程和升级规划读者,尤其对自建集群的完整性保障与停机权衡有长期参考价值。

技术文章PlanetScale Blog

B-trees and database indexes

文章系统解释了 B-tree 与 B+tree 的结构差异、节点有序性、查找/插入路径,以及它们为何特别适合磁盘上的持久化数据。作者进一步结合 InnoDB 说明:表数据和二级索引都会落到 B+tree 上,查询通常需要先查索引再回表,因此访问的页数直接决定性能。文章重点比较了自增整数、UUIDv4、UUIDv7 等主键选择对树深度、页分裂、写放大和数据局部性的影响,指出随机键会导致插入路径不可预测、叶子分散、缓存命中更差,而顺序键更利于保持浅层和连续访问。文中还说明了页大小、buffer pool 和表宽度对单页可容纳行数的影响,并给出主键大小与可扩展性的权衡。整体适合理解数据库索引底层机制,但内容主要面向 MySQL/InnoDB 场景,结论迁移到其他存储引擎时需结合其页布局和实现差异。

文中直接给出 B+tree、InnoDB 页和二级索引回表的工作方式,并用主键选择解释性能差异,证据充分、可验证。适合数据库开发、后端和性能优化读者,尤其是需要评估主键设计、索引布局和随机写放大风险的场景。

工程实践PlanetScale Blog

Faster backups with sharding

文章系统解释了 PlanetScale 在 Vitess 体系下的备份流程:先从对象存储取回上一次备份,恢复到专用 VTBackup 实例,再让其通过主库做短暂追平,最后生成新的全量备份写回 S3/GCS。作者强调,单库越大,顺序备份越容易被网络与恢复耗时拖慢;而分片后每个 shard 可并行执行同样流程,从而把总体备份时间显著压缩。文中用 161GB 未分片库与 20TB、32 分片库对比,说明总体吞吐提升主要来自并行化,而非单分片传输速度大幅上涨。文章还补充了备份的工程意义:它不仅用于灾难恢复,也用于新副本初始化、误删恢复和 Vitess 的时间点恢复。适用前提是数据库已分片且备份/恢复链路能并行调度;若是单体库或分片不均,效果会明显打折。

推荐收录,因为文章给出了可复用的备份链路设计、分片并行化带来的吞吐收益,以及备份在副本初始化和误删恢复中的真实作用。对做数据库基础设施、MySQL/Vitess、备份恢复或大规模系统运维的读者尤其有参考价值,但前提是系统本身具备分片与并行恢复能力。

技术文章PlanetScale Blog

The MySQL adaptive hash index

这篇文章系统解释了 MySQL InnoDB 中的自适应哈希索引(AHI)是如何在 B-tree 索引之上再加一层内存加速的。作者先回顾了 B-tree、InnoDB buffer pool 和普通哈希查找的差异,说明 InnoDB 虽然不支持磁盘上的 HASH 索引,但会在运行时为高频访问的索引值或前缀构建 AHI 条目,把键映射到 buffer pool 中的数据位置。文章还说明 AHI 会根据访问模式和 buffer pool 命中情况自动增减,适合重复查同一批热点值的场景,不适合缓存很小或数据访问很分散的负载。通过 3.9 亿行表上的基准测试,作者展示了开启 AHI 后约 16% 到 20% 的 QPS 提升,并用 InnoDB 状态输出验证了哈希搜索确实被使用。结论强调:AHI 不是通用银弹,但在高并发、热点明显且索引较深的系统中,哪怕单次收益不大,也可能显著影响整体延迟和服务器容量。文章的边界也很清楚:收益高度依赖工作负载、buffer pool 大小和重复访问模式。

推荐收录,因为文章不仅解释了 AHI 的工作机制,还给出了 buffer pool、哈希命中统计和真实基准测试结果,能帮助读者判断它为什么快、何时有效。适合做 MySQL/InnoDB 性能优化、热点查询分析和存储引擎原理参考;但收益强依赖访问模式,不能把文中的提升直接外推到所有业务。

技术文章PlanetScale Blog

The Problem with Using a UUID Primary Key in MySQL

本文系统解释了 UUID 各版本的结构差异,并将讨论重点落在 MySQL 中把 UUID 作为主键时的代价。作者通过 B+Tree 索引、页分裂和 InnoDB 页填充机制说明:随机 UUID 会打乱主键顺序,导致插入时更频繁地重平衡索引,从而拖慢高写入场景的性能。文章进一步指出,UUID 以字符串形式存储会显著放大主键和二级索引体积,即使用 BINARY(16) 也仍比自增整数更占空间。针对这些问题,作者给出几类缓解方案,包括改用二进制存储、采用有序 UUID 版本(如 v6/v7)、利用 MySQL 的 UUID_TO_BIN swap flag,或直接选择 Snowflake、ULID、NanoID 等替代 ID 方案。整体结论是:UUID 能提升分布式唯一性,但在 MySQL 中并非默认的最优主键选择,是否采用应结合写入模式、索引数量和存储成本综合判断。

推荐收录,因为文章不仅说明“UUID 不适合当主键”的结论,还用 B+Tree、页分裂、二级索引膨胀和页利用率等机制给出直接证据。适合做数据库设计、主键选型和性能排障的长期参考,尤其对需要在分布式唯一性与写入性能之间权衡的工程场景很有迁移价值。

技术文章PlanetScale Blog

Working with Geospatial Features in MySQL

这篇文章系统介绍了如何在 MySQL 中表示和处理地理空间数据,先区分了实体、空间两类地理对象,再说明 POINT、LINESTRING、POLYGON 及其多几何类型在表中的存储方式。作者进一步解释了 WKT、WKB 和 MySQL 内部格式的区别,以及 SRID 如何决定坐标系和计算语义。文中给出了创建带 SRID 4326 的空间列、添加 SPATIAL KEY 的建表示例,并演示了距离、面积、包含、相交、缓冲、并集和差集等常用空间函数。最后比较了 MySQL 8 与 5.7 在 SRS 感知和空间索引上的改进,指出旧版本常在平面坐标和最小外接矩形上计算,精度和可用性都受限。整体适合作为入门到实操的参考,但示例主要覆盖基础用法,复杂 GIS 场景仍需结合具体投影与数据分布验证。

文章直接给出了 MySQL 空间数据类型、SRID、空间索引和常用函数的示例,证据充分,适合需要在数据库中存取地理位置、做邻近查询或范围分析的开发者。它的可迁移价值在于把“如何建表、如何查询、MySQL 8 为什么更准确”讲清楚;主要限制是停留在基础教程层面,复杂投影和大规模 GIS 负载还需进一步验证。

工程实践Datadog Engineering

Introducing Husky, Datadog’s third-generation event store

文章介绍 Datadog 第三代事件存储 Husky,核心定位是一个“解耦”的分布式无模式向量化列存,用来承载高吞吐观测事件数据。作者从前两代系统的局限出发,说明为什么需要同时兼顾写入扩展、查询效率和模式灵活性,而不是继续沿用单体式或强绑定架构。文中重点讨论了 Husky 的设计目标:让存储能力随负载独立演进,并为分析型查询提供更适合列式扫描与向量化处理的数据布局。它的价值主要体现在观测平台这类高基数、宽表、模式变化快的工作负载上,但并不等同于通用数据库方案。对存储系统、分布式系统和可观测性基础设施的读者,这是一篇适合理解架构演进与取舍的工程案例。

收录依据很明确:标题和摘要直接表明这是 Datadog 对第三代事件存储 Husky 的设计复盘,强调“how we built it—and why”,属于典型的工程架构案例。适合做观测数据平台、分布式存储和列式查询系统的参考;其可迁移价值在于理解高吞吐写入、分析查询和模式演进之间的权衡,但方案本身强依赖 Datadog 的业务负载。