TinyKV 项目总览:从课程骨架到存储系统

来源:本地 README.mdtinykv-understanding/README.md。官方 Project 文档只做引用,不整段搬运。

TinyKV 本地文档和博客覆盖关系
这次补发的重点:把本地自有中文材料放到博客,官方英文 Project 文档只作为索引。

TinyKV 可以当成一条很完整的数据库存储层训练线。它从一个能读写 BadgerDB 的单机 KV 开始,往上加 Raft、Region、Scheduler,最后再加 MVCC 和 Percolator 风格事务。

我更喜欢按系统问题来读它:数据先怎么落盘,再怎么复制,容量不够时怎么拆分,多个客户端并发读写时怎么给出稳定语义。这样看,Lab 之间不是孤立作业,而是一层层往上搭的存储系统。

项目在做什么

官方 README 对 TinyKV 的定位很直接:它借鉴 MIT 6.824 和 TiKV,用 Raft 做一个支持事务的分布式 KV 存储服务。课程开始时只给骨架代码,核心逻辑要按 Project 1 到 Project 4 补完。

对应到我平时说的 Lab,大概是这样:

Lab 系统问题 实现重心 博客文章
Lab1 单机数据怎么可靠读写 StandaloneStorage、Raw KV API、Badger 封装 StandaloneKV
Lab2 多副本怎么按同一顺序执行 Raft、Ready、raftstore、snapshot RaftKV
Lab3 key 空间怎么横向拆分和调度 Region、Peer、Store、Scheduler Multi-RaftKV
Lab4 并发读写怎么有事务语义 MVCC、lock/write/default、Percolator Transactions

代码目录怎么读

目录 先抓住什么
kv KV 服务和存储层,Lab1、Lab2B、Lab3、Lab4 都会碰到
raft Raft 算法本体,重点是状态转换、日志复制、Ready/Advance
scheduler TinyScheduler,维护 Store/Region 状态并生成调度任务
proto gRPC 和 protobuf 定义,请求、响应、Raft 消息都从这里来
doc 官方 Project 文档和阅读清单,适合查任务边界
tinykv-understanding 本地中文理解文档,已经整理成博客 Lab 系列

我会怎么讲这个项目

面试里不要一开口就钻到 Raft 选举。更稳的讲法是先给出系统边界:TinyKV 关注数据库的存储层,不做 SQL 优化器,也不做完整生产级 TiKV 的所有调度和监控。然后按请求路径展开:

1
Client -> KV API -> Storage / RaftStorage -> Raft group -> apply -> BadgerDB

如果问到事务,再补上 MVCC 这层:

1
Transactional API -> MVCC -> default/write/lock CF -> 底层 KV

这个讲法的好处是边界清楚。Lab1 不是“太简单所以跳过”,它是后面所有 apply 的落点;Lab4 也不是凭空多出来的事务题,它是把版本和锁编码进同一套 KV 存储里。

哪些本地文档已经发到博客

本地文档 博客位置
tinykv-understanding/labs/tinykv-lab-roadmap.md TinyKV Lab 路线图
tinykv-understanding/labs/lab1-standalonekv.md Lab1:StandaloneKV
tinykv-understanding/labs/lab2-raftkv.md Lab2:RaftKV
tinykv-understanding/labs/lab3-multiraftkv.md Lab3:Multi-RaftKV
tinykv-understanding/labs/lab3b-split-heartbeat-difficulty.md Lab3B:Region Split 后的状态收敛问题
tinykv-understanding/labs/lab4-transactions.md Lab4:Transactions
tinykv-understanding/labs/testing-guide.md TinyKV 测试指南
interview-experiences/tinykv-tikv-6.824-mianshi.md 面经索引
interview-experiences/tinykv-lab-question-map.md 问题和 Lab 对照表
doc/reading_list.md 阅读清单

doc/project1-StandaloneKV.mddoc/project4-Transaction.md 是官方任务书,我没有直接搬到博客里。Lab 文章里会引用它们,真正的解释还是用自己的话写。