课程与学习时长
官方要求的课程是三门:101、201.1、201.3。我实际学的情况:
| 课程 | 内容 | 我花的时间 |
|---|---|---|
| TiDB 快速起步 | 入门引导,讲 TiDB 是什么 | 2 小时左右 |
| 101 - TiDB 数据库核心原理与架构 | 三大组件、Region、Raft、事务模型 | 8 小时(1.5 倍速过了两遍) |
| 201.1 - TiDB 的架构与特点 | 架构细节,和 101 有重叠 | 4 小时 |
| 201.3 - TiDB 特有功能与事务控制 | 乐观/悲观事务、缓存表等特有功能 | 5 小时 |
加上课后练习题、翻文档和自己搭环境实操,前前后后三周,累计大概 25 个小时。基本都是晚上和周末学的,中间因为一个线上故障断了快一周,回来发现 Region 那块忘得差不多了,又补了一遍。
官方课后练习题一定要做,考试里有原题,或者是换个说法的原题。
课程内容梳理
这部分我按自己的理解记,不是照抄大纲。
架构是大头。 TiDB Server、PD、TiKV 三个组件各自干什么、谁有状态谁无状态,这些必须形成条件反射。我的记法:TiDB Server 是无状态的计算层,挂了随便重启;PD 是大脑,管元数据、发 TSO、做调度,集成 etcd,至少部署 3 个节点;TiKV 是存储层,数据按 Region 切分,默认三副本走 Multi-Raft。
Region 机制要抠细节:96MB~144MB 是分裂的区间,达到 96MB 不再写入新数据但旧数据还能改,超过 144MB 触发分裂一分为二。课后题在这个地方挖过坑。
Raft 部分不用会推导,但角色分工和日志复制流程要清楚——Leader 处理读写,Follower 只同步日志;写入口志多数派确认才算成功。
事务是 201.3 的重点。TiDB 默认悲观事务模式(v4.0 之后),乐观模式冲突高时会大量重试。MVCC 靠版本链实现快照读,GC 默认每 10 分钟跑一次,safe point 之前的历史版本会被清掉——这个和 flashback、stale read 是联动的,后面细说。
周边工具认脸就行:Dumpling 导出、Lightning 导入、DM 做迁移同步、BR 备份恢复、TiCDC 监听变更。考试考它们各自干什么,不考怎么配。
遇到的问题和延伸思考
1. TSO 为什么只能从 PD Leader 拿?
课程里就一句话带过:"全局时间戳从 PD Leader 获取。"我一开始没想明白为什么 Follower 不行。后来理解了:TSO 要保证全局单调递增,如果有多个节点都能发,就得处理"时钟回退"的问题。PD 自身也是 Raft 复制,但 TSO 不走 Raft,只由 Leader 独占分配,Leader 挂了新 Leader 要等一个 lease 时间确保旧 Leader 彻底下线,避免发出重复的时间戳。这个设计比我想的深。
2. TiFlash 为什么用 Raft Learner 而不是 Follower?
Learner 只同步日志、不参与投票。好处是列存副本落后了不影响写入提交(不需要它确认),也不影响选主。代价是 TiFlash 上的数据不保证强一致读——课程里叫"一致性读取",指的是按时间戳版本筛选读,而不是读到的数据达到读已提交之上的那种线性一致。这块概念容易搅浑,建议对照文档的 TiFlash 章节再看一遍。
3. GC 和 flashback 的关系(踩坑实录)
学到 GC 的时候我顺手在 playground 里试 stale read,结果报错说超过时间范围。排查半天才发现 tidb_gc_life_time 默认才 10 分钟,safe point 之前的历史版本早被清了。这也解释了为什么 flashback 有时间窗口限制——被 GC 清掉的数据神仙难救。生产上想拉长 stale read 窗口,就得调大这个参数,但调太大 MVCC 旧版本堆积又会影响性能,是个权衡。
4. 聚簇表的 KV 映射
聚簇表主键直接当 Key,非聚簇表用隐藏 RowID。这个和 MySQL InnoDB 的聚簇索引思路很像,但 TiDB 多了一层"表数据到 KV 的编码"抽象。我在实操时用 tikv-ctl 看过实际写入的 key 格式(带 table 前缀的编码),比光看课件直观得多。
5. MPP 只支持等值连接
TiFlash 的 MPP 模式只支持等值 join,非等值连接会退回普通模式。课后题考了这个,做错过一次。延伸想了一下:数据要按 join key shuffle 到同一节点才能本地关联,非等值连接没法按这种方式切分数据,只能广播或者拉回,代价失控,索性不支持。这个限制实际做 HTAP 查询优化时要留意。
6. 实操环境的坑
用 TiUP playground 起单机环境基本没障碍,但我在公司内网机器上装完整集群时被端口搞得焦头烂额——PD、TiKV、TiDB Server 之间互相发现要开一堆默认端口,云主机安全组也得放行。虽然考试不考部署细节,但自己搭一遍对理解组件间通信帮助很大,强烈建议动手。
考试感受
多选题是重灾区,24 道,漏选、错选都不得分。我做到多选的后半段明显开始纠结,好几道在两个选项之间来回横跳。60 分钟时间够用,我做完了还剩十来分钟检查,改了两道答案(不知道改对没改错)。
提交后立刻出成绩。有两道题印象里是课后题原题,所以再一次:课后题必做。
给后来人的建议
- 三门官方课过两遍,第二遍 1.5 倍速查漏补缺;
- 课后练习题做完、做懂,别背答案,考试会换皮;
- 自己用 TiUP 搭个环境跑跑 SQL、看看 Dashboard,比干看视频强;
- 架构原理的权重最高(官方大纲里占四成),Region、Raft、事务这三块值得翻文档深挖。
证书电子版已到手,简历又多一行字。下一个目标 PCTP,攒积分中。