土法炼钢兴趣小组的算法知识备份

【RocksDB 内核机制】LevelDB · WAL · Compaction · Column Family · 生产嵌入

文章导航

分类入口
databasestorage
标签入口
#rocksdb#leveldb#lsm-tree#compaction#wal#memtable#sstable#column-family#write-stall#flink#tikv#storage-engine

目录

RocksDB 内核机制:LevelDB · WAL · Compaction · Column Family · 生产嵌入

读者读完 PostgreSQL 行存 OLTP列存引擎数据平台 query-engine 系列 之后,写优化 LSM 仍多停在 lsm-tree DIY 五篇storage 工程调参。而 TiKV、Flink RocksDB state、Kafka Streams 本地状态实际跑的是 RocksDB——stream-processing 第 12 篇 从 Flink 视角讲了 KeyGroup 与增量 checkpoint,但没有把 DBImpl::WriteCompactionJob、write stall 状态机按源码路径讲透。

本系列不写 SQL,也不重复 storage/32 的 200+ 参数 cookbook,写:

系列状态:已完成(2026-07-07)。全 18 篇正文均已发布,可点进阅读。

版本锚定:RocksDB 9.x(源码路径与 Wiki);LevelDB 1.23(对照);Flink 1.20+(第 16 篇引用边界)。本机 WSL2 实验见 reproduce/;未部署 Flink 集群的篇目不伪造 checkpoint 耗时。

适合谁看

存储引擎三角阅读顺序

阶段 系列 核心问题
1 PostgreSQL 内核 B-Tree + MVCC 行存
2 列存引擎 读优化列存 scan
3 本系列 写优化 LSM 生产实现
4 lsm-tree DIY 可选:亲手实现对照
5 数据平台栈 湖仓 + 流 + 查询(已闭合)

推荐阅读路径

路径 篇目 适合
存储三角闭合 1 → 4 → 7 → 10 → 13 → 18 从 PG/列存补 LSM
从 lsm-tree DIY 来 2 → 3 → 6 → 10 → 17 toy vs 生产
从 stream/Flink 来 1 → 5 → 9 → 11 → 16 → 17 state 慢根因
Compaction 调优 10 → 11 → 12 → 17 DBA / 平台
完整通读 1 → … → 18 系统掌握

一、六个关键问题

  1. LevelDB 的瓶颈在哪,RocksDB 改了什么? → 第 1、2、3 篇
  2. Get / Iterator 如何从 MemTable 追到 Ln SST? → 第 4–9 篇
  3. Leveled / Universal compaction 如何驱动 write stall 与三种放大? → 第 10、11、12 篇
  4. Column Family 与 WAL 如何共享又隔离 LSM 树? → 第 13 篇
  5. Flink state / TiKV 等嵌入场景如何映射到 CF 与 key 编码? → 第 16 篇(对读 stream/12
  6. 写 stall、空间膨胀、读放大如何从 LSM 层诊断? → 第 17、18 篇

二、篇目依赖

flowchart TD
  A["01 LSM 生态全景"] --> B["02 LevelDB 基线"]
  B --> C["03 RocksDB 架构演进"]
  C --> D["04 WAL WriteBatch"]
  D --> E["05 MemTable Flush"]
  E --> F["06 SST MANIFEST"]
  F --> G["07 Get Snapshot"]
  G --> H["08 Iterator Merge"]
  H --> I["09 Cache Bloom Index"]
  I --> J["10 Leveled Compaction"]
  J --> K["11 Universal FIFO Stall"]
  K --> L["12 Concurrent RateLimit"]
  L --> M["13 ColumnFamily"]
  M --> N["14 事务 OCC"]
  N --> O["15 Checkpoint Backup Ingest"]
  O --> P["16 嵌入场景对照"]
  P --> Q["17 故障排查"]
  Q --> R["18 选型阅读地图"]

跨系列:lsm-tree → 01/05/06/08;stream/12–13 → 16;storage/31–32 → 10–12/17(调参边界)。

三、目录与每篇价值点

第一部分:基线与架构

  1. LSM 生态全景:存储引擎三角与 RocksDB 生态位
    • TiKV/Flink/Kafka Streams/CH Embedded;与 lsm-tree、storage/32、stream/12 分工;18 篇地图。
  2. LevelDB 基线:单线程 Leveled 与 DBImpl 骨架
    • 无 CF、单 compaction 线程;Write/Get 最小路径;SST/MANIFEST 语义铺垫。
  3. RocksDB 架构演进:相对 LevelDB 的 diff 地图
    • 多线程 flush/compaction、CF、RateLimiter;bLSM 学术锚点与 LevelDB 单线程对照。

第二部分:写路径

  1. WAL 与 WriteBatch:持久化与原子批写
    • WAL record、sync、Group Commit;WriteBatchDBImpl::Write 中的提交顺序。
  2. MemTable 与 Flush:SkipList 到 L0 SST
    • Immutable 队列、FlushJob、与 lsm-tree WAL/MemTable 篇对照。
  3. SST 格式与 MANIFEST:BlockBasedTable 与 VersionSet
    • Data/Index/Filter Block、Footer;VersionEdit 如何描述 LSM 快照。

第三部分:读路径

  1. Get 与 Snapshot:SuperVersion 与 sequence number
    • 自 MemTable 到 Ln 的层级查找;Snapshot 与 MVCC 序列号边界。
  2. Iterator 与 MergeIterator:范围扫描与 tombstone
    • 多路归并;与 lsm-tree compaction 归并迭代器对读。
  3. Block Cache 与 Bloom:读放大裁剪
    • Full/Ribbon Filter、Partitioned Index;Bloom 谱系与 learned index 争论边界;引用 storage/68。

第四部分:Compaction

  1. Leveled Compaction:层级不变式与 CompactionPicker
    • L0 重叠、size ratio;与 storage/31 三种放大衔接。
  2. Universal、FIFO 与 Write Stall
    • StopWritesTrigger、delayed write;stall 状态机与 LOG 判读。
  3. 并发 Compaction 与 Rate Limiter
    • CompactionJob 线程池;bLSM + exp12 三轮中位数;kWritesOnly 与前台写争抢。

第五部分:高级特性

  1. Column Family:共享 WAL 与独立 LSM
    • ColumnFamilyHandle、per-CF 选项、Flink 多 state 变量映射。
  2. 事务与 OptimisticTransactionDB
    • WritePrepared/OCC 边界;TiKV 前置(B 级前瞻标注)。
  3. Checkpoint、Backup 与 External Ingest
    • 硬链接快照;SstFileWriter / IngestExternalFile

第六部分:生产与收束

  1. 生产嵌入对照:Flink · TiKV · Kafka Streams
    • KeyGroup 前缀、增量 checkpoint SST;stream/12 内核侧补全。
  2. 经典故障与排查
    • L0 堆积、compaction 落后、cache 失效、ENOSPC stall;stall=背压;exp11 本机片段与第 11 篇对齐。
  3. 选型与存储栈阅读地图
    • RocksDB vs InnoDB vs 列存;数据平台 + HTAP 续作入口。

四、与相邻系列的分工

话题 本系列 相邻系列
LSM 三种放大推导 引用 lsm-tree/01storage/31
200+ 参数调优模板 不展开 storage/32
Flink KeyGroup 目录 第 16 篇内核侧 stream/12
MPP 查询 spill 不展开 query-engine/16
HTAP / TiKV Raft 第 18 篇续作入口 db-frontier/12

参考


返回 数据库索引 · lsm-tree DIY · 流式处理系列

同主题继续阅读

把当前热点继续串成多页阅读,而不是停在单篇消费。

2026-07-07 · database / storage

【RocksDB 内核机制】Column Family:共享 WAL 与独立 LSM

从 RocksDB 3.0 引入的 Column Family 出发,拆解共享 WAL、独立 MemTable/SST/Version 链、`ColumnFamilyHandle` 生命周期与 DBOptions/ColumnFamilyOptions 分层;并对照 Flink 多 state 变量到 CF 的映射边界。

2026-03-15 · database

从零写一个 LSM-Tree 存储引擎

五篇长文,从 LSM-Tree 的设计哲学讲到完整 KV 引擎实现,最后用 Rust 重写并三方 benchmark 对比。每篇含完整 C 代码、架构图、数学推导。


By .