您的位置:首页 > 博客中心 > 数据库 >

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来表示:   

gxlsystem.com,布布扣

  从上面代码可以看出,通过引用计数避免了version的销毁。从而version中相对应的文件也不会销毁,可以从void DBImpl::DeleteObsoleteFiles() 中看出,每次删除文件时,遍历所有的version,找出当前的live files, 即每个版本的file总集合。不在live files里才会被删除。

  

leveldb version机制,布布扣,bubuko.com

热门排行

今日推荐

热门手游