摘要:
【LevelDB Version】 Version保存了当前磁盘以及内存中所有的文件信息,一般只有一个Version叫做"current" version(当前版本)。Leveldb还保存了一系列的历史版本,这些历史版本有什么作用呢? 当一个Iterator创建后,Iterator就引用到了... 阅读全文
posted @ 2015-10-14 21:44
Tekkaman
阅读(562)
评论(0)
推荐(0)
摘要:
【LevelDB Cache机制】 对于levelDb来说,读取操作如果没有在内存的memtable中找到记录,要多次进行磁盘访问操作。假设最优情况,即第一次就在level 0中最新的文件中找到了这个key,那么也需要读取2次磁盘,一次是将SSTable的文件中的index部分读入内存,这样根据这... 阅读全文
posted @ 2015-10-14 21:40
Tekkaman
阅读(985)
评论(0)
推荐(0)
摘要:
【LevelDB Compaction操作】 对于LevelDb来说,写入记录操作很简单,删除记录仅仅写入一个删除标记就算完事,但是读取记录比较复杂,需要在内存以及各个层级文件中依照新鲜程度依次查找,代价很高。为了加快读取速度,levelDb采取了compaction的方式来对已有的记录进行整理压... 阅读全文
posted @ 2015-10-14 21:10
Tekkaman
阅读(2253)
评论(0)
推荐(0)
摘要:
【LevelDB 读取记录】 LevelDb是针对大规模Key/Value数据的单机存储库,从应用的角度来看,LevelDb就是一个存储工具。而作为称职的存储工具,常见的调用接口无非是新增KV,删除KV,读取KV,更新Key对应的Value值这么几种操作。LevelDb的接口没有直接支持更新操作的... 阅读全文
posted @ 2015-10-14 16:35
Tekkaman
阅读(4301)
评论(0)
推荐(0)
摘要:
【LevelDB 写入与删除记录】 levelDb的记录更新操作,即插入一条KV记录或者删除一条KV记录。levelDb的更新操作速度是非常快的,源于其内部机制决定了这种更新操作的简单性。 图6.1是levelDb如何更新KV数据的示意图,从图中可以看出,对于一个插入操作Put(Key,Va... 阅读全文
posted @ 2015-10-14 16:08
Tekkaman
阅读(1358)
评论(0)
推荐(0)
摘要:
【SkipList】1、插入操作。 由于跳表数据结构整体上是有序的,所以在插入时,需要首先查找到合适的位置,然后就是修改指针(和链表中操作类似),然后更新跳表的level变量。 boolean insert(l,key,value) register list l; regis... 阅读全文
posted @ 2015-10-14 15:27
Tekkaman
阅读(244)
评论(0)
推荐(0)
摘要:
【LevelDb日知录之五:MemTable详解】 LevelDb日知录前述小节大致讲述了磁盘文件相关的重要静态结构,本小节讲述内存中的数据结构Memtable,Memtable在整个体系中的重要地位也不言而喻。总体而言,所有KV数据都是存储在Memtable,Immutable Memtable... 阅读全文
posted @ 2015-10-14 15:10
Tekkaman
阅读(574)
评论(0)
推荐(0)
摘要:
【LevelDB SSTable文件】 LevelDb不同层级有很多SSTable文件(以后缀.sst为特征),所有.sst文件内部布局都是一样的。上节介绍Log文件是物理分块的,SSTable也一样会将文件划分为固定大小的物理存储块,但是两者逻辑布局大不相同,根本原因是:Log文件中的记录是Ke... 阅读全文
posted @ 2015-10-14 12:18
Tekkaman
阅读(1040)
评论(0)
推荐(0)
摘要:
【LevelDB Log文件】 log文件在LevelDb中的主要作用是系统故障恢复时,能够保证不会丢失数据。因为在将记录写入内存的Memtable之前,会先写入Log文件,这样即使系统发生故障,Memtable中的数据没有来得及Dump到磁盘的SSTable文件,LevelDB也可以根据log文... 阅读全文
posted @ 2015-10-14 11:47
Tekkaman
阅读(599)
评论(0)
推荐(0)
浙公网安备 33010602011771号