leveldb源码分析

1. leveldb内存table的数据结构基础是skip-list:

1.1. skip-list和红黑树通常用作存储引擎的内存索引数据结构。

(1)skip-list相比于红黑树实现简单,在很多场景下都可以达到与红黑树相当的检索效率。

(2)skip-list对于高并发场景更加有优势,因为红黑树的无锁版本实现很复杂,而skip-list很容易通过CAS原理实现无锁。

(3)加锁的情况下,skip-list的锁范围可以更小,红黑树由于插入操作过程中的reblance过程可能会锁住更大的范围。

(4)skip-list只需要处理多个写线程之间的同步,对于1写多读的情况无需进行额外的同步处理,因为读要么读到的是写之后的结果,要么读到的是写之前的结果。而红黑树对于1写多读的情况仍然需要进行同步处理,因为reblance过程会导致读有可能读到写的中间数据。


1.2. leveldb通过memory barrier的方法实现了节点向后指针的原子操作,读无需额外同步,写是通过加锁的方式实现的同步,而没有采用效率更高的lock free skip-list。而redis由于是单进程单线程模型,所以不涉及skip-list的线程间同步的问题。


2. leveldb使用了bloom filter用作cache检查:

2.1. bloom filter通过bitmap作为基础在内存中做key是否存在的检查,可以大大节省内存空间。

2.2. bloom filter检查不存在则一定不存在,bloom filter检查存在则有小概率的不存在的可能性。


3. leveldb的读流程:

3.1. 先读memtable,再度immutable,最后读sstable set。


4. 大小端对齐:

4.1. leveldb中整型转字符数组使用的是大端对齐。

4.2. 大小端对齐的优缺点:




  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值