设计思路与整体架构
LevelDB 是一种以 LSM-tree[1] 为底层数据结构的写优化的键值数据库。
在具体的实现中,LevelDB 主要包含 Memtable、WAL、分层的 SST 文件、用于版本控制的 Manifest 和 CURRENT 文件。
- Memtable 内存数据结构,支持并发读写的跳表[2] 实现,新写入的 kv 会先写到 Memtable 中
- Immutable Memtable 当 Memtable 写入数据量达到阈值时,会生成一个只读的 Memtable 并重新生成一个 Memtable,后台线程会进行 minor compaction 操作,将 immutable memtable 写入 Level 0 的 SST 文件中
- WAL 预写式日志,在写入 Memtable 之前 kv 数据会先写入 WAL 中,用于机器崩溃重启时的数据恢复
- SST 磁盘文件,LevelDB 的每一层由多个 SST 文件组成,每一个 SST 文件是一个只读且有序的 kv 序列。Level 0 中的 SST 文件由 Immutable memtable dump 得到,Level