RocksDB源码-0x0C-Version
1 什么是Version
RocksDB源码-0x08-MANIFEST文件 配合manifest中的内容看更直观RocksDB两手抓,一手抓没持久化的数据在内存,一手抓持久化的数据在SST,回放内存数据靠wal,溯源数据在SST的分布情况也需要一个机制,一类比wal就唤出了VersionSet。
从某个具体的CF视角看,它的每次SST变更就会产生一个VersionEdit,一群VersionEdit组成的概念就是这个CF的Version。再把视角扩大到所有CF,就形成了VersionSet。
通过VersionSet,RocksDB就能拿着key定位到这个key在哪个sst文件里面。
2 盘点VersionSet
3 VersionSet的代码结构
3.1 构造DB的时候构建默认的VersionDB对象
1 | |
3.2 ColumnFamilySet
在VersionSet的构造函数中也会构造个默认的column_family_set
1 | |
3.3 CF的映射
在ColumnFamilySet通过map映射CF的信息
1 | |
3.4 CF怎么找到自己的Version
在上面ColumnFamilySet里面根据CF的编号索引到ColumnFamilyData后,在Data里面用current指针指向自己的Version
1 | |
3.5 Version的结构
Version的数据结构是双链表
1 | |
4 启动的时候从manifest构建恢复VersionSet
RocksDB源码-0x0C-Version
https://bannirui.github.io/2026/02/03/RocksDB/RocksDB源码-0x0C-Version/