07 2014 档案

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

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

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

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

leveldb源码分析--Iterator遍历数据库
摘要:在DBImpl中有一个函数声明为Iterator* DBImpl::NewIterator(const ReadOptions& options) ,他返回一个可以遍历或者搜索数据库的迭代器句柄。 Iterator* DBImpl::NewIterator(const ReadOptions& options) { SequenceNumber latest_snapshot; uin... 阅读全文

posted @ 2014-07-05 23:07 tgates 阅读(4690) 评论(0) 推荐(0)

mmap 与 read/write
摘要:mmap与read/write两条路线对文件的访问比较 我们知道无论是通过mmap或read/write访问文件在内核中都必须经过缓存, 当需要从文件读写内容时,都经过内存拷贝的方式与内核中的缓存进行通讯。 1. 用read/write方式,用户须向内核指定要读多少,内核再把得到的内容从内核缓存拷向用户空间;写也须要有一个大致如此的过程。 2. mmap的作用是通过把文件的某... 阅读全文

posted @ 2014-07-03 20:26 tgates 阅读(658) 评论(0) 推荐(0)

linux 同步IO: sync msync、fsync、fdatasync与 fflush
摘要:最近阅读leveldb源码,作为一个保证可靠性的kv数据库其数据与磁盘的交互可谓是极其关键,其中涉及到了不少内存和磁盘同步的操作和策略。为了加深理解,从网上整理了linux池畔同步IO相关的函数,这里做一个罗列和对比。大部分为copy,仅为记录,请各位看官勿喷。 传统的UNIX实现在内核中设有缓冲区高速缓存或页面高速缓存,大多数磁盘I/O都通过缓冲进行。当将数据写入文件时,内核通常先将该数据复制到... 阅读全文

posted @ 2014-07-03 20:22 tgates 阅读(4998) 评论(0) 推荐(1)

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

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

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

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

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

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

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

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

导航