第 2 章:阅读路线图与前置知识——你的学习 GPS
结论先行:不要试图一次读完所有内容。根据你的目标(参加竞赛、系统学习、技术选型),选一条路径,按顺序推进。本章帮你搞清楚”先学什么”和”需要什么基础”。
你在哪里,要去哪里
学习分布式数据库就像规划一次旅行。你不会同时去所有景点——你需要先确定目的地,再规划路线。
这本导读有 13 章内容,涵盖从基础概念到竞赛实战的完整链路。但你不需要从头到尾顺序读完。根据你的目标,有三条推荐路线。
路径 A:竞赛路径(2-3 周)
适合人群:参加犀牛鸟 2026 的同学,目标是尽快理解 OpenTenBase 并提交有价值的 PR。
核心思路:先建立最小必要知识,然后深入 OpenTenBase,最后找到贡献切入点。
第 1 章 第 3 章 第 10 章
为什么需要分布式 ───► 架构模式(看 PG Fork) ───► OpenTenBase 精读
(1天) (1天) (3-4天)
│
┌──────────────────────────────────────────────┘
▼
第 4 章 第 6 章 第 12 章 第 13 章
共识(看 GTM) ───► 查询优化 ───► 技术难点 ───► 竞赛实战指南
(2天) (pgxcship) (挑相关的) (开始写代码)
(2天) (1-2天) (持续)
每个阶段的里程碑:
- 第 1 周结束:能画出 OpenTenBase 的架构图(GTM / Coordinator / Datanode),理解每个组件的职责
- 第 2 周结束:能读懂
src/gtm/main/gtm_txn.c的核心逻辑,理解分布式事务的处理流程 - 第 3 周结束:确定一个具体的贡献方向,开始写代码或提 Issue
可以跳过的内容:第 2 章(就是本章,你正在读了)、第 7 章(Citus/Vitess 细节)、第 8 章(TiDB/CockroachDB 细节)、第 9 章(YugabyteDB 细节)、第 11 章(横向对比细节)。这些内容对竞赛不是关键路径,有时间再回来看。
路径 B:全景路径(4-6 周)
适合人群:想系统性理解分布式数据库领域的同学,比如准备研究生面试、想写综述论文、或者纯粹对这个领域感兴趣。
核心思路:从概念到架构到项目到对比,层层递进。
Part 1(概念)→ Part 2(架构)→ Part 3(项目)→ Part 4(对比)
第1章 → 第2章 → 第3章 → 第4章 → 第5章 → 第6章
(基础) (路线) (架构) (共识) (分片) (优化)
└─────────┬──────────────────────┘
▼
第7章 → 第8章 → 第9章 → 第10章 → 第11章 → 第12章
(轻量) (重量) (YDB) (OTB) (对比) (难点)
每两章为一个学习单元,建议用 2-3 天完成一个单元。
学习节奏建议:
- 第 1 周:Part 1 + Part 2 的前两章(第 1-4 章),建立概念框架
- 第 2 周:Part 2 的后两章 + Part 3 的前两章(第 5-8 章),看具体实现
- 第 3-4 周:Part 3 的后两章 + Part 4(第 9-12 章),对比和深入
- 第 5-6 周:回顾 + 查漏补缺 + 阅读感兴趣项目的源码
路径 C:生产实践路径(1-2 周)
适合人群:需要为公司做技术选型的工程师,或者准备面试想快速了解各项目特点。
核心思路:抓大放小,重点看对比和取舍。
第 1 章 → 第 3 章 → 第 11 章 → 选一对深读 → 第 12 章
(为什么) (架构) (对比表) (7或8章) (难点)
(半天) (1天) (1天) (2天) (挑感兴趣的)
这条路径的重点:
- 第 3 章的架构模式对比表——帮你理解每种方案的适用场景
- 第 11 章的设计取舍矩阵——帮你做选型决策
- 第 12 章的技术难点——帮你理解每个方案的局限性
前置知识清单
分布式数据库涉及的知识面很广,但你不需要全部掌握才能开始阅读。以下是按”必须”、”最好有”、”加分项”三个层次列出的前置知识。
必须掌握(没有这些会读不懂)
SQL 基础:知道 SELECT、INSERT、UPDATE、DELETE 怎么用,理解表、行、列、主键的概念。如果你用过 MySQL 或 PostgreSQL 的命令行客户端做过简单查询,就够了。
-- 你需要能读懂这种级别的 SQL
SELECT user_name, order_count
FROM users
WHERE city = '北京'
ORDER BY order_count DESC
LIMIT 10;
基本的计算机网络概念:知道什么是客户端和服务器、什么是 IP 地址和端口、什么是网络延迟。不需要理解 TCP 三次握手的细节,但需要知道”两台机器之间通过网络通信,通信有延迟且可能失败”。
编程基础:能读懂基本的代码逻辑(条件判断、循环、函数调用)。本导读的代码示例以 Go、C 和 SQL 为主,但不要求你精通任何一门语言——代码注释会解释关键逻辑。
最好有(会让你理解更深)
数据库事务概念:理解 ACID(原子性、一致性、隔离性、持久性)的含义。第 1 章已经做了介绍,如果你之前没接触过,回去复习一下。
基本的操作系统概念:进程和线程的区别、什么是内存和磁盘 IO、什么是锁。这些概念在讨论并发控制和性能优化时会用到。
Git 基本操作:如果你打算参加竞赛,需要知道 clone、branch、commit、push、pull request 的基本流程。
加分项(让你成为高手)
C 语言:OpenTenBase 和 Citus 都是 C 语言项目。如果你能读懂 C 的指针、结构体、函数指针,在阅读源码时会如虎添翼。
Go 语言:TiDB、CockroachDB、Vitess 都是 Go 项目。Go 的语法比较简洁,即使没学过也能大致看懂。
数据结构与算法:理解哈希表、B+ 树、LSM-Tree 等数据结构会帮助你理解存储引擎的设计。
分布式系统理论:Paxos/Raft 共识算法、两阶段提交、向量时钟等。本导读会用大量类比来解释这些概念,但如果你之前有所了解,理解会更快。
章节依赖关系
不是所有章节都有严格的先后依赖关系。下面这张图帮你理解哪些章节可以独立阅读,哪些必须先读前置章节。
第 1 章(基础,必读)
/ | \
/ | \
第 3 章 第 4 章 第 5 章
(架构模式) (共识复制) (分片均衡)
| \ | |
| \ | |
| --------+-------------+
| |
| 第 6 章
| (查询优化)
|
┌────┼────┬─────────┐
| | | |
第 7 章 第 8 章 第 9 章 第 10 章
(轻量级)(重量级)(YDB) (OTB)
| | | |
└────┴────┴─────────┘
|
第 11 章
(横向对比)
|
第 12 章 第 2 章
(技术难点) (路线图,独立)
|
第 13 章
(竞赛实战)
关键依赖关系说明:
- 第 1 章是所有章节的前置,确保你理解了”为什么需要分布式数据库”
- 第 3 章(架构模式)是 Part 3(项目精读)的前置——先理解架构范式再看具体实现
- 第 4-6 章(核心概念)之间相对独立,可以根据兴趣调整顺序
- 第 7-10 章(项目精读)之间完全独立,可以只读你关心的项目
- 第 11 章(对比)最好在读完至少 2 个项目精读后再看
- 第 13 章(竞赛实战)依赖第 10 章(OpenTenBase 精读)
学习方法建议
阅读策略:三遍法
第一遍(浏览,10-15 分钟/章):只看每章开头的”结论先行”、每节的第一段、ASCII 架构图、对比表格。目标是建立全局印象——知道每章在讲什么,不纠结细节。
第二遍(精读,1-2 小时/章):带着第一遍产生的问题逐段阅读。重点关注生活类比(帮你建立直觉)、代码示例(帮你理解机制)、常见误区(帮你避免错误理解)。
第三遍(实践,时间不限):打开相关项目的源码,对照导读中的文件路径和代码片段实际阅读。动手画架构图、写笔记、跑示例。
笔记策略
每读完一章,试着用自己的话回答以下三个问题:
- 这章解决的核心问题是什么?
- 最让我意外的一个设计决策是什么?为什么它让我意外?
- 如果我要向一个完全不懂技术的朋友解释这章的核心概念,我会怎么说?
如果你能流利地回答第三个问题,说明你真正理解了内容。如果你发现自己只能背术语却不能用大白话解释,那就需要回去重新看类比部分。
时间管理
一个现实的建议:不要连续阅读超过 2 小时。分布式数据库的概念密度很高,连续阅读容易”看了后面忘了前面”。每 45-60 分钟休息一下,回顾一下笔记。
如果你是利用课余时间学习,建议每天投入 1-2 小时,一周完成 2-3 章。这样 4-6 周可以读完全部内容。
各章核心概念预览
为了帮你做学习规划,这里列出每章的核心概念和预期收获:
| 章节 | 核心概念 | 读完后你能… |
|---|---|---|
| 第 1 章 | 分布式动机、CAP、ACID 挑战 | 解释为什么需要分布式数据库 |
| 第 2 章 | 学习路径、前置知识 | 制定自己的学习计划 |
| 第 3 章 | 5 种架构模式 | 看到一个新项目就能判断它属于哪种模式 |
| 第 4 章 | Raft、GTM、时钟 | 解释”多台机器如何达成一致” |
| 第 5 章 | Hash/Range 分片、在线迁移 | 解释”数据怎么分、分了怎么移” |
| 第 6 章 | Cascades、五层规划器 | 解释”分布式查询为什么慢以及怎么优化” |
| 第 7 章 | PG 扩展 vs MySQL 代理 | 对比 Citus 和 Vitess 的设计取舍 |
| 第 8 章 | HTAP、Parallel Commits | 对比 TiDB 和 CockroachDB 的设计取舍 |
| 第 9 章 | DocDB、HLC、双协议 | 解释 YugabyteDB 的独特设计 |
| 第 10 章 | GTM、PG 内核改造 | 理解 OpenTenBase 的架构并找到贡献方向 |
| 第 11 章 | 设计取舍矩阵 | 在 6 个项目中做出选型决策 |
| 第 12 章 | 12 个技术难点 | 理解分布式数据库最难的部分 |
| 第 13 章 | 贡献策略、代码导航 | 开始为 OpenTenBase 写代码 |
术语对照表
本导读中会反复出现以下术语,提前熟悉可以减少阅读障碍:
| 中文术语 | 英文 | 一句话解释 |
|---|---|---|
| 分片/分区 | Sharding / Partitioning | 把数据拆分到多台机器上 |
| 副本 | Replica | 数据的冗余拷贝,用于容灾 |
| 共识 | Consensus | 多台机器就某件事达成一致 |
| 事务 | Transaction | 一组操作要么全成功要么全失败 |
| 隔离级别 | Isolation Level | 并发事务之间能看到多少互相的修改 |
| 快照 | Snapshot | 数据在某个时间点的完整状态 |
| 下推 | Push Down | 把计算任务推到数据所在的节点执行 |
| 协调节点 | Coordinator | 接收用户请求并分发到数据节点 |
| 数据节点 | Datanode / Worker | 实际存储和处理数据的节点 |
| WAL | Write-Ahead Log | 先写日志再改数据,保证持久性 |
| LSM-Tree | Log-Structured Merge-Tree | 一种写优化的存储结构 |
| MVCC | Multi-Version Concurrency Control | 多版本并发控制,通过保留旧版本避免加锁 |
| HTAP | Hybrid Transaction/Analytical Processing | 同时处理事务和分析的能力 |
| 2PC | Two-Phase Commit | 两阶段提交,分布式事务的经典协议 |
| GTM | Global Transaction Manager | OpenTenBase 的全局事务管理器 |
| Raft | — | 一种共识算法,用于多副本之间达成一致 |
| PG | PostgreSQL | 开源关系型数据库 |
读完本章你能做什么
- 根据自己的目标选择一条阅读路径,知道先读哪些章节
- 评估自己的前置知识是否足够,知道需要补什么
- 理解章节之间的依赖关系,不会因为跳读而感到困惑
- 掌握”三遍阅读法”的学习策略
- 熟悉后续章节中会反复出现的核心术语
导读目录:README.md 上一章:第 1 章 · 为什么需要分布式数据库 下一章:第 3 章 · 四大架构模式——从改装到重造