TiKV / HTAP 内核:Region · Multi-Raft · PD · Percolator · TiFlash
RocksDB 内核 把单 Region 内的 LSM 讲清了;Raft 旗舰解读 与 raft-deep 把协议不变量讲清了;HTAP 新范式 把行列双引擎与新鲜度档位讲清了。中间仍缺一层:一次 Put 如何经 Multi-Raft 的 raftstore Apply 落到 RocksDB,Percolator 如何落在 lock/write CF,TiFlash Learner 如何定义分析读可见时延。
本系列以 TiKV 7.x/8.x 为内核主线,写:
- Region / peer / epoch、Multi-Raft 与 etcd 单 Raft 对照。
- Key 编码与三 CF(default / lock / write);raftstore 写路径与 snapshot / log GC。
- PD 调度、split/merge/热点、TSO。
- Percolator 乐观 / 悲观事务与 ResolveLock。
- Coprocessor 下推与 TiDB SQL 边界(不写优化器全书)。
- TiFlash Learner、新鲜度;CockroachDB 对照;排障与选型决策树。
系列状态:已完成(2026-07-16)。 全 18 篇已发布。规划见 PLAN.md。
版本锚定:TiKV / PD / TiFlash 7.x 或 8.x(文内钉具体文档版本);CockroachDB 在对照篇标注当时文档版本。本机实验以 TiUP playground / 单机为主,见 PLAN 实验台账;不伪造千节点集群吞吐。
适合谁看
- 聪明的学生 / 研究生:能跟系统图与事务时序,要建立「一条 Put / 事务怎么走」的生产直觉。
- 分布式存储 / TiDB 平台工程师:要从延迟、热点、锁冲突反推到 Region / apply / TSO。
- 从 rocksdb 系列上来的读者:已懂单机 LSM,要接到 Multi-Raft 与分布式事务。
- 从 Raft / frontier HTAP 下来的读者:已有协议或范式直觉,缺工程链路。
- 先修:RocksDB 内核 第 1、14、16 篇或 Raft 解读;HTAP 新范式 在读第 14–15 篇前可选。
在知识栈中的位置
| 层 | 系列 | 本系列关系 |
|---|---|---|
| 单机 LSM | rocksdb | 第 1–2、5、16、18 篇外链 |
| Raft 协议 | raft-explained / raft-deep | 第 4–6 篇对读,不复述教科书 |
| Percolator 模型 | distributed/30 | 第 10–11 篇落地 |
| 再平衡叙事 | distributed/27 | 第 7–8 篇机制加深 |
| KV 选型对照 | distributed/39 | 第 1、16、18 篇回链 |
| TiKV / HTAP 工程链路 | 本系列 | Region → 事务 → TiFlash |
| HTAP 范式 | db-frontier/12 | 第 1、14–15、18 篇对读 |
| 列存内核 | columnar-engine | 第 14 篇不重写 |
一、这个领域最值得关注的 5 个问题
Region 如何把全局有序 KV 切成 Multi-Raft 组? → 第 1–4、7–8 篇:range、epoch、一 Region 一 Raft 组、split/热点。
一次 Put 如何经 raftstore → Apply → RocksDB? → 第 5–6 篇:propose/append/commit/apply;snapshot 与 log GC。
PD / TSO 如何保证调度与时间戳? → 第 7–9 篇:heartbeat、调度算子、物理+逻辑时钟。
Percolator 2PC / 悲观事务在 TiKV 上如何落锁与 Resolve? → 第 10–11 篇:三 CF、TTL、ResolveLock。
TiFlash Learner 如何定义分析读新鲜度?何时不该叫 HTAP? → 第 14–15、18 篇:可见时延与选型边界。
二、篇目依赖关系与推荐阅读路径
flowchart TD
A["01 HTAP KV overview"] --> B["02 Key MVCC"]
A --> C["03 Region model"]
C --> D["04 Multi-Raft"]
D --> E["05 raftstore write"]
E --> F["06 Snapshot log GC"]
C --> G["07 PD scheduling"]
G --> H["08 Split hotspot"]
G --> I["09 TSO"]
B --> J["10 Percolator"]
I --> J
J --> K["11 Pessimistic ResolveLock"]
E --> L["12 Coprocessor"]
L --> M["13 TiDB SQL boundary"]
F --> N["14 TiFlash Learner"]
N --> O["15 Freshness"]
D --> P["16 Cockroach compare"]
K --> Q["17 Troubleshooting"]
H --> Q
O --> R["18 Selection"]
P --> R
Q --> R
| 路径 | 篇目 | 适合 |
|---|---|---|
| 必读核心 | 1 → 3 → 4 → 5 → 9 → 10 → 14 → 18 | 快速建立坐标系 |
| 从 RocksDB 上来 | 1 → 2 → 5 → 10 → 18 | LSM 读者补分布式层 |
| 从 Raft 协议来 | 4 → 5 → 6 → 14 → 16 | 协议读者补生产路径 |
| 事务与锁 | 2 → 9 → 10 → 11 → 17 | 排查锁冲突 |
| HTAP / 分析 | 1 → 14 → 15 → 18 | frontier/12 读者下沉 |
| 完整通读 | 1 → … → 18 | 系统掌握 |
三、目录与每篇价值点
第一部分:全景与本地引擎
- HTAP /
分布式 KV 全景:四件套与站内分工
- TiDB–TiKV–PD–TiFlash;与 rocksdb、Raft、frontier/12 分工图。
- Key
编码与 MVCC:三 CF 与时间戳
- user key + start_ts;default/lock/write;与 RocksDB Snapshot 分层。
- Region
模型:range、epoch、peer
- 有序键空间切分;纠正「一张表一个 Raft」。
- Multi-Raft:一
Region 一 Raft 组
- 与 etcd 单 Raft 对照;跨 Region 事务开放问题。
第二部分:写路径与副本
- raftstore
写路径:propose 到 Apply
- append/commit/apply;异步 apply 边界。
- Snapshot、log
GC 与副本迁移
- 快照与截断;Learner 预告。
第三部分:PD 与时间戳
- PD
元数据与调度
- heartbeat;transfer-leader / move-peer。
- Split
/ Merge / 热点
- region size 与热点调度;对读 distributed/27。
- TSO:物理加逻辑的时间戳
- 分配路径;与 Spanner TrueTime 对照一句。
第四部分:事务
- Percolator
乐观事务落地
- prewrite/commit;lock CF;对读 distributed/30。
- 悲观事务与
ResolveLock
- TTL、死锁边界;纠正「TiKV 无锁」。
第五部分:计算下推与 SQL 边界
- Coprocessor:下推与
DAG
- 计算下推边界;与 query-engine 对照一句。
- TiDB
SQL 层边界:如何打到 Region
- 只到路由与分布式计划轮廓;不写优化器全书。
第六部分:TiFlash 与对照
- TiFlash
Learner:日志到列存
- Raft Learner;与 columnar-engine 分工。
- 新鲜度与一致性
- 可见时延;回链 frontier/12 三档。
- CockroachDB
对照:range + Raft
- 同源叙事差异;OceanBase 一句边界。
第七部分:排障与选型
- 生产排障:热点、锁、TSO、apply
- 症状→机制决策树。
- 选型与阅读地图
- TiKV vs etcd vs FDB vs RocksDB vs 湖+CDC;系列收束。
四、与相邻系列的分工
| 话题 | 本系列 | 相邻系列 |
|---|---|---|
| 单机 LSM / CF | 第 2/5 篇之上的分布式层 | rocksdb |
| Raft 选举与安全不变量 | 第 4–6 篇只谈 Multi-Raft 落点 | raft-explained |
| Percolator 论文模型 | 第 10–11 篇 TiKV 落地 | distributed/30 |
| 再平衡故事 | 第 7–8 篇 PD 机制 | distributed/27 |
| HTAP 范式与基准 | 第 14–15、18 篇工程链路 | db-frontier/12 |
| 列存格式 / 向量化 | 第 14 篇不重写 | columnar-engine |
| KV 产品对比 | 第 16/18 篇回链 | distributed/39 |
参考
- 系列规划(PLAN.md)(写作执行文档,非发布页)
- 数据库内核索引
- 全部系列索引
- RocksDB 内核
- HTAP 新范式
返回 数据库索引 · rocksdb · db-frontier/12
同主题继续阅读
把当前热点继续串成多页阅读,而不是停在单篇消费。
【TiKV / HTAP 内核】HTAP / 分布式 KV 全景:TiDB–TiKV–PD–TiFlash 四件套
定位 TiKV 7.x/8.x 在 RocksDB 单机 LSM、Raft 协议与 HTAP 范式之间补的那一层:TiDB、TiKV、PD、TiFlash 四组件各自的抽象边界,以及本系列 18 篇的读法。
【TiKV / HTAP 内核】TSO:物理加逻辑的全局时间戳
拆解 PD 的 TSO 如何用 46 位物理毫秒 + 18 位逻辑计数器分配全局单调时间戳,PD leader 如何靠 etcd 时间窗口做故障恢复、客户端如何批量取号;用一句话对照 Spanner TrueTime 的硬件不确定区间路线与 Milvus 的 GuaranteeTs 用法。
数据库内核实验索引
汇总本站数据库内核文章:PostgreSQL / MySQL InnoDB / 列存引擎 / 数据湖与开放表格式 / 流式数据处理 / 分布式 OLAP 查询引擎 / RocksDB 内核 / 向量检索引擎 / Redis 缓存内核 / 全文检索引擎 / TiKV·HTAP 内核,以及 LSM-Tree 从零实现实验。
【TiKV / HTAP 内核】Key 编码与 MVCC:三 CF 与时间戳
拆解 TiKV 的 user key + start_ts/commit_ts 编码规则与 default/lock/write 三 CF 分工,并说明为什么这套 MVCC 与 RocksDB Snapshot 的 sequence 号是两层完全不同的机制。