leveldb
文章平均质量分 80
池塘的蜗牛
这个作者很懒,什么都没留下…
展开
-
leveldb 之 锁的封装
多线程程序中经常会用到加锁,但是程序中各种return 很可能导致锁未被释放,所通常的做法是将锁进行相应的封装以方便使用。封装方法和使用方法也都差不多,所以也就不再赘述,我们直接看下leveldb中的封装形式就行了。//lock.h#ifndef GROUG_COMPUTE_LOCK_H#define GROUG_COMPUTE_LOCK_H#include#include原创 2016-03-05 22:06:58 · 702 阅读 · 0 评论 -
leveldb 之内存池
整个类的成员函数,变量如下所示class Arena { public: Arena(); ~Arena(); char* Allocate(size_t bytes); //该函数分配的内存没有考虑内存字节对齐 char* AllocateAligned(size_t bytes); //考虑到字节对齐的内存分配 size_t MemoryUsage() const原创 2016-03-06 22:09:11 · 396 阅读 · 0 评论 -
leveldb 之cache实现
参开:http://mingxinglai.com/cn/2013/01/leveldb-cache/leveldb 中cache的实现大家可以参考cache.h以及cache.cc。 具体的结构如下图所示Cache为一个虚基类,SharedLRUCache为其具体实现,其中包含了了最重要结构LRUCache。其中包含16个LRUCache每个LRUCache包含两个重要的数据结构原创 2016-03-12 16:29:40 · 496 阅读 · 0 评论 -
leveldb 值memtable
参考 1,http://mingxinglai.com/cn/2013/01/leveldb-memtable参考 2,http://www.aikaiyuan.com/4591.html具体结构如下图所示:其主要的结构就是一个SkipList,list中没有将key和value区分开而是全部当成一个key,在从其中解析出相应的key与value。上图中有这么三个key:Loo原创 2016-03-13 14:35:04 · 367 阅读 · 1 评论 -
leveldb 之log
参考:http://blog.csdn.net/tankles/article/details/7663873leveldb中log的作用主要用于数据恢复即在metatbale中的数据还没来及flush进sstable文件中时,该部分文件存在于log文件中所以重启时进行数据恢复。log文件的主要结构如下所示。LevelDb对于一个log文件,会把它切割成以32K为单位的物理Block,每次原创 2016-03-13 23:13:20 · 450 阅读 · 0 评论 -
leveldb之write
leveldb 不论写入还是删除都会调用该部分程序。该部分程序的看似短小但是思想确实结尾经典。下面我们来分析下这块代码。一般来说对于多线程我们都会通过锁机制来实现写入数据的正确性,但是每次都进行独占锁开销是很大的。下面的这块代码真的是颠覆了我的认识。Status DBImpl::Write(const WriteOptions& options, WriteBatch* my_batch)原创 2016-04-10 20:15:34 · 518 阅读 · 0 评论