Storage Systems

91 篇内容

工程实践ClickHouse Engineering

chDB Durable Layer for agent memory

本文介绍 ClickHouse 团队为 agent memory 设计的 chDB Durable Layer。作者先复现问题:基于嵌入式 OLAP 引擎 chDB 构建的 agent memory 状态只能停留在单机磁盘,无法在 CI、短生命周期沙箱和第二台机器上复用,而已有方案(SQLite checkpointers、SQLite+Litestream、Postgres/pgvector/服务端 ClickHouse、Cloudflare Durable Objects、本地 DuckDB/chDB)在可移植性与本地热路径之间各有取舍。核心方案是“本地工作副本 + 对象存储权威副本”两层结构:查询仍在进程内 chDB 上执行,以显式 flush() 作为持久化边界,checkpoint() 折叠 WAL,head.json 配合条件写实现单写者租约与 fencing。文章给出 append-only 表建模、冷热分层、ZSTD 压缩(1.45GB 转录压至 521MiB)、本地查询比远程快 58 倍等实践数据,并以 ClickMem、Maple Local、ReplayHouse、vcfclick 为例。边界包括单写者、V1 WAL 要求确定性语句、不适合 OLTP 与多写者共享场景。

推荐收录,因为它从真实工程问题出发,给出可复用的架构取舍:本地工作副本与对象存储权威副本分工、显式 flush()/checkpoint() 持久化边界、基于 head.json 条件写的单写者租约,并附方案对比表、压缩与延迟实测以及建模最佳实践。适合为 agent/LLM 应用设计记忆与持久化层的工程师,以及需要嵌入式 OLAP 可恢复状态的读者;主要限制是仅适用单写者、单用户/单项目场景,多写者共享仍需服务端数据库。

工程实践Cloudflare Blog

How Cloudflare addressed a cross-tenant data exposure vulnerability in Containers

文章复盘 Cloudflare Containers(及基于其构建的 Sandboxes)的跨租户数据泄露漏洞。根因是 Linux dm-thin 存储池配置了 skip_block_zeroing,64 KiB 物理块复用时不零化;新容器在新分配的块上只写入 4 KiB,其余 60 KiB 可能残留前一容器数据,可通过 /dev/vdc 裸读观察。研究者用 ext4 目录块校验和区分自有与外来块,在四大洲投放中复现出目录结构、数据库页甚至完整 SQLite 数据库残留,但无法定向选择受害者,也无法访问活跃挂载的磁盘。Cloudflare 移除该选项、退役全部旧容器磁盘并清理缓存的镜像快照,再基于历史磁盘 I/O 遥测构造检测特征,未发现恶意利用证据,并给出完整处置时间线。

推荐收录。文章给出可验证的根因链条:dm-thin 的 skip_block_zeroing 语义、4 KiB 写入仅覆盖 64 KiB 块导致残留、ext4 校验和归因方法,以及移除选项、退役旧磁盘、清理缓存镜像快照并回测验证的完整修复路径。适合多租户云平台、容器运行时与存储隔离方向的工程师和安全研究者阅读,其块级残留分析与遥测检测思路可迁移到同类隔离审查。

技术文章SelectDB 技术分享

Apache Doris 高性能 Open Lake Variant 读写技术解析 面对日志、事件、AI 调用等不断变化的半结构化数据,如何既保留灵活结构,又实现高效查询?从 Doris 4.2 ...

Doris 4.2 起可在 Iceberg、Paimon 上直接读写 VARIANT 半结构化数据。文章分三层讲解:值由 metadata 字段名字典与 value 二进制编码,可按路径拆成类型子列,类型不匹配的值保留在 residual/fallback;读取按文件与 Row Group 选择叶子投影、残余补齐或完整投影,并结合统计裁剪;执行层保留 Encoded、Typed、Shredded 三种形态并延迟物化,避免重建完整对象。写回时 Iceberg 经 Arrow 生成 Parquet,Paimon 经 JNI 交给原生 writer,当前不回写拆列文件。测试称相比 Spark 冷跑 15.10×、热跑 19.14×,拆列热跑 58.64×,但 SQL 示例未在集群执行。

Doris 团队完整拆解了 Variant 的编码、拆列、按路径读取与延迟物化机制,并给出可观测的 Profile 指标和冷热跑对比数据,可作为湖仓半结构化数据格式设计与查询优化的参考。适合从事 OLAP/湖仓选型、Parquet 列裁剪与执行引擎优化的工程师阅读;需注意性能数字来自厂商自测、不含导入耗时,SQL 示例也未实机验证。

技术文章TiDB 社区博客 - 技术解读

我的TiDB 架构原理概念学习

文章系统梳理 TiDB 的分布式架构原理,围绕分层解耦与计算存储分离展开。先介绍 TiDB Server、PD、TiKV、TiFlash 四组件职责,再说明 Region 分片、RocksDB 双实例、Raft 多副本与 PD 调度机制;随后解释基于 Percolator 和 MVCC 的分布式事务,以及乐观/悲观两种模式。接着讨论 HTAP 双引擎:TiFlash 以 Raft Learner 异步同步、ReadIndex 一致性读取和 MPP 并行执行支撑分析查询,最后总结计算下推等优化原则。内容适合作为入门概览,但对具体源码、调优参数、故障案例与实验数据展开较少。

推荐收录:文章以分层解耦为主线,完整串联 TiDB 四组件、Region/Raft 存储机制、Percolator 事务和 TiFlash HTAP 协同,能帮助读者建立分布式数据库的全局架构认知。对需要理解计算存储分离、多副本一致性与 HTAP 取舍的开发者、DBA 和系统设计者具有迁移价值;不足是偏概念综述,缺少源码、参数调优和故障案例,适合入门与复习而非深度排障。

技术文章Greptime 技术

JSON Is No Longer a Blob: Inside GreptimeDB 1.2's New JSON Type

文章深入解析 GreptimeDB 1.2 新增的 JSON2 类型,针对传统 JSONB 按整文档存储、分析查询需读取并解析完整 JSON 的问题。其核心是有界自动 shredding:高频路径展开为独立列,并分为静态类型路径、预算内动态路径和 Parquet Variant 余量三层;查询时通过类型具体化从 SQL 推断所需结构类型,类型提示可固定路径类型并拒绝不匹配写入。结论是 JSON2 适合日志、trace 等可观测性场景,能按路径裁剪读取且保留原始嵌套;但冷路径仍需读余量,类型推断可能出错,自动展开有上限,1.2 中修改配置尚未正式支持。

推荐收录:文章不仅介绍功能,还给出 JSONB 与 JSON2 的读写差异、三层存储、类型具体化、类型提示和完整 SQL 示例,并引用 JSONBench 数据说明边界。适合数据库、存储引擎、可观测性平台工程师理解半结构化数据的列式化设计;可迁移到日志/trace 分析中的路径裁剪、列式存储和类型约束设计,但需留意冷路径读取与类型推断错误风险。

技术文章Greptime 技术

JSON Is No Longer a Blob: Inside GreptimeDB 1.2's New JSON Type

文章解析 GreptimeDB 1.2 新增的 JSON2 类型,面向日志、Trace 等路径繁多但查询只访问少数路径的 JSON 数据。传统 JSONB 按整文档存储,读一个字段也需扫描和解析完整文档,索引无法消除这类 I/O 与 CPU 放大。JSON2 采用有界自动 shredding,将热路径展开为独立 Parquet 列,长尾写入 Parquet Variant remainder,并支持 type hints 固定类型;查询端通过 query type concretization 从 SQL 推导结构化类型,实现列裁剪与向量化执行。局限是类型推断依赖 SQL 表达式,写错可能返回无意义结果,且 1.2.x 不能修改已有 JSON2 配置。该方案适合可观测性分析,但冷路径仍需读 remainder,自动展开预算默认 100。

推荐收录。文章基于 GreptimeDB 1.2.1 的真实实现,清晰给出 JSONB 整文档读放大、JSON2 有界 shredding、Parquet Variant remainder、query type concretization 与 type hints 的设计细节和 SQL 示例,并明确说明类型推断错误、冷路径成本和 1.2.x 配置不可变等边界。适合数据库内核、存储引擎和可观测性平台开发者参考,其“热路径列化+长尾归并+查询驱动类型推导”的取舍可迁移到其他半结构化分析系统。

科研议题知乎 - 胡津铭

数组作为buffer pool,这也行??

本文由论文作者介绍其参与的一篇 SIGMOD 2027 工作,提出名为 Calico 的基于数组的 buffer pool 设计。作者先分析现有方案:LeanStore 的翻译设计不支持图等数据结构,vmcache 依赖 mmap 而在数据库中带来诸多不便。Calico 的核心思路是跳过 hashmap 直接用数组实现 buffer pool,利用其轻量、局部性好和支持组预取的优势,并通过多级翻译(前缀加后缀)与路径缓存解决 page id 稀疏问题,可类比为用户态的 page table 实现。作者将 Calico 集成进 PostgreSQL,在线性扫描、join 和向量检索场景下分别获得 50% 至 200% 和 4-6 倍性能提升,向量检索甚至超过 faiss。文章为作者视角的概览,未展开全部实验细节与局限。

推荐收录。文章出自论文作者本人,清楚交代了 Calico 的问题动机(LeanStore 局限与 mmap 弊端)、关键设计(数组 buffer pool、多级翻译、路径缓存)以及集成 PostgreSQL 后的量化收益,并说明了向量检索等适用场景。对从事数据库存储引擎、向量检索系统或性能优化的读者,可迁移其“简单结构加精细细节设计”的思路;主要不足是缺少实验边界与失败情形的深入讨论。

技术文章PlanetScale Blog

Anatomy of a (Postgres) search engine

文章系统讲解全文搜索倒排索引的内部结构,并落到 Postgres 场景说明工程实现。核心组件包括词项字典、postings list、位置数据与词频统计;postings 通常有序存储,并用差值编码、位图压缩减少空间,以支持并集/交集、短语和跨度查询。查询侧还讨论 tokenizer、停用词、词干化带来的精度取舍,以及 BM25 打分和 top-k 通过块级统计跳过 postings 的优化。更新删除依赖不可变 segment、tombstone 和后台 merge,但合并带来大量 I/O 与临时空间,删除则造成空间放大和过滤开销。最后分析 Postgres 集成约束,包括 ctid 映射、WAL、VACUUM、可见性映射、查询规划器与 CustomScan。文章偏概念性综述,TIN 的性能数据和实现细节需阅读另一篇深潜。

推荐收录:文章完整解释倒排索引的词项字典、postings 压缩、BM25、segment 合并与 Postgres 集成约束,技术证据密度高。适合数据库、搜索和后端工程师建立系统认知,也可迁移到 Lucene、Elasticsearch 类系统的选型与调优。主要局限是概念综述,TIN 的具体性能数据需参考另一篇深潜。

技术文章Kubernetes Blog

Kubernetes v1.37: Tracking When a PersistentVolumeClaim Was Last Used (Beta)

文章介绍 Kubernetes v1.37 将 PersistentVolumeClaimUnusedSinceTime 特性门控提升为 Beta 并默认启用。PVC 保护控制器会在每个 PVC 上维护 Unused 条件:没有非终态 Pod 引用时为 True,原因为 NoPodsUsingPVC;至少一个运行或 Pending Pod 引用时为 False,原因为 PodUsingPVC。文章说明已完成 Pod 不计入使用,Pending Pod 仍计入,多个 Pod 需等最后一个非终态 Pod 移除后才转为 True,并利用 lastTransitionTime 判断 PVC 空闲多久。文中给出 kubectl/jq 查看条件和筛选闲置超过 30 天 PVC 的示例,并指出 Alpha 到 Beta 增加了端到端测试,未来计划 GA。适用于集群存储清理与成本治理,但特性仍处 Beta,行为可能随版本演进。

推荐收录。该文不是简单发布公告,而是由 Kubernetes 官方给出 Unused 条件的精确语义、终态/Pending/多 Pod 边界和可执行 jq 查询,可直接指导闲置 PVC 发现与存储成本治理。适合 Kubernetes 存储管理员、SRE/DevOps 和平台工程读者,迁移价值在于把 PVC 生命周期可观测性纳入日常运维。需注意其行为绑定 v1.37 Beta,后续 GA 可能调整。

科研议题知乎 - 胡津铭

数据库应该如何写SSD

本文解读 VLDB 2026 荣誉提名论文《How to Write to SSDs》,介绍 TUM Viktor Leis 团队提出的软硬件协同设计(hardware-software codesign)思想。文章指出,B+ 树数据库沿用机械硬盘时代找到数据页后原地更新(in-place write)的方案,在 SSD 上会因硬件层面的 out-of-place write 特性产生严重写放大,拖慢写入效率。团队据此设计面向 SSD 的 B+ 树 out-of-place write,并配合压缩、页打包、按死亡时间分组、对齐数据库与 SSD 垃圾回收粒度等优化,核心论点是数据库比操作系统和硬件更了解工作负载,因而拥有更多信息优化系统。该方案用于 LeanStore 后,在 YCSB 和 TPC-C 上写放大降低约 7 倍、吞吐量约翻倍。文章偏重思想梳理、未展开技术细节,读者需回看论文原文。

推荐收录:文章把一篇 VLDB 论文的核心问题、协同设计思路和量化结果(写放大约 7 倍、吞吐翻倍)讲清楚,并点明“数据库比 OS/硬件更懂工作负载”这一可迁移原则。适合做数据库存储引擎、SSD 写路径或硬件协同优化方向的读者快速建立线索,不足之处是省略了技术细节,需结合原文阅读。

科研议题知乎 - 胡津铭

F3:面向未来的文件存储格式设计

本文解读清华张焕晨团队与CMU的Andy老师合作、获SIGMOD 2026 Honorable Mentions的论文《F3: The Open-Source Data File Format for the Future》。作者指出Parquet/ORC等十多年前设计的格式正因硬件与需求演进(存储网络提速、ML场景需存向量/图像/文本、宽表取少列)而逐渐过时,但每引入新编码都要全面升级格式库,跨语言跨平台兼容性使扩展难以落地。F3的核心思路是把解码器以wasm形式内嵌进文件:库程序若有原生解码器就用原生,否则加载文件内wasm执行,wasm体积仅数KB级别、性能约为原生的70%~90%。F3还解耦Row Group、编码最小单元与物理IO单元的绑定,并用FlatBuffers序列化列级元数据以降低宽表取少列的反序列化开销。文章明确指出随文件分发程序带来安全风险,论文把中心化验证留作未来工作,并补充了更早的同类工作AnyBlox(VLDB 2025最佳论文)。

推荐收录。文章准确提炼了F3要解决的格式扩展兼容性痛点、内嵌wasm解码器的机制与性能取舍,并客观指出安全验证缺口,还延伸到AnyBlox、Lance、Bullion等同类工作,形成可追踪的学术脉络。适合关注数据库存储格式、数据湖与ML数据基础设施的读者,用来理解文件格式演进方向及“解码器随文件分发”这一可迁移设计思路;不足是未深入实验数据与安全方案的可行性论证。

技术文章TiDB 社区博客 - 技术解读

TiDB 的 Region:不是书架格子,而是一段会“分裂、搬家、合并”的图书编号区间

文章以图书馆编号区间为比喻,纠正“Region 是固定物理格子”的常见误解,指出它是 Key 空间中的连续区间及对应 Raft 副本状态。作者分层解释 Region、Peer、Raft Group、PD 与 RegionCache 的关系,并说明 Split、Merge、副本迁移如何改变逻辑边界和副本分布。文中还串联 RegionEpoch、EpochNotMatch/NotLeader 处理,以及 SQL 请求经 TiDB、RegionCache、Leader Peer 到 RocksDB 的定位路径。核心结论是逻辑分片与物理存储、复制和调度解耦,从而支撑弹性扩展、高可用与负载均衡。边界在于作者声明为个人学习解读,未展开源码、实验和版本差异,阈值与具体机制仍依赖 TiDB/TiKV 配置。

推荐收录:文章用清晰比喻和分层结构,把 Region、Peer、Raft、PD、RegionEpoch 及请求路由串成完整认知链路,并明确 Split/Merge/迁移的边界,能帮助 TiDB/TiKV 初学者和分布式数据库开发者建立正确心智模型。它不是产品发布或泛泛教程,核心概念和排障思路可迁移到分布式分片系统,但读者需注意其个人解读属性,具体阈值应回到官方文档与版本源码验证。

技术文章DuckDB Engineering Blog

Persistent Databases in the Browser with DuckDB-Wasm and OPFS

文章介绍 DuckDB-Wasm 如何借助浏览器 Origin Private File System(OPFS)实现持久化数据库:通过 open({path: 'opfs://analytics.duckdb'}) 打开数据库文件,数据以标准 .duckdb 文件加 WAL 的形式落盘,可跨页面刷新和浏览器重启存活,无需 IndexedDB 封装或应用层序列化。文中给出完整代码示例,说明远程 Parquet 数据只在首次加载时通过 HTTP range 请求获取,之后由 OPFS 提供;并对比了 auto 与手动 registerOPFSFileName 两种文件处理模式在便利性和句柄开销上的取舍。持久性部分指出浏览器标签页很少被干净关闭,因此应在每批写入后显式执行 CHECKPOINT,或将 checkpoint_threshold 设为 0,否则 WAL 重放会拖慢下次打开。文章还提醒 OPFS 属于可能被浏览器回收的存储,应定位为本地缓存而非唯一数据副本,并演示了通过 OPFS API 或 COPY 到 Parquet 导出数据;同时给出仅支持单句柄、SQL 重命名受限、npm latest 版本存在路径规范化 bug 等边界。

推荐收录:这是 DuckDB 官方对浏览器内持久化数据库的机制级说明,包含可运行代码、WAL 与 checkpoint 的持久性权衡、文件句柄与版本兼容等真实约束,证据具体而非概念宣传。适合做 local-first Web 应用、浏览器端分析或 Wasm 存储选型的开发者,其中的检查点策略、缓存与真实数据源分层、导出路径等判断可直接迁移到类似离线优先系统。主要风险是 API 与版本行为仍在演进,读者需核对所固定版本与官方限制说明。

工程实践JuiceFS 工程技术

Keeping GPUs Fed: How Meta's AI Storage Architecture Aligns with JuiceFS

文章以 Meta 公开的 AI 存储蓝图为例,剖析其 Tectonic 块存储、BLOB 元数据层、内嵌 BlockClient 的富客户端 SDK、Owl 分布式缓存以及 L1/L2/L3 分级缓存和跨区域全局数据湖设计,说明其如何缓解 exabyte 规模下 GPU 因存储瓶颈而 stall 的问题。作者指出 Meta 最终收敛的核心原则——数据与元数据分离、富客户端直连数据面、多级缓存、跨区域复制——与 JuiceFS 从设计之初的三组件架构(对象存储、元数据引擎、客户端)高度一致,并给出组件对照表和缓存预热(prefetch 对比 juicefs warmup)等具体例子。文中引用 80% 平均缓存命中率、跨区域摄取时间下降 93%/97%、GPU 空转 20% 对应每小时数千万美元损失等数据支撑动机。适用边界在于内容主要基于公开资料做高层对比,缺少可复现的测量细节与失败边界分析,且带有明显的厂商推广立场。

推荐收录,因为它把 Meta 的 AI 存储架构拆成数据层、元数据层、富客户端和分级缓存几个可迁移的设计维度,并给出与 JuiceFS 的逐项对照表、L1/L2/L3 缓存分层以及 prefetch/warmup 预热机制等具体证据,便于读者理解 GPU 训练场景下存储系统的通用取舍。适合从事 AI 训练基础设施、分布式存储或缓存设计的工程师参考。主要风险是内容源自厂商博客且数据多为二手转述,缺少独立验证,阅读时需对产品对比结论保持审慎。

技术文章Kubernetes Blog

Kubernetes v1.37: Hardening Container Storage with Bind Mount Options and EmptyDir Permissions

Kubernetes v1.37 引入 volumeMounts.bindMountOptions 与 emptyDir.mode 两项 Alpha 安全特性,用于在容器卷挂载上设置 noexec、nosuid、nodev,并控制 emptyDir 创建权限。文章先回顾 Linux bind mount 标志、Unix 权限和 sticky bit,指出默认 emptyDir 为 0777 且缺少挂载选项,会导致可写卷中执行恶意二进制或跨容器删除文件。随后用 Pod 示例展示 /tmp 启用 noexec/nosuid,以及用 01777 保护共享目录,并给出 kubectl exec 验证方法。还说明 bindMountOptions 与 PV mountOptions 分层不同、fsGroup 会覆盖 mode、仅 Linux 生效、需要运行时支持 CRI mount_options、特性门控和版本偏移行为。适用边界是 Alpha,默认行为不变,未启用门控或运行时不支持时不会生效或会被拒绝。

推荐收录,因为文章不仅介绍 Kubernetes v1.37 新特性,还给出 Linux 底层机制、Pod 清单、验证命令,以及和 PV mountOptions、fsGroup、运行时支持之间的边界,属于可复用的安全加固参考。适合 Kubernetes 平台工程师、应用开发者和安全工程师,在设计多容器共享卷权限或启用 Alpha 特性时参考;主要风险是特性仍为 Alpha,生产采用需关注门控和运行时兼容性。

工程实践Oxide Public RFDs

RFD 0595: Oxide CSI Plugin

本文是 Oxide 的 RFD 595,扩展 RFD 493,系统设计面向 Oxide 云盘的 Kubernetes CSI 插件。文章解释 CSI 的 CO、SP、工作负载、卷与节点术语,以及 Identity/Controller/Node 服务和 sidecar 部署模式,并按卷生命周期把 RPC 映射到 Oxide API:CreateVolume 用 POST /v1/disks,ControllerPublishVolume 用 attach,NodeStage/NodePublish 在 Linux 上分区格式化并挂载,卸载和删除分别用 detach 与 DELETE。文中给出 Deployment、DaemonSet、CSIDriver、StorageClass 与 PVC 示例,并列出热插拔需停机、单实例最多 8 盘、设备令牌认证、无法扩容/克隆、仅支持 SINGLE_NODE_WRITER、多机架拓扑未定等限制;首版仅支持创建删除、挂载卸载和快照恢复。

推荐收录。该 RFD 不是概念介绍,而是给出 CSI RPC 到 Oxide API 的逐项映射、Kubernetes 部署 YAML 与明确的阻塞/限制/开放问题,适合 Kubernetes CSI 驱动开发者、平台与存储工程师阅读。其 sidecar 模式、卷生命周期处理、幂等与拓扑约束分析可迁移到其他存储插件设计;但内容绑定 Oxide API 且仍处讨论状态,读者需注意版本与实现可能变化。

工程实践Oxide Public RFDs

RFD 0493: Initial Kubernetes Integrations

本文是 Oxide 的 RFD 493,讨论其平台最关键的 Kubernetes 集成并给出路线图。文章先概述 Kubernetes 组件和声明式 API,再区分原生集成与发行版集成,逐项分析 Cloud Controller Manager、Cluster API、CNI、CSI、Ingress/Gateway API、Rancher Node Driver 的问题、所需 Oxide API、开发量和延期风险。路线图分三阶段:优先 Cluster API 与 Rancher Node Driver 改进,其次 CCM 和 Rancher UI 扩展,最后 CSI;CNI、Ingress、Gateway API 明确推迟。边界是 Oxide 暂不提供托管 Kubernetes,部分估算需更多研究,方案高度依赖其自身 API 与存储、网络能力。

推荐收录:这是已发布的 Oxide RFD,提供了集成点、所需 API、开发量、延期风险和分阶段路线图等直接证据,而非泛泛介绍。适合平台工程、Kubernetes 发行版/云集成和基础设施团队参考,可迁移的是如何按客户价值与差异化程度排序集成、推迟非核心组件;主要风险是结论绑定 Oxide 平台,外部读者需注意其前提。

工程实践Oxide Public RFDs

RFD 0490: Packed Crucible extents

该 RFD 把 Crucible 原始文件格式从块数据与每块上下文分离,改为交错打包,以减少上下文冗余并提升对 ZFS 的机械友好性。为保证崩溃一致性,作者分析 ZFS 的 zfs_write 会在 recordsize 边界拆分事务,因此要求块与上下文落入同一 transaction group,并按 recordsize 对齐。元数据上把 BlockContext 缩减为 PackedBlockContext,去掉 on_disk_hash,依赖 ZFS 校验或解密验证,使 512 字节块的上下文开销从 18.75% 降至 6.25%。消息层引入 PackedWrite/PackedReadResponse,只读区域保留 raw,可写区域迁移到 packed;初步随机读测试显示小读约 1.4 倍提升,但方案依赖 ZFS 实现细节并增加迁移复杂度。

推荐收录。该 RFD 不是概念介绍,而是给出可验证的工程证据:ZFS 事务拆分源码分析、recordsize 对齐约束、上下文结构缩减方案,以及随机读 1.08–1.42× 的基准数据。适合存储系统、虚拟化与基础设施工程师阅读,其崩溃一致性设计、文件布局与消息格式迁移思路可迁移到其他基于事务文件系统的存储系统;风险是结论高度依赖 ZFS 与 Crucible 具体实现。

工程实践Oxide Public RFDs

RFD 0445: Crucible Upstairs Backpressure

该 RFD 解析 Crucible Upstairs 的背压设计,说明现有背压由在途写字节数和活跃作业数决定,取二次延迟曲线最大值,在写返回前施加人工延迟并持锁,避免并发写压垮系统。作者以“吞吐背压”模型解释系统稳定在“一进一出”状态,并指出 IOP/带宽限制未接入背压、MAX_ACTIVE_COUNT 为硬限制、大写在途字节延迟未钳制可能导致故障阈值难触发,以及大量写后 flush/read 延迟变长等不足。文末决定增加在途字节故障条件、调参曲线并移除/重实现 IOP/带宽限制,还讨论曲线形状、其他背压来源与资源受限下的 QoS 安全考量。结论主要基于 Crucible 具体实现,需结合目标系统验证。

推荐收录。它来自 Oxide 公开 RFD,围绕真实存储系统遇到的上层队列堆积问题,给出了背压实现、队列限制、故障阈值和延迟/吞吐权衡的一手设计证据,并明确列出不足与后续决定。适合存储系统、分布式系统、SRE 和性能可靠性工程师阅读,其中“按资源量分级施加背压、同时用故障阈值兜底”的思路可迁移到其他有界资源系统;需注意其参数和结论绑定 Crucible 实现,迁移时要重新验证。

工程实践Oxide Public RFDs

RFD 0457: Control plane sled lifecycle

本文是 Oxide 机架控制平面的 RFD 457,定义物理 sled/磁盘与控制平面 sled/磁盘两类对象及其生命周期。作者先区分 in_service、quiesced、failed、expunged 与 graceful removal,再围绕 sled 和 physical_disk 表设计 policy 与 state,规定添加、优雅移除和 expunge 在分配、信任仲裁、电源、实例迁移、Crucible region 替换和 Omicron zone 重建上的差异。文章用 blueprint planner/executor 流程说明 sled/磁盘的添加与 expunge 顺序,并强调 expunge 必须由运维触发,避免把瞬时故障误判为永久移除。对于 expunged sled 如何确保不再启动,文中比较 Ignition 断电、服务处理器 A2 与 trust quorum,指出仍有开放问题;磁盘误拔重插则要求 Sled Agent 重新建立服务并告警。边界是 quiesce、临时维护和优雅移除细节不在本文范围,部分流程仍为 TBD,且实现与 Oxide 架构强绑定。

推荐收录:该 RFD 给出了 policy/state 分离的硬件生命周期模型,以及 blueprint planner/executor 在 add、graceful remove、expunge 时对分配、信任仲裁、数据重建和电源控制的具体处理,属于可迁移的系统设计证据。适合分布式系统、存储、可靠性与基础设施工程师阅读,尤其可借鉴优雅移除与永久移除的区分、运维触发 expunge 的风险取舍。主要风险是内容高度绑定 Oxide 控制平面,且若干流程仍为 TBD 或超出范围。

工程实践Oxide Public RFDs

RFD 0444: Crucible Upstairs Refactoring

该 RFD 复盘 Oxide Crucible 存储 Upstairs 的重构:重构前多个 async 任务共享一个 tokio Mutex<Downstairs>,单个作业需加锁 11–15 次,io_send 等路径竞争严重,多任务拆分收益有限。作者提出按客户端拆分锁,并用 per-job 原子位标记跨客户端状态;同时给出更激进的“一个大任务”反提案,让同步状态机核心独占数据、异步仅位于边界。基准显示大块随机写提升约 20%–30%,但部分收益来自加解密移出锁范围,早期基准不够严谨。最终因 reconciliation 等路径依赖两个任务同时接触共享数据,无法渐进改造,团队选择并完成了非渐进式重构,消除约 3KLOC。

推荐收录:这是来自生产存储系统的真实架构重构记录,包含锁竞争量化、数据归属表、两种重构方案权衡、失败尝试和最终落地效果。对使用 Rust async、Tokio 或维护高并发存储/分布式系统的工程师尤其有价值,可迁移其从锁拆分到同步状态机核心的设计判断。阅读时应留意基准不严谨及后期归因修正,不能只照搬性能数字。

工程实践Oxide Public RFDs

RFD 0388: Disk Encryption Keys at Rack Shipment

该 RFD 讨论机架发货前如何为承载 U.2 设备的 zpool 启用根数据集加密,因为在完整 trust quorum 可用前仍需保护静态数据。作者把威胁模型分为 L1–L4,按攻击者能窃取并启动的 sled 数量相对 K 来界定能力,核心目标是让被盗磁盘无法恢复数据。最终决定采用 Low Rent Trust Quorum(LRTQ),沿用 RFD 301 的存储密钥派生,把 LRTQ 提供的输入密钥材料经 HKDF 生成密钥。文档比较了不加密、使用不安全 IKM、在 M.2 明文保存随机数、用 M.2 随机数作盐并结合 VPD 等替代方案,说明各自攻击面与妥协。未来可在线升级到完整 trust quorum;但 LRTQ 不能防御引导网络上的在线攻击,L4 仍不在当前长期威胁模型内。

推荐收录。该 RFD 以明确威胁模型(L1–L4)、密钥派生链路和替代方案对比,记录了机架发货前磁盘加密的真实工程取舍与安全边界。适合存储、安全和基础设施工程师理解 trust quorum 未就绪时的临时方案,以及如何规划在线升级;其中对 LRTQ 局限的说明也避免了把临时方案误用为长期安全保证。

工程实践Oxide Public RFDs

RFD 0301: Has anybody seen my keys?: A key-hierarchy strategy for rack-level security

Oxide RFD 0301 提出机架级密钥层级策略,以 Rack Secret 为根,保护控制面数据、Crucible 卷加密密钥和 U.2 盘上的 ZFS 加密数据。它基于 Shamir 秘密共享的 Trust Quorum:K 个 share 可重构 rack secret,再通过 HKDF-SHA3-256 为每块 U.2 盘派生独立 ZFS 加密密钥,并用 new/old epoch 信息绑定用途。重配置时,dealer 用新 epoch rack secret 派生包装密钥加密旧 rack secret,随 prepare 消息分发;提交后节点重构新秘密、解密旧秘密、派生并轮换各盘密钥,再安全删除旧秘密。关键结论是每盘独立密钥限制单盘泄漏,epoch 与两阶段提交处理分布式轮换和 false start,且不依赖硬件全盘加密。边界是主要覆盖 MVP 存储加密与 rack secret 包装,证书等留待后续 RFD,故障细节依赖 RFD 238,且方案绑定 Oxide rack 架构。

推荐收录,因为它给出完整可验证的机架级密钥层级设计:从 Rack Secret、Shamir 分享、HKDF info 字符串到每盘 ZFS 密钥与重配置包装/轮换流程,并明确目标、约束与 determinations。适合基础设施安全、分布式存储和密钥管理读者,可迁移其按数据生命周期与空间局部性设计密钥层级、用 epoch 和两阶段提交处理密钥轮换的方法;局限是绑定 Oxide 硬件与 RFD 238,通用性需自行抽象。

工程实践Oxide Public RFDs

RFD 0238: Trust Quorum and Rack Unlock

本文是 Oxide RFD 238,定义机架级信任仲裁与磁盘解锁:在不需人工输入密码的前提下,防止 U.2 盘被盗或少于阈值 K 的 sled 被窃后读出数据。方案用 GF(256) 上的 Shamir 秘密共享,初始化时把机架秘密拆成 N 份,每个 sled 持有一份;启动时经 sprockets 的 mTLS 和远程证明向成员取回 K-1 份,重建秘密并派生 ZFS 密钥以解锁本地存储。成员须属于信任组,防止被篡改 sled 插机架偷取份额;重配置通过 epoch、Prepare/Commit、Peer Commit 与取消机制增删节点并轮换密钥。文中给出安全/活性不变量、K=N/2+1 取舍及 TLA+ 规范。适用于 Oxide 机架和非拜占庭、部分同步环境,依赖 RoT、PlatformId、sprockets 等基础设施。

推荐收录。该 RFD 完整覆盖了从威胁模型、Shamir 秘密共享、sprockets 远程证明到重配置协议的工程权衡,并明确安全/活性不变量和 K 值选择依据,属于可长期参考的系统安全设计。适合分布式系统、存储加密、可信计算和基础设施工程师阅读,其协议设计、形式化验证与故障处理思路可迁移到类似集群密钥管理场景;需注意其强依赖 Oxide 的 RoT/PlatformId 等专用硬件。

工程实践Oxide Public RFDs

RFD 0241: Holistic Boot

本文是 Oxide 的 RFD 241,提出主机启动策略 Holistic Boot:将几乎全部启动逻辑放入单一 illumos 主机 OS 镜像,不向独立生产内核交接,也不依赖可逆固件状态。设计确定由主机 OS 完成硬件初始化,内核驻留并保持控制;采用 phase-1 SPI NOR 与 phase-2 SSD、双 BSU A/B 绑定升级,由 loader stub 加载内核,host OS 经 SP 获取变量信息并负责 phase-2 度量/策略,SP 负责 stage-0/phase-1 度量与恢复。文章对比 Tiny/Giant/Helios 方案,引用 LinuxBoot 多阶段状态传递事故,分析 LZMA 压缩、MP0、ELF 压缩等空间约束,并讨论可验证启动、安全边界与开放问题。其结论依赖 Gimlet 及类似 sled 硬件、illumos/SP 生态,压缩与 loader 实现仍待原型验证。

推荐收录:它给出真实系统启动架构的完整决策记录,包含硬件约束、存储布局、固件行为和 LinuxBoot 反例,能帮助读者理解从 firmware 到 OS 的状态交接风险。适合做操作系统、固件/启动、服务器基础设施和可验证启动的工程师研读;其中 BSU 绑定、度量边界和单阶段启动取舍可迁移到类似平台设计,但部分方案未落地,需结合开放问题阅读。

工程实践Oxide Public RFDs

RFD 0177: Implementation of Data Storage

RFD 177 描述 Oxide 虚拟存储服务 Crucible 的实现,基于 Northern Mux 设计,将虚拟磁盘按 LBA 划分为多组三副本区域,由 Upstairs/Guest 转发读写,Downstairs 在物理 SSD 上以 extent 文件存储数据。文中详述 Volume 抽象、只读父层与快照/克隆、实时迁移和热插拔,并讨论端到端完整性哈希、AES-GCM-SIV 加密、TLS 传输及崩溃一致性。关键结论包括用 generation/flush/dirty 位驱动三副本 reconciliation 和 extent 修复,通过 WriteUnwritten 后台迁移只读父层,快照与密钥轮换也复用该机制。边界是部分章节因弃用 SQLite 已过时,且 IO 传输、认证、限流等仍有开放问题。

推荐收录:这是一份来自 Oxide 的公开 RFD,具体展示了三副本块存储服务在崩溃一致性、加密完整性、快照/克隆与在线迁移上的架构取舍,而非泛泛介绍。适合分布式存储、云基础设施和虚拟化平台工程师阅读,可迁移到副本选主、修复、只读父层和密钥轮换等设计。注意部分章节已标注因移除 SQLite 而过时,需结合 determinations 和开放问题判断时效性。

工程实践Oxide Public RFDs

RFD 0203: Standard units for counting bits

这份 Oxide RFD 203 提出在产品、代码、API、控制台和文档中统一数据量单位与词头的规范。它先区分 bit 与 byte,以及网络常用的十进制 SI 词头与内存/存储常用的二进制 IEC 词头,指出机架规模下 PB 与 PiB 差异超过 12%,单位误解可能造成数量级错误。核心判定是:网络吞吐以 bit/s 为单位并使用十进制词头;内存和存储以 byte 为单位并使用 KiB、MiB 等二进制词头。若因硬件等原因必须偏离,应使用正确标签或同时给出两种形式,例如 3.2 TB(2.9 TiB)。该规范适合接口设计、文档和运维沟通,主要不足是改变既有习惯需要迁移成本。

推荐收录,因为该 RFD 给出了可直接执行的单位规范,并用表格明确网络吞吐、内存和存储分别应使用 bit/s 与 KiB/MiB 等标签,还覆盖了硬件例外和双单位展示边界。对设计 API、CLI、控制台、监控指标或技术文档的工程师来说,这类约定能减少跨层沟通中的数量级误解,具有跨项目迁移价值;风险是它属于组织内部标准,外部团队需结合实际历史兼容。

工程实践Oxide Public RFDs

RFD 0053: Control plane data storage requirements

该 RFD 界定 Oxide 控制平面持久化数据存储需求:需存储实例、虚拟磁盘、网络资源、服务器、用户/SSH 密钥等对象,支持持久 CRUD、分页一致性枚举和乐观并发控制,并讨论 ACID 是否必需。非功能要求包括强一致、有限故障下可读写、零计划停机、无人值守、可诊断、安全、开源与低成本,且把逻辑复制和在线 schema 迁移列为一等能力。文中估算单机架约万级实例、约 100 GiB 数据,外部 API 延迟需数百毫秒内、数据库访问约 150ms 内,短生命周期负载可达千级 rps;作者据此主张先评估现有系统,并给出从调研、Jepsen 失败分析到部署、故障与长时压测的漏斗式选型方法。候选聚焦 CockroachDB、Yugabyte、TiKV/TiDB、VoltDB 等 NewSQL,排除传统 RDBMS、NoSQL、FoundationDB 与 ZooKeeper/Etcd 类系统;但该文仍是早期需求框架,未给出最终基准和选型结果。

推荐收录。该文不是产品宣传,而是把控制平面数据存储的功能/非功能需求、规模与延迟估算、自研与采购取舍、候选 NewSQL 及排除项、以及分阶段评估方法写得很具体,对设计高可用控制平面、做分布式数据库选型或需要向团队说明存储约束的工程师有直接参考价值。局限是它属于早期 RFD,未给出实测基准和最终选型,读者应把它当作需求清单和评估框架而非结论。

工程实践Oxide Public RFDs

RFD 0060: Storage Architecture Considerations

该 RFD 讨论 Oxide 机架块存储设施的架构选择,目标是为 VM 提供弹性、安全且性能足够的虚拟块设备,并支持快照、镜像和备份等能力。作者将存储系统抽象为靠近 VM 的 North 与靠近 SSD 的 South,逐项界定数据冗余、修复重建、完整性校验、快照、限流、压缩、加密、分配与设备管理等职责。随后评估 Ceph、Lustre、GlusterFS、OpenZFS、DRBD、分布式 KV 等候选软件,并提出 Southern Volume Manager、Northern Mux、ZFS on ZFS、ZFS with Remote Allocation 四种候选架构。通过 AWS 模拟,Southern Volume Manager 性能约为本地 SSD 的 10%,且失败韧性不足;Northern Mux 则用模拟器验证失败与成功路径算法,早期结果较有希望。最终结论倾向 Northern Mux,并计划继续开发模拟器、AWS 测试台与压测工作负载;v1 优先交付时间、数据完整性和安全,性能与经济性并非首要目标。

推荐收录,因为这是一份真实基础设施架构决策记录:它明确比较四种块存储架构在冗余、修复、校验、快照、加密和分配等职责上的取舍,并用 AWS 模拟与失败场景测试淘汰 Southern Volume Manager。对从事块存储、分布式系统、虚拟化基础设施或可靠性设计的读者,North/South 分层、冗余数据路径、性能压测指标及 ZFS/Ceph 评估方法都有可迁移价值;但结论面向 Oxide 特定机架环境,需结合自身约束判断。

工程实践Oxide Public RFDs

RFD 0024: Multi-Rack Oxide Deployments

这份 Oxide RFD 讨论多机架部署的故障域与资源作用域。作者沿用云行业概念,提出从 server、rack、cell、AZ、region 到 fleet 的层级,并定义每层默认故障爆炸半径与共享资源边界。随后给出实例、存储、网络、镜像、项目和认证等资源的建议作用域及汇总表,例如实例归 AZ、存储卷归 Cell、虚拟网络和项目归 Region、认证归 Fleet。文中还讨论客户需自行构建真实独立故障域、跨 AZ/跨 Region 链路信任与加密、管理平面单一视图等开放问题。当前多为设计假设,尚未实现验证,且默认 v1 可能仅面向单机架,细节仍会随其他 RFD 演进。

推荐收录。该 RFD 直接给出从服务器到 fleet 的故障域层级和资源 coherence 汇总表,并系统权衡了多机架下的可用性、网络、存储与 API 作用域,属于可迁移的架构设计材料。适合云基础设施、分布式系统和控制平面设计者阅读,用于设计多 AZ/多 Region 的部署边界;但需注意其尚未落地验证,部分结论仍标注为开放问题。

工程实践Xe Iaso

You can run git on object storage if you re-make packfiles

文章复盘 objgit 项目如何把 Git 服务端架在对象存储上。作者先用文件系统垫片模拟 Git 对象,但真实仓库因 packfile 依赖本地文件与 mmap、网络往返延迟被放大而严重变慢;于是他设计对象存储原生的 .bin/.cue 列式 packfile,将对象顺序写入大文件,并在固定宽度记录中保存哈希、类型、压缩算法、bin 偏移、压缩/未压缩长度和 delta 基对象,从而支持精确 HTTP Range 读取,同时用 zstd 提升压缩效率。基准测试覆盖 objgit、Xe/x 和 tigris-blog,push 与 clone 的 S3 请求数和墙上时间均大幅下降。当前实现仍缺少认证、授权、API 与限流,packfile 也不会自动合并,大二进制文件与生产可用性尚未解决。

推荐收录:文章没有停在“把 Git 放到对象存储”的概念层面,而是给出了旧文件系统垫片失败的原因、自研 .bin/.cue packfile 的字段设计、Range 请求策略和可复现基准数据,直接证明请求数从数千降到几十、push 时间提升数倍。适合做云存储、版本控制后端、分布式存储或性能优化的工程师研读;其中“按访问模式重设计格式”和用列式元数据分离数据块的思路可迁移到其他对象存储系统。需注意项目尚未实现鉴权和压缩,不能直接用于生产。

工程实践QuestDB Engineering

Read DuckLake and QuestDB: the same Parquet, a different table format

文章对比两种开放表格式在元数据存放位置上的根本差异:Iceberg 把元数据写成对象存储中的 metadata JSON、manifest list 和 Avro manifest 文件,目录只保存指向当前元数据文件的指针;DuckLake 则把全部元数据(文件列表、schema 历史、快照、统计信息)存放在 SQLite、Postgres 或 DuckDB 这类 SQL 数据库中,目录即元数据本身。作者由此推导出三点后果:查询规划退化为对索引表的 SQL 查询、不存在元数据小文件堆积因而无需 compaction、但读取方必须能连接该数据库导致生态覆盖较窄。文章随后给出把 QuestDB 冷存储的 Hive 分区 Parquet 通过 ducklake_add_data_files 零拷贝注册进 DuckLake 的具体脚本,并讨论增量同步、删除单文件时需重新注册存活集合、关闭 auto_compact 保护原始文件,以及纳秒时间戳在 DuckDB 视图中降为微秒的边界。

推荐收录。文章不是产品宣传,而是把“表格式即 Parquet 之上的元数据层”这一抽象讲清楚,并用 Iceberg 与 DuckLake 元数据存放位置的差异推导出查询规划、运维成本和生态覆盖上的具体取舍。附带的注册与同步脚本、零拷贝约束和版本相关注意事项,对做数据湖、冷存储分层或 lakehouse 选型的工程师有直接可迁移价值;需注意示例仓库明确非生产工具,且结论带有 QuestDB 自身存储的视角。

技术文章TiDB 社区博客 - 技术解读

为什么 TiKV 要把事务数据拆成三个"抽屉"?

文章从 TiDB 培训中的 Column Family 概念困惑出发,梳理了 Column Family 在 Bigtable、HBase 和 TiKV/RocksDB 中的角色演变。作者指出 Bigtable 引入 CF 是为了逻辑分组、资源管理和数据局部性;HBase 将其作为用户可见的数据建模单元;而 TiKV 则借助 RocksDB 的 CF 机制承载 Percolator 事务模型中的 data、lock、write 三类逻辑数据。文章结合源码解释了一个 RocksDB CF 基本等同于一棵独立 LSM Tree,拥有自己的 MemTable、SST 和 Compaction 状态,因此 TiKV 拆三个 CF 是为了让生命周期和访问模式不同的数据互不干扰,降低写入放大、避免大 Value 挤占缓存。文章还澄清拆分发生在事务存储层而非用户表层,并说明隔离仅限于 LSM Tree 层,各 CF 仍共享 WAL 和线程池。整体属于对 TiKV 事务存储设计原理的深入解读,但主要基于公开论文、源码和个人理解,未涉及运行时实测对比。

推荐收录。文章不是产品介绍,而是从 Bigtable/Percolator 论文到 RocksDB 源码的完整技术考证,把 TiKV 三个 Column Family 的隔离动机解释得很清楚。适合数据库内核、分布式系统和存储引擎方向的工程师与研究者阅读,也可以作为理解 LSM Tree 与事务存储结合的参考材料。其可迁移价值在于展示了从逻辑数据分类到物理存储隔离的工程取舍思路,但结论来自代码阅读与公开资料,缺少实测数据,阅读时需注意这一点。

技术文章QuestDB Engineering

Read Parquet and Iceberg: how a table format builds on a file format

文章系统解释 Parquet 文件格式与 Iceberg 表格式的分层关系。先讲 Parquet 的列式布局、统计信息与谓词下推优势,再指出以目录管理多个 Parquet 会在原子提交、并发写、快照、schema 演进和小文件上出问题,而 Iceberg 正是为了解决这些问题。Iceberg 不替代 Parquet,而是在文件之上增加元数据层,通过快照实现原子提交、时间旅行与多引擎互操作,且可直接注册已有 Parquet 而无需重写。文章以 QuestDB 冷存储为例,展示将历史分区转为 Parquet 放入对象存储、再用 PyIceberg 的 add_files 注册为 Iceberg 表的流程,并说明分区同步、纳秒时间戳和 UUID 兼容等运维边界。作者明确演示脚本是 demo,生产需自建带认证目录。

本文清晰区分了文件格式与表格式的职责边界,并用 QuestDB 冷存储配合 Iceberg 注册的完整示例证明 Parquet 可以无需重写即被 Iceberg 采用,概念解释与工程实践并重,属于长期可参考的数据工程内容。适合数据平台工程师、数据架构师及希望理解 Lakehouse 底层原理的读者。文中也提醒了分区同步和类型映射等落地风险,但厂商背景和 demo 代码需结合生产环境谨慎对待。

技术文章Kubernetes Blog

Kubernetes v1.37: etcd RangeStream Cuts Memory Use on Large List Reads

Kubernetes v1.37 将 etcd RangeStream 特性推进到 beta 阶段,配合 etcd v3.7 用于降低 API server 与 etcd 在处理大规模资源列表读取时的内存占用,并让峰值内存更可控。文章指出 API server 通常用内存 watch cache 服务 list/watch 请求,但填充该缓存需从 etcd 读取整个资源的完整状态;此前虽按 key 数分页,但无法感知对象大小,可能导致单页过大、内存不可预测并触发 OOM。etcd v3.7 新增 RangeStream RPC 后,服务端将结果集拆分成按字节自适应调度的块并流式发送,API server 逐块解码并释放内存,避免任何一侧持有全量集合。特性通过 EtcdRangeStream 特性门控默认开启,API server 在启动时检测 etcd 版本并支持运行时回退到旧的 Range 路径,文章同时提供了 listStream 指标用于确认是否生效,以及关闭和查询条件等运维细节。

推荐收录的核心理据在于它把一次 API server 内存问题的成因、协议改动和回退保障讲清楚了:从分页粒度与对象大小失配这一根因,到 RangeStream 的字节自适应分块,再到可观测指标与兼容性设计。对于维护大规模 Kubernetes 集群、需要理解 APIServer/etcd 读取路径的读者,这篇官方说明可以作为功能背景与排查入口;若需要更深层的数据,可再追看 KEP-5966。

工程实践Cloudflare Blog

How we could save petabytes of cache storage with Zstandard and Pingora

本文介绍了Cloudflare在缓存系统中引入Cache Transcoding的原型实验,核心思路是在Pingora代理中,对符合条件的可压缩文本响应在写入磁盘前用Zstandard(zstd)进行压缩,在缓存期间和跨数据中心传输时保持压缩状态,仅在向客户端返回时解压。通过这一设计,用少量CPU开销换取PB级缓存容量和跨数据中心带宽的显著节省。作者详细说明了zstd算法的选型理由、压缩级别与阈值(zstd level 3、4 KiB以上)的设定依据,以及仅压缩未预压缩的文本类型(HTML、JSON、CSS、JS等)的判定条件。实验基于超过一百万请求的测试,验证了正确性和性能,测得符合条件的资产平均压缩至原来的约三分之一。文章同时指出了边界,例如测试语料压缩比不代表全量网络内容,需更广泛语料验证,以及未来可探索更高压缩级别和直接透传压缩对象等方向。

推荐收录。文章展示了真实CDN环境中,以CPU换存储和带宽的系统级权衡分析,包含清晰的架构设计、协议细节、测试方法和参数调优思路。对从事缓存系统、代理网关、存储优化的读者尤其有参考价值,其压缩对象筛选和收益-成本建模方法可迁移到其他大规模分布式系统。

工程实践Xe Iaso

Conflict resolution is “fun”

文章介绍了 Tigris 对象存储在跨区域复制中遇到的冲突解决难题及其工程实现。作者将其类比为 Git 合并冲突,但分布式系统规模下无法由人工仲裁,因此需要在业务逻辑中自动决定哪一侧获胜。文中基于 FoundationDB 的实践,区分了单区域、多区域与全局三种桶:单区域桶通过反向代理到所有权区域避免冲突,但带来更高延迟;全局桶允许各区域并发写入,依赖时间戳比较决定最新版本;多区域桶则由领导区域主动推送并叠加复制队列,兼顾延迟与全局收敛。作者重点剖析了时钟偏差如何导致“删除被复活”的竞态,并给出了拒绝处理非最新删除并重试的修复方案。最后讨论了复制队列延迟、未来通过分片 FoundationDB 来隔离租户,并指出系统整体依赖时钟同步,可能需引入原子钟级计时。

推荐收录。文章来自真实存储系统的工程实践,详细展示了跨区域冲突解决的完整决策链:从冲突模型、时间戳排序、时钟偏差竞态到具体修复与复制策略取舍,并配有可操作的比较逻辑和时序说明,而非泛泛架构讨论。适合分布式系统、存储或数据库方向的工程师阅读,文中的时间戳排序陷阱以及“失败但已生效”的复制语义可迁移到其他多写复制系统,具有长期参考价值。

技术文章Kubernetes Blog

Kubernetes v1.37: Storage Version Migration Enabled by Default

文章宣布 Kubernetes v1.37 中存储版本迁移(SVM)功能达到 GA 并默认启用。它解释了当 API 对象存储版本变更时,旧的资源仍以旧版本序列化,导致无法安全删除旧 API 版本或完成静态加密密钥轮换。传统手动 kubectl 替换或外部组件繁琐易错。SVM 提供声明式 StorageVersionMigration 对象,内置控制器自动迁移资源到当前存储版本。文章给出了 CRD 迁移示例、迁移状态监控方法,以及在 CRD 升级时同时提交迁移的实践。还提醒成功迁移后应确认 CRD 的 status.storedVersions 已更新,若迁移过程中 CRD 被修改则需重试。该指南面向集群管理员和 CRD 作者,属于官方文档性质,操作性强。

官方博客对 Kubernetes 存储版本迁移的完整解析,包含问题背景、工作原理和操作示例,不是简单的版本发布新闻。适合 Kubernetes 集群管理员、CRD 开发者和平台工程团队。文中对迁移后状态校验和重试条件的说明,能够指导实际安全升级流程,具有长期参考价值。

技术文章Ken Shirriff

Cores in space: The core memory module from a 1980 Spacelab computer

本文详细分析了1980年Spacelab航天飞机实验室所用Mitra 125 MS计算机的磁芯内存模块。文章先阐述磁芯存储基本原理,包括磁滞、重合电流寻址、感应/禁止线、二极管矩阵等,并回顾其发展历史。随后重点拆解该机的四层磁芯板,说明其采用2½D架构,通过每位独立X驱动省去禁止线,实现128 KB容量。作者以大量微距照片追踪各类信号线的实际布线,并分析防噪的交叉设计。最后指出磁芯因非易失和抗辐射而在航天领域沿用至1980年代,终被半导体存储取代。文章兼具原理讲解、系统逆向分析与历史脉络,极具参考价值。

文章来自资深逆向工程专家Ken Shirriff,基于对实物模块的详细拆解,提供了大量原始照片和具体布线的技术分析,证据充分。适合计算机体系结构、存储技术、航天计算及硬件逆向工程爱好者和研究者阅读。其可迁移价值在于理解磁芯存储的工程取舍和2½D架构的设计思路,同时为现代存储系统提供历史参照。

工程实践The Consensus - Articles

Another look at SQLite's WAL-Reset bug

文章深入复现并分析 SQLite 长期存在的 WAL-Reset 并发缺陷:checkpoint 过程中因读到了陈旧的共享内存状态,可能把已提交的 WAL 帧误判为已回填并丢弃。作者用约 100 行 C 代码构造两个线程、三个数据库连接的工作负载,借助大 mmap 拉长 checkpoint 的竞态窗口,仅通过公开 API 就在数秒内触发永久丢写,偶尔还会造成数据库文件损坏。文章逐行对照 wal.c 中的交织时序,并用 Thread Sanitizer 定位到 nBackfill 的原子写与陈旧读之间的冲突;在 3.53.0 修复版上不再复现,但在 SQLITE_DEBUG 构建下仍会触发一处断言失败。该复现依赖特定时序与较大数据库,缺陷本身仍较罕见,但说明应用主动执行 checkpoint 时需要关注丢写风险并及时升级版本。

推荐收录。文章给出可直接编译运行的约 100 行 C 复现代码,并逐行对应 wal.c 时序,稳定复现丢写与损坏,证据扎实且可验证。对使用 SQLite WAL、负责数据库可靠性或排查并发缺陷的工程师有直接参考价值,其竞态窗口构造、sanitizer 定位和版本对照验证的方法也可迁移到其他存储系统。

技术文章TiDB 社区博客 - 技术解读

TiKV中MVCC的具体实现解读

文章深入解读 TiKV 的 MVCC 实现,通过三个 Column Family(CF_LOCK/CF_WRITE/CF_DEFAULT)将锁、提交记录和历史版本编码进 key。它详细分析 Write、Lock 记录结构与 MvccTxn 的写缓冲机制,说明 Prewrite 的冲突检查、Commit 的原子提交点以及 Rollback 的显式回滚标记。读路径部分展示快照读如何按 commit_ts 扫描 Write Record 并定位数据版本。文章还总结锁与数据同地存储、Write Record 作为提交点、操作可重试、MVCC 与 Raft 解耦等设计动机,但以源码解析为主,未覆盖所有异常分支。

文章以源码和代码引用为证据,系统梳理了 TiKV 分布式事务中 MVCC 的完整机制,从数据布局、两阶段提交到读路径均有清晰解释,适合研究分布式数据库或事务实现的读者。文中对设计取舍的分析和可重试、分层解耦等思想可直接迁移到其他存储系统设计中。主要局限是偏重源码解读,版本迭代可能带来差异,但不影响长期参考价值。

工程实践ClickHouse Engineering

POSETTE Talk Recap - Postgres Isn't Slow. Your Storage Is

文章复盘 POSETTE 2026 演讲,围绕 PostgreSQL 规模化后的五类症状(写入变慢、P95 读延迟不稳、autovacuum 落后、checkpoint 争抢 I/O、逻辑复制积压),论证根因常被误判,实际多来自存储。作者用 8 个相同 m6id.4xlarge 集群、3.3 亿行 pgbench 随机 UPDATE 负载,对比本地 NVMe 与 3000 IOPS 的 baseline gp3 EBS,结果 NVMe 中位 16,030 TPS 对 EBS 1,734 TPS(约 9.24×),事务中位延迟从 36.9ms 降到 4.0ms。延迟拆解显示差距主要来自页读取、WAL fsync 与锁/调度等待,CPU 本身耗时接近;等待事件与 CPU profile 也印证 EBS 更多进程处于离 CPU 等待。作者随后给出本地 NVMe 生产架构:quorum 双 standby 同步复制、WAL-G 持续备份至独立对象存储,并明确结论仅适用于该负载与存储配置。

推荐收录:文章给出了可复现的对照实验设置、量化指标(TPS、延迟拆解、等待事件、CPU profile)以及面向生产的架构取舍,而非单纯观点宣导或产品广告。适合运行大规模 PostgreSQL、关注存储选型与高可用设计的数据库/SRE 读者,其“数据库与存储一起诊断”的思路及 NVMe+quorum 复制+对象存储备份的组合可迁移到类似系统;但需注意基准使用 3000 IOPS 基线 gp3,不同 EBS 配置结论会变化。

技术文章Alex Chan

Why can’t you combine <code>.tar.gz</code> files with <code>cat</code>?

作者在项目中需要合并多个 .tar.gz 文件,起初尝试用 cat 直接拼接字节却失败,于是深入剖析 tar 和 gzip 的格式原理。文章指出 tar 源于磁带存储,采用顺序读取、追加写入和固定块大小,文件尾部有全零 EOF 标记,读者遇到它就会停止,因此直接拼接 tar 会导致第二个归档被忽略。gzip 是受专利法影响而设计的流式压缩器,由多个成员首尾相连组成,没有 EOF 标记,所以可以安全地用 cat 拼接。但当 gzip 与 tar 结合时,解压流中 tar 的 EOF 标记依然会让 tar 提前停止。最终作者用 Python tarfile 模块解包每个归档再重新写入,生成带单一 EOF 标记的新归档,并给出了 r:gz / w:gz 的完整代码。文章还讨论了文件大小需预先声明、重复文件名覆盖行为、EOF 后内容被忽略等边界,适合需要深入理解文件格式或处理归档合并的读者。

推荐收录。文章从一个常见却易被误解的实际问题切入,清晰揭示了 tar 与 gzip 在数据组织方式上的本质差异,帮助读者建立长期可用的格式心智模型。对从事数据管道、文件工具开发或需要处理归档格式的工程师,文中的原理解释和 Python 解决方案都可直接迁移。

工程实践TiDB 社区博客 - 实践案例

Agent 基建不是设计出来的,是被 Kimi K3 和一堆应用公司卷出来的

文章基于TiDB团队近两年服务AI Agent应用(如Kimi、Dify)的实践,总结了Agent时代基础设施的演化路径与核心设计原则。作者唐刘指出,Agent产品规模化首先要解决“计算资源空闲成本”和“执行环境消失后任务恢复”两大难题,分别通过虚拟数据库(scale-to-zero、秒级就绪)和持久文件系统(Sandbox与Workspace分离)来应对。随着Agent任务变长,跨session记忆、文件与Git工作区持久化、可审计的权限与数据可信性成为新的需求,推动TiDB形成覆盖数据、记忆、文件和Lake分析层的Agent Stack。文章还提出了三个可迁移判断:先算空闲成本,从第一天拆分执行与状态,减少Agent跨系统边界。整体以真实客户案例为支撑,但内容带有TiDB产品推广成分,且结论主要基于个别头部客户实践,适用范围需读者结合实际验证。

本文以Kimi、Dify等真实Agent产品的业务需求为线索,详细拆解了Agent基础设施从数据库自动创建到记忆、文件系统、可靠分析层的演化过程,给出了具体的成本模型和架构取舍(如scale-to-zero、执行与状态分离)。适合正在构建Agent产品或关心AI基础设施底座的技术决策者阅读,其中的“先算空闲成本”“让Agent少跨系统边界”等判断可直接迁移到类似场景。不过文章源自TiDB商业推广,需注意案例的代表性与产品倾向。

工程实践Dropbox Tech

Improving infrastructure efficiency for growing demand in the age of AI

这篇文章介绍了Dropbox在面对AI带来的基础设施需求增长时,如何通过系统级方法提升现有基础设施效率。文章涵盖容量规划、主动车队优化、深度睡眠(Deep Sleep)降低空闲功耗、跨车队负载均衡、通过叠瓦式磁记录等技术提高存储密度、硬件生命周期延长,以及重新设计机架电源架构以支持第七代服务器。关键数据包括自2020年以来存储基础设施的瓦特/拍字节改善超过50%。文章强调效率是持续的工程问题,需要在电力、冷却、空间和硬件可用性等约束下进行跨层权衡。边界在于这是公司实践分享,部分方案依赖Dropbox的混合数据中心模式和特定硬件环境。

推荐收录。文章来自Dropbox官方工程博客,提供了真实的基础设施效率实践细节,包括Deep Sleep机制、瓦特/拍字节指标、硬件生命周期决策和机架电源再设计的完整案例,而非泛泛而谈。适合数据中心规划、容量管理、存储系统和基础设施成本优化相关工程师阅读,其中的系统级权衡思路和验证方法具有很强的可迁移性。需要注意的是,文章带有公司宣传色彩,但技术数据和案例足以支撑长期参考。

技术文章DuckDB Engineering Blog

A Preview of DuckDB v2.0

DuckDB v2.0预览文章由核心开发者撰写,概述了即将发布的重大版本的主要特性。文章首先介绍了DuckDB作为服务器的新模式,通过Quack协议和CONNECT语句实现客户端/服务器架构,支持远程查询生产数据库。随后重点讲解了VARIANT类型的深化应用,使其能高效处理半结构化数据,并配合一系列variant_*函数。文章还介绍了触发器、丰富SQL方言(如NEAREST连接、CTE内DML、嵌套schema等)、全引擎异步I/O、大量查询性能优化(如重写递归CTE、聚合下推、分区感知规划)、新存储格式、全新PEG解析器,以及用自研实现替代ICU库带来的体积和性能优势。最后强调了稳定C API和自定义扩展仓库,使扩展编写和分发更加便捷。文章以预览形式呈现,强调细节可能在正式发布前调整,并提到部分破坏性变更。

本文是DuckDB官方工程博客的权威技术预览,内容详实,包含具体代码示例、性能基准和设计动机,展示了嵌入式数据库向客户端/服务器模式演进的关键架构决策。适合数据库内核工程师、数据分析平台开发者和对查询引擎优化感兴趣的读者。文中关于异步I/O、存储格式演进和扩展稳定ABI的设计思想具有可迁移性,但需注意各功能为预览状态,正式发布可能调整。

技术文章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存储栈中以降低成本并提升吞吐。尽管局限于特定厂商产品,其评估思路和卸载设计可作为类似系统设计的参考。

工程实践Spotify Engineering

Indexing the Data Lake for Online Point Queries

文章介绍 Spotify 提出的 Random Access Parquet(RAP)方案,让数据湖中的 Parquet 文件直接支持在线点查询,服务个性化功能与 AI Agent 的上下文检索。作者指出瓶颈不在存储层,而在 Trino、BigQuery 等分布式 SQL 引擎的调度与查询规划开销,以及文件内查找所需的链式依赖读取。RAP 通过外部索引把 key 直接映射到文件与行号,再发起精确的 ranged read,索引实现为可追加的 multimap。文章进一步给出面向预写文件的优化(按 key 排序、co-grouping、粗粒度分区、每 key 一页、ZSTD frame reset、存储对齐、blob/Variant、列交织、覆盖索引)及其对分析负载的取舍。结论是同一份 Parquet 文件可同时服务分析与交互式访问,避免重复存储,但部分优化会牺牲列裁剪等分析能力。

推荐收录:文章来自 Spotify 一线实践,清晰定义了数据湖点查询这一真实工程问题,并给出索引结构、文件布局优化与逐项取舍,证据具体。适合数据平台、存储与后端工程师,尤其在构建低延迟检索或为 AI Agent 供给上下文时,其“一份数据双访问模式”思路与 Parquet 改造技巧可直接迁移。

技术文章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 负载还需进一步验证。

技术文章Andy Pavlo Database Blog

The Part of PostgreSQL We Hate the Most

文章由 Andy Pavlo 与 Bohan Zhang 合作,系统批评 PostgreSQL 的 MVCC 实现。核心指出 PostgreSQL 采用 append-only 版本存储、O2N 版本链和每版本索引项,导致版本复制、表膨胀、二级索引写放大和 autovacuum 管理困难四大问题。作者对比 MySQL、Oracle 使用 delta 存储与逻辑指针的做法,说明 PostgreSQL 设计是 1980 年代遗留方案,不推荐新 DBMS 效仿。文中引用 CMU 研究与 OtterTune 客户监控数据,包括 Uber 从 Postgres 迁移 MySQL 的案例,但结论更偏向写密集负载,并非完整中立的 benchmark。

推荐收录:文章以存储布局、版本链、索引维护和 autovacuum 行为等具体机制,直接说明 PostgreSQL append-only MVCC 的性能代价,并给出与 MySQL/Oracle 的对照证据。适合数据库内核、DBA、后端架构师和云数据库选型者阅读,可迁移到 MVCC 设计、写放大评估、索引优化和 vacuum 调优场景;需注意其结论偏向写密集工作负载。

工程实践Datadog Engineering

Introducing Husky, Datadog’s third-generation event store

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

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