CodePie

从零实现 KV 存储

基于 Bitcask 论文,从零实现一个完整的 KV 存储引擎。涵盖数据读写、编解码、索引设计、WriteBatch 原子写、Merge 数据清理等核心主题。

Go / Rust / Java / C++27 章中等难度3 章免费

章节目录

理论基础1-3
01

初识 KV 数据库免费

了解 KV 数据库的基本概念,对比关系型数据库的差异,认识 B+ Tree、LSM-Tree、Bitcask 三大存储引擎流派,理解 Bitcask「追加写日志 + 内存索引」的核心设计思想。

入门
02

Bitcask 论文详解免费

深入阅读 Bitcask 论文,理解数据文件、LogRecord 格式、KeyDir 内存索引、读写删流程、Merge 合并机制、Hint File 加速恢复等完整设计,为后续编码打下理论基础。

入门
03

环境搭建免费

安装 Go / Rust / Java / C++ 开发环境,获取课程代码仓库,熟悉项目结构和构建测试命令,为动手编码做好准备。

入门
核心实现4-12
04

内存和磁盘设计

定义 DB、DataFile、LogRecord、LogRecordPos 等核心数据结构,设计 Indexer 内存索引接口和 IOManager 磁盘 IO 接口,搭建项目骨架。

入门
05

数据读写流程

实现 Put 写入和 Get 读取的完整链路。Put 将数据追加写入活跃文件并更新内存索引,Get 通过内存索引定位数据在磁盘上的位置并读取。

入门
06

数据库启动流程

实现 Open 函数的完整启动逻辑:校验配置、创建数据目录、加载数据文件、遍历 LogRecord 重建内存索引,确保重启后数据不丢失。

中等
07

数据删除流程

实现 Delete 操作的墓碑标记机制。追加 Type=Deleted 的记录并从内存索引中移除,理解 Bitcask 的惰性删除策略。

入门
08

数据文件逻辑

完整实现 DataFile 模块:基于 IOManager 接口进行文件读写,管理文件 ID 和写入偏移量,实现 ReadLogRecord、Sync、Close 等方法。

中等
09

LogRecord 编解码

深入二进制编码格式:varint 变长编码压缩 KeySize/ValueSize,CRC32 校验数据完整性,处理 Header 变长带来的解析细节。

中等
10

Close、Sync、迭代器

实现 Close/Sync 保证数据安全落盘,设计 Iterator 迭代器接口,支持 Rewind、Seek、Next 操作,利用 BTree 快照实现一致性遍历。

中等
11

WriteBatch 原子写

实现批量写入的事务机制。pendingWrites 缓存 → Commit 附加 seqNo → txn-fin 标记 → 批量更新索引,保证原子性。

进阶
12

Merge 数据清理

Sync 并轮转活跃文件,遍历旧文件过滤有效数据,生成 Hint 索引文件加速重启,写入 merge-finished 标记完成原子切换。

进阶
优化篇13-15
13

内存索引优化

引入 ART 自适应基数树和 B+Tree(bbolt)两种新索引实现,对比三种索引的适用场景与性能特征。

进阶
14

文件 IO 优化

实现 MMap 内存映射加速启动索引加载,文件锁保证多进程互斥访问,BytesPerSync 累积写入量阈值触发刷盘,平衡写入性能与数据持久性。

中等
15

数据 Merge 优化

优化 Merge 流程:索引接口返回旧值位置用于精确统计可回收空间,引入 DataFileMergeRatio 阈值和磁盘空间预检查,避免无效 Merge 操作,新增 Stat 接口暴露数据库运行状态。

中等
备份、测试、HTTP16-18
16

数据备份即将上线

实现数据库的备份与恢复功能,支持在线备份,确保数据安全。

中等
17

HTTP 接口即将上线

为 KV 存储引擎提供 HTTP API,支持通过 RESTful 接口进行数据的增删改查操作。

中等
18

基准测试即将上线

编写基准测试,对比不同配置和索引类型下的读写性能,分析性能瓶颈并给出优化建议。

中等
Redis 数据结构和协议19-25
19

Redis 数据结构设计即将上线

设计基于 KV 存储引擎的 Redis 兼容数据结构层,定义 String、Hash、Set、List、Sorted Set 的编码方案。

中等
20

String 结构支持即将上线

实现 Redis String 类型的 GET、SET、SETNX、GETDEL 等核心命令。

入门
21

Hash 结构支持即将上线

实现 Redis Hash 类型的 HSET、HGET、HDEL、HGETALL 等命令,基于 KV 编码存储字段。

中等
22

Set 结构支持即将上线

实现 Redis Set 类型的 SADD、SREM、SISMEMBER、SMEMBERS 等集合操作命令。

中等
23

List 结构支持即将上线

实现 Redis List 类型的 LPUSH、RPUSH、LPOP、RPOP、LRANGE 等列表操作命令。

中等
24

Sorted Set 结构支持即将上线

实现 Redis Sorted Set 类型的 ZADD、ZSCORE、ZRANGE 等有序集合命令,支持按分数范围查询。

进阶
25

兼容 Redis 协议即将上线

实现 RESP 协议解析,让 KV 存储引擎可以直接使用 redis-cli 等标准 Redis 客户端进行交互。

进阶
加餐26-27
26

学习资料汇总即将上线

推荐数据库、存储引擎相关的经典论文、书籍、开源项目,帮助你进一步深入学习。

入门
27

面试要点即将上线

梳理 KV 存储引擎相关的高频面试题,涵盖 Bitcask 原理、LSM-Tree 对比、并发控制、数据恢复等核心知识点。

入门