在学习leveldb的过程中,我走了很多弯路,比如在对整体了解不足的情况下就开始阅读源代码,这其实是不可取的,所以我希望大家在学习leveldb的时候要对整体有个大致的了解,这样就可以加快整个学习过程,leveldb涉及很多数据结构的知识( skiplist, bloom filter, 多路归并排序,还有一个LRUcache,hash,等等) 还有一点点令人棘手底层的问题,多线程,并发控制,原子操作,内存屏障,(memory barrier,想想关键字volitale)编码约定(大小端)。
总而言之,希望大家先有相关准备再去看源代码,让我先给大家介绍leveldb的组件和读写时序:
1.首先 我们要牢记,leveldb的是一个用来提高写性能的,内存小巧可控的KV数据库(可控的原因是在于后面讲到cache可以配置,可选), 采用一系列的方式保证写性能 先上图 给个写时序
write 操作很简单,写入磁盘log (顺序写入数据),在memtable 插入<key,value> ,memtalbe主要依靠skiplist实现数据挂载,skiplist是一种类似于自平衡二叉树的数据结构,不过相对而言具有更好的写性能(调整节点少) 在后续章节我会详细讲解此数据结构。 到这里为止, write操作已经结束,也就是说write操作包括一次顺序磁盘顺序写