异常处理

倘若数据库中的manifest文件丢失,leveldb是否能够进行修复呢?

答案是肯定的。

当leveldb的manifest文件丢失时,所有版本信息也就丢失了,但是本身的数据文件还在。因此leveldb提供了Recover接口供用户进行版本信息恢复,具体恢复的过程如下:

  • 按照文件编号的顺序扫描所有的sstable文件,获取每个文件的元数据(最大最小key),以及最终数据库的元数据(sequencenumber等);
  • 将所有sstable文件视为0层文件(由于0层文件允许出现key重叠的情况,因此不影响正确性);
  • 创建一个新的manifest文件,将扫描得到的数据库元数据进行记录;但是该方法的效率十分低下,首先需要对整个数据库的文件进行扫描,其次0层的文件必然将远远大于4个,这将导致极多的compaction发生。