leveldb源码分析(三)文件格式

leveldb由memtable和磁盘文件组成,数据按key有序存储。memtable使用skiplist,分为mutable和immutable,key包含序列号和类型。sst文件是有序的kv存储,由Data Block、Filter Block、Meta Index Block、Data Index Block和Footer组成。block内部通过共享前缀节省空间,并设置重启点进行查找。LOG文件记录操作历史,MANIFEST文件描述db状态,CURRENT文件指向当前MANIFEST。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

levedb层级组织

 

如图,leveldb由内存中的memtable和磁盘文件组成,memtable和ldb文件中均按key有序存储,level0的各文件管理的key空间可能有重合,从level1到level6,每个level内的文件key范围不会重合。下面分别介绍memtable和磁盘文件格式。

memtable数据结构

memtable使用skiplist维护插入的数据,不允许删除数据,插入数据按自定义的Comparator进行比较按序插入。memtable内部没有同步机制,由于不会删除数据,因此memtable支持并发读,写不可并发,需要在memtable外部进行同步。值得注意的是,写不阻塞读,读可能丢失同时进行的写操作,但读者不会读到不一致的数据。

leveldb使用两个memtable,平时只有一个mutable memtable,插入数据在这个memtable中进行,当这个memtable到达一定大小,就转换成immutable memtable,等待后台刷入磁盘形成ldb文件,同时新产生一个空的mutable memtable供插入数据使用。

memtable的key格式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值