随笔分类 - leveldb

source reading
tair源码分析——leveldb新增的CompactRangeSelfLevel过程
摘要:tair是一个分布式KV存储引擎,当新增机器或者有机器down掉的时候,tair的dataserver会根据ConfigServer生成的新的对照表进行数据的迁移和清理。在数据清理的过程中就用到了在tair中新增的Compaction方式——CompactRangeSelfLevel,顾名思义,这个... 阅读全文

posted @ 2014-08-03 11:02 tgates 阅读(1092) 评论(0) 推荐(0) 编辑

leveldb源码分析—Recover和Repair
摘要:leveldb作为一个KV存储引擎将数据持久化到磁盘,而对于一个存储引擎来说在存储过程中因为一些其他原因导致程序down掉甚至数据文件被破坏等都会导致程序不能按正常流程再次启动。那么遇到这些状况以后如何使程序最大程度的恢复数据就是非常重要的一项工作,leveldb也提供了这方面的工作。首先来看rec... 阅读全文

posted @ 2014-07-29 15:14 tgates 阅读(2218) 评论(0) 推荐(0) 编辑

tair源码分析——leveldb存储引擎使用
摘要:分析完leveldb以后,接下来的时间准备队tair的源码进行阅读和分析。我们刚刚分析完了leveldb而在tair中leveldb是其几大存储引擎之一,所以我们这里首先从tair对leveldb的使用和修改来窥探在这个分布式的存储引擎中是如何将area和bucket持久化到存储,并且方便bucke... 阅读全文

posted @ 2014-07-27 17:03 tgates 阅读(1735) 评论(0) 推荐(0) 编辑

LevelDB源码分析--使用Iterator简化代码设计
摘要:我们先来参考来至使用Iterator简化代码2-TwoLevelIterator的例子,略微修改希望能帮助更加容易立即,如果有不理解请各位看客阅读原文。下面我们再来看一个例子,我们为一个书店写程序,书店里有许多书Book,每个书架(BookShelf)上有多本书。类结构如下所示class Book ... 阅读全文

posted @ 2014-07-03 20:01 tgates 阅读(1364) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

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

posted @ 2014-06-30 16:15 tgates 阅读(1165) 评论(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 阅读(1368) 评论(0) 推荐(0) 编辑

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

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

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

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

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

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

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

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

leveldb源码分析--WriteBatch
摘要:从【leveldb源码分析--插入删除流程】和WriteBatch其名我们就很轻易的知道,这个是leveldb内部的一个批量写的结构,在leveldb为了提高插入和删除的效率,在其插入过程中都采用了批量集合相邻的多个具有相同同步设置的写请求以批量的方式进行写入。其成员变量仅包含了一个 std::st... 阅读全文

posted @ 2014-06-28 18:41 tgates 阅读(2059) 评论(0) 推荐(0) 编辑

leveldb源码分析--Key结构
摘要:【注】本文参考了sparkliang的专栏的Leveldb源码分析--3并进行了一定的重组和排版经过上一篇文章的分析我们队leveldb的插入流程有了一定的认识,而该文设计最多的又是Batch的概念。这篇文章本来应该顺理成章的介绍Batch相关流程和结构了,但是Batch涉及到了一些编码和Key相关... 阅读全文

posted @ 2014-06-28 16:24 tgates 阅读(976) 评论(0) 推荐(0) 编辑

leveldb源码分析--插入删除流程
摘要:由于网络上对leveldb的分析文章都比较丰富,一些基础概念和模型都介绍得比较多,所以本人就不再对这些概念以专门的篇幅进行介绍,本文主要以代码流程注释的方式。首先我们从db的插入和删除开始以对整个体系有一个感性的认识,首先看插入:Status DB::Put(const WriteOptions& ... 阅读全文

posted @ 2014-06-28 15:11 tgates 阅读(2567) 评论(0) 推荐(0) 编辑

【转】数据分析与处理之二(Leveldb 实现原理)
摘要:郑重声明:本篇博客是自己学习 Leveldb 实现原理时参考了郎格科技系列博客整理的,原文地址:http://www.samecity.com/blog/Index.asp?SortID=12,只是为了加深印象,本文的配图是自己重新绘制的,大部分内容与原文相似,大家可以浏览原始页面 :-),感兴趣的... 阅读全文

posted @ 2014-06-28 12:24 tgates 阅读(748) 评论(0) 推荐(0) 编辑

leveldb开篇
摘要:因为工作的需求,最近看了一些项目的源码,包括nginx、tair、leveldb,一直看了下来都没有写东西的习惯,虽然作了不少记录,但都是只有自己才能看懂的笔记。 好多次都说开始写blog,锻炼一下自己的写作能力,在此mark决定以后坚持写。每周至少一篇文章,即使不是完全自主版权也得改改贴贴,... 阅读全文

posted @ 2014-06-27 10:04 tgates 阅读(921) 评论(0) 推荐(0) 编辑

导航