leveldb version机制
时间:2022-03-10 17:09
该文章主要回答三个问题:
- leveldb 怎么管理因compact带来的文件变化?
- 当db关闭后重新打开时,如何恢复状态?
- 如何解决版本销毁文件变化和已经获取过的迭代器的冲突?
每次leveldb后台进行compact时, 会造成sst文件的变化。levedb利用version来管理了这些变化。
compact前为Version1, compact后为Version2. VersionSet利用链表将前后一系列的version组织起来。核心代码在db/version_set.h db/version_set.cpp
version间的变化通过VersionEdit来表示:
从上面代码可以看出,通过引用计数避免了version的销毁。从而version中相对应的文件也不会销毁,可以从void DBImpl::DeleteObsoleteFiles() 中看出,每次删除文件时,遍历所有的version,找出当前的live files, 即每个版本的file总集合。不在live files里才会被删除。
leveldb version机制,布布扣,bubuko.com