读取
leveldb读取分为三步:
在memory db中查找指定的key,若搜索到符合条件的数据项,结束查找;
在冻结的memorydb中查找指定的key,若搜索到符合条件的数据项,结束查找;
按低层至高层的顺序在leveli层的sstable文件中查找指定的key,若搜索到符合条件的数据项,结束查找,否则返回NotFound错误,表示数据库中不存在指定的数据;
注解
注意leveldb在每一层sstable中查找数据时,都是按序依次查找sstable的。
0层的文件比较特殊。由于0层的文件中可能存在key重合的情况,因此在0层中,文件编号大的sstable优先查找。理由是文件编号较大的sstable中存储的总是最新的数据。
非0层文件,一层中所有文件之间的key不重合,因此leveldb可以借助sstable的元数据(一个文件中最小与最大的key值)进行快速定位,每一层只需要查找一个sstable文件的内容。
在memorydb或者sstable的查找过程中,需要根据指定的序列号拼接一个internalKey,查找用户key一致,且seq号不大于指定seq的数据,具体的查找过程可见《内存数据库》和《sstable》两篇文章。
当前内容版权归 rjl493456442 或其关联方所有,如需对内容或内容相关联开源项目进行关注与资助,请访问 rjl493456442 .