Leveldb源码分析--22

14 DB的查询与遍历之214.4 DBIterLeveldb数据库的MemTable和sstable文件的存储格式都是(user key, seq, type) => uservalue。DBIter把同一个userkey在DB中的多条记录合并为一条,综合考虑了userkey的序号、删除标...

2013-11-26 18:01:53

阅读数 10860

评论数 7

Leveldb源码分析--21

最近工作上事情太多,更新的也比较慢了。14 DB的查询与遍历分析完如何打开和关闭db,本章就继续分析如何从db中根据key查询value,以及遍历整个db。14.1 Get()函数声明:StatusGet(const ReadOptions& options, const Slice&am...

2013-09-05 13:22:58

阅读数 9429

评论数 7

Leveldb源码分析--20

12 DB的打开先分析LevelDB是如何打开db的,万物始于创建。在打开流程中有几个辅助函数:DBImpl(),DBImpl::Recover, DBImpl::DeleteObsoleteFiles, DBImpl::RecoverLogFile, DBImpl::MaybeScheduleC...

2013-07-12 15:03:32

阅读数 10096

评论数 2

Leveldb源码分析--19

11 VersionSet分析之211.4 LogAndApply()函数声明:Status LogAndApply(VersionEdit*edit, port::Mutex* mu)前面接口小节中讲过其功能:在currentversion上应用指定的VersionEdit,生成新的MANIFE...

2013-06-03 11:11:09

阅读数 7725

评论数 0

Leveldb源码分析--18

11 VersionSet分析之1Version之后就是VersionSet,它并不是Version的简单集合,还肩负了不少的处理逻辑。这里的分析不涉及到compaction相关的部分,这部分会单独分析。包括log等各种编号计数器,compaction点的管理等等。11.1 VersionSet接...

2013-06-03 10:52:20

阅读数 8308

评论数 0

Leveldb源码分析--17

10 Version分析之210.5 Version::UpdateStats()当Get操作直接搜寻memtable没有命中时,就需要调用Version::Get()函数从磁盘load数据文件并查找。如果此次Get不止seek了一个文件,就记录第一个文件到stat并返回。其后leveldb就会调...

2013-05-11 20:27:41

阅读数 8401

评论数 6

Leveldb源码分析--16

10 Version分析之1先来分析leveldb对单版本的sstable文件管理,主要集中在Version类中。前面的10.4节已经说明了Version类的功能和成员,这里分析其函数接口和代码实现。Version不会修改其管理的sstable文件,只有读取操作。10.1 Version接口先来看...

2013-04-19 13:46:21

阅读数 8716

评论数 0

Leveldb源码分析--15

9 LevelDB框架之29.4 版本控制当执行一次compaction后,Leveldb将在当前版本基础上创建一个新版本,当前版本就变成了历史版本。还有,如果你创建了一个Iterator,那么该Iterator所依附的版本将不会被leveldb删除。在leveldb中,Version就代表了一个...

2013-04-15 09:29:38

阅读数 12795

评论数 0

Leveldb源码分析--14

9 LevelDB框架之1到此为止,基本上Leveldb的主要功能组件都已经分析完了,下面就是把它们组合在一起,形成一个高性能的k/v存储系统。这就是leveldb::DB类。这里先看一下LevelDB的导出接口和涉及的类,后面将依次以接口分析的方式展开。而实际上leveldb::DB只是一个接口...

2013-04-10 17:55:44

阅读数 10604

评论数 0

Leveldb源码分析--13

8 FilterPolicy&Bloom之28.5 构建FilterBlock8.5.1 FilterBlockBuilder了解了filter机制,现在来看看filter block的构建,这就是类FilterBlockBuilder。它为指定的table构建所有的filter,结果是一...

2013-04-05 14:12:18

阅读数 7473

评论数 1

Leveldb源码分析--12

8 FilterPolicy&Bloom之18.1 FilterPolicy因名知意,FilterPolicy是用于key过滤的,可以快速的排除不存在的key。前面介绍Table的时候,在Table::InternalGet函数中有过一面之缘。FilterPolicy有3个接口:virtu...

2013-04-01 12:53:18

阅读数 8922

评论数 2

Leveldb源码分析--11

7 TableCache这章的内容比较简单,篇幅也不长。7.1 TableCache简介TableCache缓存的是Table对象,每个DB一个,它内部使用一个LRUCache缓存所有的table对象,实际上其内容是文件编号{file number, TableAndFile*}。TableAnd...

2013-03-30 18:50:33

阅读数 7324

评论数 0

Leveldb源码分析--10

6 SSTable之46.6 遍历Table6.6.1 遍历接口Table导出了一个返回Iterator的接口,通过Iterator对象,调用者就可以遍历Table的内容,它简单的返回了一个TwoLevelIterator对象。见函数实现:Iterator* NewIterator(const R...

2013-03-23 09:28:33

阅读数 7772

评论数 0

Leveldb源码分析--9

6 SSTable之3 6.5 读取sstable文件 6.5.1 类层次 Sstable文件的读取逻辑在类Table中,其中涉及到的类还是比较多的,如图6.5-1所示。 图6.5-1 Table类导出的函数只有3个,先从这三个导出函数开始分析。其中涉...

2013-03-16 18:21:44

阅读数 8171

评论数 0

Leveldb源码分析--8

6 SSTable之2 6.4 创建sstable文件 了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了。相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中...

2013-03-09 11:48:36

阅读数 8865

评论数 2

Leveldb源码分析--7

6 SSTable之1 SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模块。 6.1 SSTable的文件组织 作者在文档doc/table_format.txt中描述了表的逻辑结构,如图6.1-1所示。逻辑上可分为两大块,数据存储区D...

2013-03-06 22:14:52

阅读数 12164

评论数 4

Leveldb源码分析--6

5 操作Log 2   5.3 读日志 日志读取显然比写入要复杂,要检查checksum,检查是否有损坏等等,处理各种错误。 5.3.1 类层次 先来看看读取涉及到的类图,如图5.3-1。 Reader主要用到了两个接口,一个是汇报错误的Reporter,另一个...

2013-03-01 22:38:22

阅读数 9747

评论数 2

Leveldb源码分析--5

5 操作Log 1 分析完KV在内存中的存储,接下来就是操作日志。所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable。这样做有两个有点:1可以将随机的写IO变成append,极大的提高写磁盘速度;2防止在节点down机导致内存数据丢失,造成数据丢失,这对系...

2013-02-28 20:56:04

阅读数 10270

评论数 3

Leveldb源码分析--4

4 Memtable之24.6 Comparator弄清楚了key,接下来就要看看key的使用了,先从Comparator开始分析。首先Comparator是一个抽象类,导出了几个接口。其中Name()和Compare()接口都很明了,另外的两个Find xxx接口都有什么功能呢,直接看程序注释:...

2013-02-23 00:24:12

阅读数 12386

评论数 7

Leveldb源码分析--3

4 Memtable之1 Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数据在Memtable中是如何组织的,秘密在Skip list中。 4.1 用途 在Leveldb中,所有内存中的KV数据都存储在Memtable中,物理disk...

2013-02-23 00:06:07

阅读数 16859

评论数 9

提示
确定要删除当前文章?
取消 删除
关闭
关闭