Manifest

manifest文件专用于记录版本信息。leveldb采用了增量式的存储方式,记录每一个版本相较于上一个版本的变化情况。

展开来说,一个Manifest文件中,包含了多条Session Record。一个SessionRecord记录了从上一个版本至该版本的变化情况。

注解

变化情况大致包括:

(1)新增了哪些sstable文件;

(2)删除了哪些sstable文件(由于compaction导致);

(3)最新的journal日志文件标号等;

借助这个Manifest文件,leveldb启动时,可以根据一个初始的版本状态,不断地应用这些版本改动,使得系统的版本信息恢复到最近一次使用的状态。

一个Manifest文件的格式示意图如下所示:

Manifest - 图1

一个Manifest内部包含若干条Session Record,其中第一条SessionRecord记载了当时leveldb的全量版本信息,其余若干条SessionRecord仅记录每次更迭的变化情况。

因此,每个manifest文件的第一条SessionRecord都是一个记录点,记载了全量的版本信息,可以作为一个初始的状态进行版本恢复。

一个Session Record可能包含以下字段:

  • Comparer的名称;
  • 最新的journal文件编号;
  • 下一个可以使用的文件编号;
  • 数据库已经持久化数据项中最大的sequence number;
  • 新增的文件信息;
  • 删除的文件信息;
  • compaction记录信息;