阅读指南
本项目是什么?
本项目是一个基于LSM Tree的开源教学KV存储引擎, 除LSM Tree的基础功能外, 还支持MVCC、WAL、崩溃恢复、Redis兼容等功能。
LSM Tree(Log-Structured Merge-Tree)是一种适用于磁盘存储的数据结构,特别适合于需要高吞吐量的写操作的场景。它由Patrick O'Neil等人于1996年提出,广泛应用于NoSQL数据库和文件系统中,如LevelDB、RocksDB和Cassandra等。LSM Tree的主要思想是将数据写入操作日志(Log),然后定期将日志中的数据合并到磁盘上的有序不可变文件(SSTable)中。这些SSTable文件按层次结构组织,数据在多个层次之间逐步合并和压缩,以减少读取时的查找次数和磁盘I/O操作。
本项目完成了包括内存表(MemTable)、不可变表(SSTable)、布隆过滤器(Bloom Filter)、合并和压缩(Compaction)等LSM Tree的核心组件,并在此基础上添加了额外的功能, 包括:
- 实现了ACID事务
- 实现了MVCC多版本并发控制
- 实现了WAL日志和崩溃恢复
- 基于KV存储实现了Redis的Resp协议兼容层
- 基于Resp协议兼容层实现了redis-server服务
本项目有哪些独特优势?
本项目作为数据库存储领域的入门项目, 相比工业界的成熟项目leveldb, 其具备以下优点:
代码更简洁, 适合用以学习lsm tree架构, 这个项目的核心代码5k行左右, leveldb是3w行左右, 且可读性和注释不适合初学者阅读
LevelDB 不支持事务和 MVCC, 本项目实现中基于关系型数据库中事务隔离性的定义, 自己实现了一套事务控制和MVCC机制
不局限于底层的存储引擎, 在上层实现了Redis传输协议兼容层设计, 以及支持redis resp协议传输的server, 即可替代redis-cli接收Redis客户端的访问请求
本项目的目的是什么?
本项目的最终目标是实现一个基于LSM Tree的单机KV Store引擎。其功能包括:
- 基本的KV存储功能,包括put、get、remove等。
- 持久化功能,构建的存储引擎的数据将持久化到磁盘中。
- 事务功能,构建的存储引擎将支持ACID等基本事务特性
- MVCC, 构建的存储引擎将支持MVCC对数据进行查询。
- WAL与崩溃恢复, 数据写入前会先预写到WAL日志以支持崩溃恢复
- Redis兼容, 本项目将实现Redis的Resp兼容层, 作为Redis后端。
本项目适合哪些人?
通过本项目,你可以学习到LSM Tree这一工业界广泛使用的KV存储架构, 适合数据库、存储领域的入门学习者。同时本项目包含了Redis的Resp协议兼容层、网络服务器搭建等内容,也适合后端开发的求职者。同时,本项目使用C++ 17特性, 使用Xmake作为构建工具,并具备完善的单元测试,也适合想通过项目进一步学习现代C++的同学。
本项目的前置知识?
本项目的知识包括:
- (必备): 到C++17为止的常见C++新特性,(项目的配置文件指定的标准为C++20, 但其只在单元测试中使用, 项目核心代码只要求C++17即可)
- (必备):常见的数据结构与算法知识
- (建议): 数据库的基本知识,包括事务特性、MVCC的基本概念
- (建议): Linux系统编程知识,本项目使用了系统底层的mmap等IO相关的系统调用
- (可选):Xmake的使用, 本项目的构建工具为Xmake 若你想自定义单元测试或引入别的库, 需要手动在Xmake中配置。
- (可选): Redis基本知识, 本项目将利用kv存储接口实现Redis后端, 熟悉Redis有助于项目的理解。
- (可选): 单元测试框架gtest的使用, 如果你想自定义单元测试, 需要自行改配置。
学习完本项目能收获到什么?
学习并完成 本项目后,你将获得以下知识与技能:
- 深入理解 LSM Tree 架构 你将从零实现一个 LSM Tree,并掌握其核心组成模块(如 MemTable、SSTable、Bloom Filter、Compaction 等),理解其写优化原理及数据组织方式。
- 掌握事务与 MVCC 实现原理 你将学习如何从底层实现 ACID 事务控制,掌握 MVCC(多版本并发控制)机制的实现方式,这些是现代数据库如 MySQL、PostgreSQL 的核心机制。(关系型数据库的事务控制非常复杂,KV数据库是其简化版的实现)
- 理解日志与崩溃恢复机制(WAL) 你将理解预写日志(WAL)的设计思路,如何通过日志实现崩溃恢复,保障系统在异常退出后依然保持数据一致性。
- 具备构建网络服务能力 你将实现一个支持 Redis 协议的 KV Server,了解网络通信协议的设计与解析,并掌握服务端处理客户端请求的基本能力。
- 掌握现代 C++ 项目开发实践 你将实践使用 C++17/20 开发一整套系统,掌握智能指针、RAII、右值、lambda函数等现代 C++ 技巧。同时,你也将了解如何使用 Xmake 进行构建管理,以及使用 gtest 进行单元测试。
- 提升调试与系统级编程能力 你将接触 mmap、文件 IO、系统调用等 Linux 编程技术,提高调试底层系统代码的能力。
- 建立一项高质量的开源项目作品 本项目是一个架构完整、文档详实、适合展示的项目成果,可作为你的技术简历亮点,向面试官或导师展示你在系统设计、存储原理与 C++ 实践方面的能力。
- 为进阶数据库/存储方向打下坚实基础 本项目将为你后续深入学习 RocksDB、TiKV、ClickHouse 等工业级存储系统打下基础。你也将具备参与开源数据库开发、系统软件研发等职位的能力。 具备代码架构与模块化设计能力

通过架构图,你将清晰地看到本项目如何将复杂的存储引擎划分为外部接口层 (External)、事务管理层 (TrancManager, TrancContext, WAL) 和 LSM引擎核心层 (LSMEngine)。项目完成过程中, 分析这种具体的架构图,你将培养从宏观上把握系统整体设计的能力,理解各组件的职责边界和接口定义。学习如何通过图表化的方式来表达和理解复杂的系统架构,这对于未来设计自己的系统或理解其他复杂系统至关重要。





