从 VersionStorageInfo 的 compaction score、ColumnFamilyData 的 picker、DBImpl 的后台调度、CompactionJob 的输出 SST 构建、以及 VersionEdit/LogAndApply 的提交链路出发,建立 RocksDB compaction 的基础机制与主流程。
从 CURRENT 指向 MANIFEST、VersionEdit 增量记录、VersionBuilder/VersionEditHandler 的应用与回放、以及 VersionSet::LogAndApply/Recover 的主链出发,讲清 RocksDB 如何持久化 SST 元数据、切换 current Version,并在 DB 打开时恢复回来。
从 FileSystem/Env 文件抽象、TableCache、TableReader、BlockBasedTableReader、BlockFetcher、RandomAccessFileReader 和 ReadOptions 出发,梳理 RocksDB 点查 SST 时如何从逻辑查找落到物理 block 读取,并区分 table cache、block cache、prefetch buffer 与 OS page cache 的职责边界。
从 WriteBatch sequence 分配、SnapshotImpl、DBImpl::GetImpl、LookupKey、GetContext、DBIter 和 ReadCallback 源码出发,梳理 RocksDB 如何用 sequence number 表达版本顺序,用 snapshot 固定读可见性上界,并在 Get 与 Iterator 路径中过滤不可见版本。
从 DBImpl::GetImpl、MultiGetImpl、NewInternalIterator、Version::Get、TableCache 和 BlockBasedTableReader 源码出发,梳理 RocksDB 读路径如何在 SuperVersion 稳定视图上先查 memtable,再查 immutable memtable,最后查 SST,并说明 Get、MultiGet 与 Iterator 的职责边界。
结合 BuildTable、TableBuilder、BlockBasedTableBuilder、BlockBuilder、BlockHandle 和 Footer 的源码,从写侧视角梳理 RocksDB 如何把 flush/compaction 输入流编码成 block-based SST,以及 data/index/filter/properties/metaindex/footer 各自的职责与字节边界。
结合 ScheduleFlushes、SwitchMemtable、BackgroundFlush、FlushJob、MemTableList::TryInstallMemtableFlushResults 与 GetDBRecoveryEditForObsoletingMemTables 的源码,梳理 RocksDB 如何把 mutable memtable 切成 immutable、刷成 L0 SST,并推进 MANIFEST 与 WAL 保留边界。
结合 LookupKey、InternalKeyComparator、MemTable::Get、SaveValue、range_del_table_ 与 WriteBatch::InsertInto 的源码,梳理 RocksDB 如何在 memtable 中实现删除、多版本可见性、范围删除覆盖以及 seq_per_batch 语义。
结合 MemTable::Add、MemTable::Get、SkipListRep、InlineSkipList 与 ConcurrentArena 的源码,梳理 RocksDB 如何把带 sequence 的更新编码进内存表,并用跳表与分块分配器组织读写与内存生命周期。
结合 DBImpl::WriteToWAL、log::Writer::AddRecord、log::Reader::ReadRecord 与 RecoverLogFiles 源码,梳理 RocksDB 的 WAL 如何承载 WriteBatch、如何做物理分片写入,以及恢复时如何重新还原为 memtable 更新。