2014年7月3日

LevelDB源码分析--Cache及Get查找流程

摘要: 本打算接下来分析version相关的概念,但是在准备的过程中看到了VersionSet的table_cache_这个变量才想起还有这样一个模块尚未分析,经过权衡觉得leveldb的version相对Cache来说相对复杂,而且version虽然对整个leveldb来说实现上跟其他功能十分紧密,但是从... 阅读全文

posted @ 2014-07-03 19:21 tgates 阅读(1541) 评论(0) 推荐(0) 编辑

2014年7月1日

mark一下

摘要: 这两天一直在整理leveldb相关的流程来发到博客中,一直没有写东西的习惯觉得理解即可。但是经过这几天的整理甚至有很多都是借鉴了其他blog的东西,而且基本都是通过代码注释的方式进行的,但是发现你去写一些这个东西相关的文字的时候你才会发现你对这个东西的理解离真正的透切还有一段的距离。通过写的这个... 阅读全文

posted @ 2014-07-01 22:18 tgates 阅读(333) 评论(0) 推荐(0) 编辑

leveldb源码分析--SSTable之Compaction

摘要: 对于compaction是leveldb中体量最大的一部分,也应该是最为复杂的部分,为了便于理解我们首先从一些基本的概念开始。下面是一些从doc/impl.html中翻译和整理的内容:Level 0当日志文件超过一定大小的阈值是 (默认为 1MB):建立一个新的memtable和日志文件,以后的操作... 阅读全文

posted @ 2014-07-01 21:59 tgates 阅读(8998) 评论(0) 推荐(1) 编辑

2014年6月30日

leveldb源码分析--BloomFilter

摘要: bloomfilter是leveldb中的一大性能利器,所以为了文章的表现完整性这里新启这么一篇文章。leveldb中的bloomfilter的实现在bloom.cc中,是一个较为简单的实现,所以就不再具体进行分析。本文列出两个参考地址:那些优雅的数据结构(1) : BloomFilter——大规模... 阅读全文

posted @ 2014-06-30 16:35 tgates 阅读(715) 评论(0) 推荐(0) 编辑

leveldb源码分析--SSTable之block

摘要: 在SSTable中主要存储数据的地方是data block,block_builder就是这个专门进行block的组织的地方,我们来详细看看其中的内容,其主要有Add,Finish和CurrentSizeEstimate三个函数。Finish的逻辑十分简单就是简单的将restart点信息和resta... 阅读全文

posted @ 2014-06-30 16:15 tgates 阅读(1368) 评论(0) 推荐(0) 编辑

leveldb源码分析--SSTable之TableBuilder

摘要: 上一篇文章讲述了SSTable的格式以后,本文结合源码解析SSTable是如何生成的。void TableBuilder::Add(const Slice& key, const Slice& value) {//如果已经插入过数据,那么要保证当前插入的key > 之前最后一次插入的key,// S... 阅读全文

posted @ 2014-06-30 15:54 tgates 阅读(1703) 评论(0) 推荐(0) 编辑

leveldb源码分析--SSTable之逻辑结构

摘要: SSTable是leveldb 的核心模块,这也是其称为leveldb的原因,leveldb正是通过将数据分为不同level的数据分为对应的不同的数据文件存储到磁盘之中的。为了理解其机制,我们首先看看SSTable中的基本概念。首先看看数据的整体存储结构:可以从图中看到了几个概念:Datablock... 阅读全文

posted @ 2014-06-30 15:45 tgates 阅读(2008) 评论(0) 推荐(0) 编辑

2014年6月29日

leveldb源码分析--日志

摘要: 我们知道在一个数据库系统中为了保证数据的可靠性,我们都会记录对系统的操作日志。日志的功能就是用来在系统down掉的时候对数据进行恢复,所以日志系统对一个要求可靠性的存储系统是极其重要的。接下来我们分析leveldb的日志,首先在leveldb源码目录中有doc/log_format.txt,这个文件... 阅读全文

posted @ 2014-06-29 20:59 tgates 阅读(2063) 评论(0) 推荐(0) 编辑

leveldb源码分析--Comparator

摘要: 既然leveldb是一个按Key序组织的LSM-Tree实现,那么对于Key的比较就是非常之重要了,这个Key的比较在leveldb中是Comparator的形式出现的。我们首先来看看Comparator的基本方法有哪些// 实际的比较函数 virtual int Compare(const ... 阅读全文

posted @ 2014-06-29 15:32 tgates 阅读(2881) 评论(0) 推荐(0) 编辑

leveldb源码分析--Memtable

摘要: 本节讲述内存中LevelDB的数据结构Memtable,Memtable义如其名即为内存中的KV Table,即LSM-Tree中的C0 Tree。我们知道在LSM-Tree中刚插入的的KV数据都是存储在内存中,当内存中存储的数据超过一定量以后再写到磁盘中。而对于leveldb来说这个过程演变为内存... 阅读全文

posted @ 2014-06-29 01:44 tgates 阅读(2082) 评论(0) 推荐(1) 编辑

导航