4 Memtable之1
Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数据在Memtable中是如何组织的,秘密在Skip list中。
4.1 用途
在Leveldb中,所有内存中的KV数据都存储在Memtable中,物理disk则存储在SSTable中。在系统运行过程中,如果Memtable中的数据占用内存到达指定值(Options.write_buffer_size),则Leveldb就自动将Memtable转换为Memtable,并自动生成新的Memtable,也就是Copy-On-Write机制了。
Immutable Memtable则被新的线程Dump到磁盘中,Dump结束则该Immutable Memtable就可以释放了。因名知意,Immutable Memtable是只读的。
所以可见,最新的数据都是存储在Memtable中的,Immutable Memtable和物理SSTable则是某个时点的数据。
为了防止系统down机导致内存数据Memtable或者Immutable Memtable丢失,leveldb自然也依赖于log机制来保证可靠性了。
Memtable提供了写入KV记录,删除以及读取KV记录的接口,但是事实上Memtable并不执行真正的删除操作,删除某个Key的Value在Memtable内是作为插入一条记录实施的,但是会打上一个Key的删除标记,真正的删除操作在后面的 Compaction过程中,lazy delete。

本文深入剖析Leveldb的Memtable,它是内存中KV数据的存储结构,核心是Skip List。当内存达到一定阈值时,Memtable会转为Immutable并写入磁盘。Memtable提供Add、Get接口,不直接执行删除,而是通过标记。文章详细介绍了Memtable的用途、接口、Skip List以及Key结构,包括InternalKey、ParsedInternalKey、User Key、LookupKey和Memtable Key。
最低0.47元/天 解锁文章
1547





