摘要:DBImpl::Recover 把数据库恢复到上次退出的状态,Recover的基本功能:如果存在表数据,则Load表数据,并对日志进行恢复,否则,根据flag创建新表或者返回错误 Recover的基本流程是:首先是处理创建flag,比如存在就返回失败等等;然后是尝试从已存在的sstable文件恢复d
阅读全文
摘要:一、作用 LevelDB如何能够知道每一层有哪些SST文件;如何快速的定位某条数据所在的SST文件;重启后又是如何恢复到之前的状态的,等等这些关键的问题都需要依赖元信息管理模块。对其维护的信息及所起的作用简要概括如下: 记录Compaction相关信息,使得Compaction过程能在需要的时候被触
阅读全文
摘要:一、原理分析 前文有述,对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找,代价很高。为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压缩,通过这种方式,来删除
阅读全文
摘要:SSTable是Bigtable中至关重要的一块,对于LevelDB来说也是如此,对LevelDB的SSTable实现细节的了解也有助于了解Bigtable中一些实现细节。 本节内容主要讲述SSTable的静态布局结构,SSTable文件形成了不同Level的层级结构,至于这个层级结构是如何形成的我
阅读全文
摘要:在看源代码之前, 先了解设计结构是必须的, 这就绕不开著名的LSM Tree了. 我在阅读了原作者论文和BigTable论文之后, 一开始最惊奇的是"伪代码"呢? 没有. 其实LSM Tree与其说是某种数据结构/算法, 倒不如说是一种设计思路, 用日志和批量写入来替代索引更新, 达到通过牺牲随机查
阅读全文
摘要:恢复内容开始 LevelDB虽然支持多线程, 但本质上并没有使用一些复杂到爆炸的数据结构来达成无锁多写多读, 而是坚持自然朴实的有锁单写多读. 那么是不是只有对时间线产生变动的操作(Put, Compaction etc.)才需要上锁? 不是的. 所有操作几乎都要在某一时间上锁来确保结果是线性的符合
阅读全文
摘要:0.导读 LevelPut的流程: Put操作首先将操作记录写入log文件,然后写入memtable,返回写成功。整体来看是这样,但是会引发下面的问题: 1. 写log的时候是实时刷到磁盘的吗? 2. 写入的时候memtable过大了咋办? 3. 同时多个线程并发写咋办? ...... 下面的分析中
阅读全文
摘要:(转载:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html) LevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住
阅读全文
摘要:一、LevelDB简介 LevelDB是Google开源的持久化KV单机数据库,具有很高的随机写,顺序读/写性能,但是随机读的性能很一般,也就是说,LevelDB很适合应用在查询较少,而写很多的场景。LevelDB应用了LSM (Log Structured Merge) 策略,lsm_tree对索
阅读全文