
levelDB
huangyimo
这个作者很懒,什么都没留下…
展开
-
跳表
为什么选择跳表目前经常使用的平衡数据结构有:B树,红黑树,AVL树,Splay Tree, Treep等。 想象一下,给你一张草稿纸,一只笔,一个编辑器,你能立即实现一颗红黑树,或者AVL树出来吗? 很难吧,这需要时间,要考虑很多细节,要参考一堆算法与数据结构之类的树,还要参考网上的代码,相当麻烦。 用跳表吧,跳表是一种随机化的数据结构,目前转载 2015-11-11 23:18:55 · 456 阅读 · 0 评论 -
leveldb接口概览
接下来将介绍leveldb头文件中的接口.leveldb在源文件中提供了文档,只不过文档描述的很简略,而同时,其头文件的注释十分的详细,已经能完成称得上一份很好的文档了.所以就来看一下leveldb为我们提供了什么.leveldb为开源项目,可以在其主页leveldb下载.头文件结构解压下载的代码,可以查看其include中的头文件.include└── le转载 2016-12-05 10:52:05 · 2854 阅读 · 0 评论 -
leveldb注释7–key与value
作为一个kv的系统,key的存储至关重要。在leveldb中,主要涉及到如下几个key,user_key、InternalKey与LookupKey(memtable_key)。 其关系构成如下图。user_key就是用户输入的key,而InternalKey在user_key的基础上封装了sequence_num+type。sequence_num是一个全局递增的序列号,每一次Put操作都会转载 2016-12-05 10:56:29 · 1466 阅读 · 0 评论 -
LevelDB Compaction操作
【LevelDB Compaction操作】 对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找,代价很高。为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压缩,通过这种方式,来删除掉一些不再有效的KV数据,减小数据规模,减少文件数量等。转载 2016-11-23 11:12:21 · 672 阅读 · 0 评论 -
LevelDB详解
LevelDB 一、LevelDB入门LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。LevelDB应用了LSM (Log Structured Merge) 策略,lsm_tree对索引变更进行延迟及批量处理,并通过一种类似于归并排序的方转载 2016-11-23 13:50:44 · 229 阅读 · 0 评论 -
LevelDB:一个快速轻量级的key-value存储库(译)
作者:Jeff Dean, Sanjay Ghemawat原文:http://leveldb.googlecode.com/svn/trunk/doc/index.html译者:phylips@bmy 2011-8-16译文:http://duanple.blog.163.com/blog/static/70971767201171705113636/LevelDB转载 2016-12-09 15:58:16 · 794 阅读 · 0 评论 -
WriteBatch-levelDB源码解析
将key value数据按照一定格式,批量组装起来,并提供处理的接口。【数据成员介绍】rep_:格式如下图所示,sequence number:此次批量写入的开始序列号;count:代表这一批中有多少条记录,record:代表一条记录,第一个字节代表类型,是增加或修改一条记录,还是删除一条记录,紧接着就是key(用key的长度和key的内容分开表示),valu转载 2017-01-14 10:56:26 · 421 阅读 · 0 评论 -
leveldb实例
#include #include "db.h" #include "iterator.h" #include using namespace std; int main() { leveldb::DB* db; leveldb::Options options; options.create_if_转载 2017-01-14 11:02:39 · 557 阅读 · 0 评论 -
跳表SkipList
1.聊一聊跳表作者的其人其事2. 言归正传,跳表简介3. 跳表数据存储模型4. 跳表的代码实现分析5. 论文,代码下载及参考资料 . 聊一聊作者的其人其事 跳表是由William Pugh发明。他在 Communications of the ACM June 1990, 33(6) 668-676 发表了Skip lists: a probabilistic转载 2017-01-14 11:24:21 · 310 阅读 · 0 评论 -
leveldb学习:Memtable和Varint
Memtable:Memtable是leveldb数据在内存中的存储形式,写操作的数据都会先写到memtable中,memtable的size有限制最大值(write_buffer_size)。memtable的底层数据结构是skiplist,class memtable完成的只是key-value的打包和调用底层跳表的接口。 首先看看Memtable的成员变量://实转载 2017-01-14 16:20:50 · 158 阅读 · 0 评论 -
leveldb学习:DBimpl
leveldb将数据库的有关操作都定义在了DB类,它负责整个系统功能组件的连接和调用,是整个系统的脊柱。level::DB是一个接口类,真正的实现在DBimpl类。 作者在文档impl.html中描述了leveldb的实现,其中包括文件组织、compaction和recovery等等。DBimpl的成员变量包括:字符比较器internal_comparator_、配置类options_转载 2017-01-14 16:35:35 · 423 阅读 · 0 评论 -
option-levelDB源码解析
//控制数据库的行为struct Options{ //比较器 //默认:lexicographic byte-wise ordering const Comparator* comparator; //如果为true,当数据库不存在时,就新建 //默认:false bool creat转载 2017-01-16 20:11:55 · 362 阅读 · 0 评论 -
Leveldb源码分析--14
9 LevelDB框架之1到此为止,基本上Leveldb的主要功能组件都已经分析完了,下面就是把它们组合在一起,形成一个高性能的k/v存储系统。这就是leveldb::DB类。这里先看一下LevelDB的导出接口和涉及的类,后面将依次以接口分析的方式展开。而实际上leveldb::DB只是一个接口类,真正的实现和框架类是DBImpl这个类,正是它集合了上面的各种组件。此外,还有转载 2017-01-17 19:08:30 · 334 阅读 · 0 评论 -
Leveldb源码分析--15
9 LevelDB框架之29.4 版本控制当执行一次compaction后,Leveldb将在当前版本基础上创建一个新版本,当前版本就变成了历史版本。还有,如果你创建了一个Iterator,那么该Iterator所依附的版本将不会被leveldb删除。在leveldb中,Version就代表了一个版本,它包括当前磁盘及内存中的所有文件信息。在所有的version中,只有转载 2017-01-17 19:09:54 · 457 阅读 · 0 评论 -
Leveldb源码分析--16
10 Version分析之1先来分析leveldb对单版本的sstable文件管理,主要集中在Version类中。前面的10.4节已经说明了Version类的功能和成员,这里分析其函数接口和代码实现。Version不会修改其管理的sstable文件,只有读取操作。10.1 Version接口先来看看Version类的接口函数,接下来再一一分析。转载 2017-01-17 19:14:06 · 547 阅读 · 0 评论 -
leveldb研究5- Snapshot
所谓snapshot就是一个快照,我们可以从快照中读到旧的数据。先写一个测试程序来看看snapshot的使用:#include #include "leveldb/db.h"using namespace std;using namespace leveldb;int main() { DB *db ; Options op;转载 2016-12-05 10:31:21 · 769 阅读 · 0 评论 -
leveldb之cache
当向leveldb写入数据时,首先是将数据写入leveldb的Memtable(Memtable可能转化为IMMemtable)中,Memtable是存储在内存中的。只有经过compaction操作后,才会将内存中的数据写入到磁盘中的sstable中。 当要读数据时,首先在Memtable中查找,若没有找到,则在sstable中继续查找。而sstable是存储在磁盘中的,这样就需要进行多次磁盘转载 2016-11-15 17:20:57 · 563 阅读 · 0 评论 -
LevelDB:Cache源码精读——缓存
摘要: 一、原理分析: 这里讲的Cache缓存是指内存缓存,既然是内存缓存,因为内存有限,所以缓存肯定有一个容量大小capacity。 1、模拟实例化一个缓存时,LevelDB的Cache对象结构。 1.1、LevelDB可以创建一个容量大小capacity 的Cache, 1.2、Cach一、原理分析:这里讲的Cache缓存是指内存缓存,既然是内存缓存,因为内转载 2016-10-13 20:28:37 · 545 阅读 · 0 评论 -
Leveldb源码分析--2
3 Int Coding轻松一刻,前面约定中讲过Leveldb使用了很多VarInt型编码,典型的如后面将涉及到的各种key。其中的编码、解码函数分为VarInt和FixedInt两种。int32和int64操作都是类似的。3.1 Decode首先是FixedInt编码,直接上代码,很简单明了。void EncodeFixed32(char* buf, ui转载 2015-11-23 09:04:23 · 582 阅读 · 0 评论 -
Leveldb源码分析--1
【前言:看了一点oceanbase,没有意志力继续坚持下去了,暂时就此中断,基本上算把master看完了,比较重要的update server和merge server代码却没有细看。中间又陆续研究了hadoop的源码,主要是name node和写入pipeline。主要的目的是想看看name node对namespace的管理,以及hadoop在写入操作时,client、data nod转载 2015-11-23 09:03:06 · 609 阅读 · 0 评论 -
Leveldb源码分析--3
4 Memtable之1Memtable是leveldb很重要的一块,leveldb的核心之一。我们肯定关注KV数据在Memtable中是如何组织的,秘密在Skip list中。4.1 用途在Leveldb中,所有内存中的KV数据都存储在Memtable中,物理disk则存储在SSTable中。在系统运行过程中,如果Memtable中的数据占用内存到达指定值(O转载 2015-11-23 09:05:25 · 513 阅读 · 0 评论 -
Leveldb源码分析--4
4 Memtable之24.6 Comparator弄清楚了key,接下来就要看看key的使用了,先从Comparator开始分析。首先Comparator是一个抽象类,导出了几个接口。其中Name()和Compare()接口都很明了,另外的两个Find xxx接口都有什么功能呢,直接看程序注释:[cpp] view plaincopy转载 2015-11-23 09:06:17 · 609 阅读 · 0 评论 -
rtsp详解二之wireshark抓包分析
一、概述 RTSP(Real-Time Stream Protocol )是一种基于文本的应用层协议,在语法及一些消息参数等方面,RTSP协议与HTTP协议类似。 RTSP被用于建立的控制媒体流的传输,它为多媒体服务扮演“网络远程控制”的角色。RTSP本身并不用于传送媒体流数据。媒体数据的传送可通过RTP/RTCP等协议来完成。 基本的RTSP操作过程转载 2015-11-23 14:19:01 · 14521 阅读 · 0 评论 -
Leveldb源码分析--5
5 操作Log 1分析完KV在内存中的存储,接下来就是操作日志。所有的写操作都必须先成功的append到操作日志中,然后再更新内存memtable。这样做有两个有点:1可以将随机的写IO变成append,极大的提高写磁盘速度;2防止在节点down机导致内存数据丢失,造成数据丢失,这对系统来说是个灾难。在各种高效的存储系统中,这已经是口水技术了。5.1 格式在转载 2015-11-23 09:07:23 · 474 阅读 · 0 评论 -
Leveldb源码分析--10
6 SSTable之46.6 遍历Table6.6.1 遍历接口Table导出了一个返回Iterator的接口,通过Iterator对象,调用者就可以遍历Table的内容,它简单的返回了一个TwoLevelIterator对象。见函数实现:[cpp] view plaincopyIterator* NewItera转载 2015-11-26 20:29:58 · 451 阅读 · 0 评论 -
Leveldb源码分析--11
7 TableCache这章的内容比较简单,篇幅也不长。7.1 TableCache简介TableCache缓存的是Table对象,每个DB一个,它内部使用一个LRUCache缓存所有的table对象,实际上其内容是文件编号{file number, TableAndFile*}。TableAndFile是一个拥有2个变量的结构体:RandomAccessFile*转载 2015-11-26 20:31:40 · 513 阅读 · 0 评论 -
Leveldb源码分析--12
8 FilterPolicy&Bloom之18.1 FilterPolicy因名知意,FilterPolicy是用于key过滤的,可以快速的排除不存在的key。前面介绍Table的时候,在Table::InternalGet函数中有过一面之缘。FilterPolicy有3个接口:virtual const char* Name() const = 0; // 返回fil转载 2015-11-26 20:32:37 · 525 阅读 · 0 评论 -
Leveldb源码分析--13
8 FilterPolicy&Bloom之28.5 构建FilterBlock8.5.1 FilterBlockBuilder了解了filter机制,现在来看看filter block的构建,这就是类FilterBlockBuilder。它为指定的table构建所有的filter,结果是一个string字符串,并作为一个block存放在table中。转载 2015-11-26 20:33:41 · 468 阅读 · 1 评论 -
Leveldb源码分析--6
5 操作Log 2 5.3 读日志日志读取显然比写入要复杂,要检查checksum,检查是否有损坏等等,处理各种错误。5.3.1 类层次先来看看读取涉及到的类图,如图5.3-1。Reader主要用到了两个接口,一个是汇报错误的Reporter,另一个是log文件读取类SequentialFile。> Reporter的接口只有一个转载 2015-11-24 19:01:39 · 502 阅读 · 0 评论 -
Leveldb源码分析--7
6 SSTable之1SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模块。6.1 SSTable的文件组织作者在文档doc/table_format.txt中描述了表的逻辑结构,如图6.1-1所示。逻辑上可分为两大块,数据存储区Data Block,以及各种Meta信息。1)文件中的k/v对是有序存储的,并且被划分转载 2015-11-24 19:03:22 · 531 阅读 · 0 评论 -
Leveldb源码分析--8
6 SSTable之26.4 创建sstable文件了解了sstable文件的存储格式,以及Data Block的组织,下面就可以分析如何创建sstable文件了。相关代码在table_builder.h/.cc以及block_builder.h/.cc(构建Block)中。6.4.1 TableBuilder类构建sstable文件的类是T转载 2015-11-26 20:27:39 · 415 阅读 · 0 评论 -
Leveldb源码分析--9
6 SSTable之36.5 读取sstable文件6.5.1 类层次Sstable文件的读取逻辑在类Table中,其中涉及到的类还是比较多的,如图6.5-1所示。图6.5-1Table类导出的函数只有3个,先从这三个导出函数开始分析。其中涉及到的类(包括上图中为画出的)都会一一遇到,然后再一一拆解。本节分转载 2015-11-26 20:28:36 · 134 阅读 · 0 评论 -
Leveldb源码分析--17
6 SSTable之1SSTable是Leveldb的核心之一,是表数据最终在磁盘上的物理存储。也是体量比较大的模块。6.1 SSTable的文件组织作者在文档doc/table_format.txt中描述了表的逻辑结构,如图6.1-1所示。逻辑上可分为两大块,数据存储区Data Block,以及各种Meta信息。1)文件中的k/v对是有序存储的,并且被划分到连续排列的转载 2017-01-18 09:08:52 · 358 阅读 · 0 评论