leveldb 源码阅读
1. Build && Install && Debug
leveldb 本身是一个 Key-Value 存储引擎,因此并没有提供 main
入口函数,所以需要自行添加。笔者将其放到了 debug/leveldb_debug.cc
文件中,并在 CMakeLists.txtx
中将其加入:
leveldb_test("util/env_test.cc")
leveldb_test("util/status_test.cc")
leveldb_test("util/no_destructor_test.cc")
if(NOT BUILD_SHARED_LIBS)
leveldb_test("debug/leveldb_debug.cc") # 个人可执行文件
leveldb_test("db/autocompact_test.cc")
mkdir -p build && cd build
cmake -DCMAKE_BUILD_TYPE=Debug .. && cmake --build .
make && make install
gdb leveldb_debug # 此时 leveldb_debug 就在 build 目录下,可直接进行 gdb 调试
如果使用 CLion 的话,可以直接对 leveldb_debug.cc
进行 debug,比 gdb 要更方便一些。
2. leveldb 核心流程梳理
- leveldb 概述与 LSM-Tree
- leveldb 中的常用数据结构
- leveldb 中的 varint 与 Key 组成
- leveldb Key-Value 写入流程分析
- leveldb 预写日志格式及其读写流程
- SSTable(01)—概览与 Data Block
- SSTable(02)—Bloom Filter 与 Meta Block
- SSTable(03)—SSTable 之索引
- SSTable(04)—Table Builder
- Compaction(01)—Minor Compaction
- leveldb 版本控制概览
- Compaction(02)—Major Compaction