leveldb的db实现包含一组version,所有version在version_set中维护,最新的version为current。每个version记录一个db状态,包含每个level的文件、每个文件的key range等信息。version中维护一个ref计数以管理声明周期,保证old version在仍有迭代器访问时不会消失。所有version保存在一个version_set中。
源码位置:db/version_set.h db/version_set.cc
这里结合一个具体例子如图:
Version1中记录了每层的所有文件,和last_sequence等元数据,经过一次compaction后,level0的001.ldb和004.ldb文件合并成level1的011.ldb,形成Version2。在VersionSet中记录当前version为Version2,后续对db进行的查找、插入的操作在Version2中进行。在Version1的引用计数清零后会从VersionSet中删除