LevelDb之五:MemTable详解

LevelDb中Memtable用于存储KV数据,提供写入、删除及读取接口。删除操作实为标记,真正清除在Compaction阶段。Memtable内部采用SkipList实现,保证键值对按Key有序存储,提高写入效率。
摘要由CSDN通过智能技术生成

       LevelDb日知录前述小节大致讲述了磁盘文件相关的重要静态结构本小节讲述内存中的数据结构MemtableMemtable在整个体系中的重要地位也不言而喻总体而言所有KV数据都是存储在MemtableImmutable MemtableSSTable中的Immutable Memtable从结构上讲和Memtable是完全一样的区别仅仅在于其是只读的不允许写入操作Memtable则是允许写入和读取的Memtable写入的数据占用内存到达指定数量则自动转换为ImmutableMemtable等待Dump到磁盘中系统会自动生成新的Memtable供写操作写入新数据理解了Memtable那么Immutable Memtable自然不在话下

        LevelDbMemTable提供了将KV数据写入删除以及读取KV记录的操作接口但是事实上Memtable并不存在真正的删除操作,删除某个KeyValueMemtable内是作为插入一条记录实施的但是会打上一个Key的删除标记真正的删除操作是Lazy会在以后的Compaction过程中去掉这个KV

        需要注意的是LevelDbMemtableKV对是根据Key大小有序存储的在系统插入新的KVLevelDb要把这个KV插到合适的位置上以保持这种Key有序性其实LevelDbMemtable类只是一个接口类真正的操作是通过背后的SkipList来做的包括插入操作和读取操作等所以Memtable的核心数据结构是一个SkipList

        SkipList是由WilliamPugh发明他在Communicationsof the ACM June 1990, 33(6) 668-676 发表了Skiplists: a probabilistic alternative to balanced trees在该论文中详细解释了SkipList的数据结构和插入删除操作SkipList是平衡树的一种替代数据结构但是和红黑树不相同的是SkipList对于树的平衡的实现是基于一种随机化的算法的这样也就是说SkipList的插入和删除的工作是比较简单的

        关于SkipList的详细介绍可以参考这篇文章http://www.cnblogs.com/xuqiang/archive/2011/05/22/2053516.html讲述的很清楚LevelDbSkipList基本上是一个具体实现并无特殊之处SkipList不仅是维护有序数据的一个简单实现而且相比较平衡树来说在插入数据的时候可以避免频繁的树节点调整操作所以写入效率是很高的LevelDb整体而言是个高写入系统SkipList在其中应该也起到了很重要的作用Redis为了加快插入操作也使用了SkipList来作为内部实现数据结构

备注:本文转载自朗格科技:http://www.samecity.com/blog/Article.asp?ItemID=108

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值