异常处理
倘若数据库中的manifest文件丢失,leveldb是否能够进行修复呢?
答案是肯定的。
当leveldb的manifest文件丢失时,所有版本信息也就丢失了,但是本身的数据文件还在。因此leveldb提供了Recover
接口供用户进行版本信息恢复,具体恢复的过程如下:
- 按照文件编号的顺序扫描所有的sstable文件,获取每个文件的元数据(最大最小key),以及最终数据库的元数据(sequencenumber等);
- 将所有sstable文件视为0层文件(由于0层文件允许出现key重叠的情况,因此不影响正确性);
- 创建一个新的manifest文件,将扫描得到的数据库元数据进行记录;但是该方法的效率十分低下,首先需要对整个数据库的文件进行扫描,其次0层的文件必然将远远大于4个,这将导致极多的compaction发生。
当前内容版权归 rjl493456442 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 rjl493456442 .