![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
leveldb系列
文章平均质量分 87
PenyChow
这个作者很懒,什么都没留下…
展开
-
leveldb研究系列三——log文件系统
从这一章节我开始讲具体组件和源代码, 阅读源代码的工具很多,leveldb的源代码不算大加上测试代码不过一万五千多行,一个比较好的源代码阅读工具是source insight。 不过要把文件名后缀.cc改成.cpp 建好一个项目 开始我们的征程。 首先我们讲log文件,write的第一站,也是系统容灾的常见方法。log文件结构很简单,write依次将按照log的format格式化写入原创 2014-03-15 16:08:15 · 1399 阅读 · 0 评论 -
leveldb研究系列四——memtable组件
在系列二我们给出leveldb读写时序,在写时候,write先写磁盘log,然后在内存插入到memtable,然后就返回。 作为leveldb的核心组件memtable是我们本篇所要给大家讲述的。首先 class memtable是对skiplist进行了封装,核心数据结构就是skiplist.我们先讲skiplistskiplist是一种随机化的数据结构,目前开源软件 Redis原创 2014-03-17 15:16:05 · 1473 阅读 · 1 评论 -
leveldb研究系列五——Ssttable组件
Sstable 是leveldb数据库的数据库文件,是leveldb也包括Bigtable的核心组件。解析Ssttbale可以从它的物理结构和逻辑结构两个部分出发,首先我们先谈谈物理结构。 Ssttable被划分为固定大小的物理块对于每个Block, 物理上包含三部分,Block data 数据块,1byte的type字段用来指明数据是否压缩,压缩算法采用google自行设计的sn原创 2014-03-18 13:48:34 · 1465 阅读 · 0 评论 -
leveldb研究系列八——Ssttable文件的compaction和LRUcache
第二篇的时候我们讲到Ssttbale是通过inmutable memtable不断导出至磁盘一开始是ssttable 0,而后向下归并,一层又一层形成了ssttable,所以形象地称之为leveldb. Ssttable文件里面的数据都是key有序的,Ssttbale 文件相互指间没有区间重叠,但是这里有一个特殊,就是Sstable 0,Ssttable0 的区间可能和其他Ssttable的区间有原创 2014-03-20 16:40:55 · 1033 阅读 · 0 评论 -
leveldb研究系列二——各个组件和读写时序介绍
在学习leveldb的过程中,我走了很多弯路,比如在对整体了解不足的情况下就开始阅读源代码,这其实是不可取的,所以我希望大家在学习leveldb的时候要对整体有个大致的了解,这样就可以加快整个学习过程,leveldb涉及很多数据结构的知识( skiplist, bloom filter, 多路归并排序,还有一个LRUcache,hash,等等) 还有一点点令人棘手底层的问题,多线程,并发控制,原原创 2014-03-15 11:55:34 · 2826 阅读 · 0 评论 -
leveldb研究系列六——Block的组件构建和读取
上一节我们已经详细表述了Ssttbale的组成,从逻辑结构和物理结构出发做了了解。 那么我们在这里怎么创建一个Ssttable呢,时序肯定是这样的:对于一个 我们先构建他的逻辑结构, 先是构建Block数据部分,然后再是填写meta Block和索引部分 ,等到这些逻辑部分填充完毕我们在将他们写入磁盘Block(根据type启用压缩)关键的便是Block数据的填充,即record的写入。原创 2014-03-19 18:04:59 · 1255 阅读 · 0 评论 -
leveldb研究系列一 .leveldb的简单介绍和简单使用
前些日子闲来无聊,花了一段时间研究了一下leveldb,在网上下了源代码结合网上的技术文档和博客,做了细致的学习,这几天打算想整理成系列博客,以便大家参考和指正,这样是我本人第一次写技术博客,不足之处还望指正。 本系列博文,将对 leveldb做全局介绍,从安装使用,适用场景, 关键算法, 代码实现,关键数据结构,等等做一个全面深入的探讨和学习。 我一直相信学习是个迭代的原创 2014-03-13 16:21:31 · 4035 阅读 · 1 评论 -
leveldb研究系列七——FilterPolicy
FilterPolicy是用于key过滤的,可以快速的排除不存在的key。FilterPolicy有3个接口:virtual const char* Name() const = 0; // 返回filter的名字CreateFilter接口,它根据指定的参数创建过滤器,并将结果append到dst中,注意:不能修改dst的原始内容,只做append。参数@keys[0,n-1]包原创 2014-03-19 23:14:41 · 1279 阅读 · 0 评论