Recover

数据库每次启动时,都会有一个recover的过程,简要地来说,就是利用Manifest信息重新构建一个最新的version。

Recover - 图1

过程如下:

  • 利用Current文件读取最近使用的manifest文件;
  • 创建一个空的version,并利用manifest文件中的sessionrecord依次作apply操作,还原出一个最新的version,注意manifest的第一条sessionrecord是一个version的快照,后续的session record记录的都是增量的变化;
  • 将非current文件指向的其他过期的manifest文件删除;
  • 将新建的version作为当前数据库的version;

注解

注意,随着leveldb运行时间的增长,一个manifest中包含的sessionrecord会越来越多,故leveldb在每次启动时都会重新创建一个manifest文件,并将第一条sessionrecord中记录当前version的快照状态。

其他过期的manifest文件会在下次启动的recover流程中进行删除。

leveldb通过这种方式,来控制manifest文件的大小,但是数据库本身没有重启,manifest还是会一直增长。