1. 概览
要谈论 LevelDB 的 Compaction 就不得不从 LevelDB 的整个数据写入流程入手。LevelDB 的基本写入流程大致为:
- 数据先写入到 WAL 日志中,做持久化
- 然后数据同步到
mutable memtable
中 - 当
mutable memtable
大小达到Options.write_buffer_size
设置的大小时,就会变成immutable memtable
,并且创建一个新的mutable memtable
- 后台的 Compaction 线程会把
immutable memtable
dump 成 sstable 文件,并设置于 Level 0 层 - 当 Level i 达到一定条件后,...