leveldb
文章平均质量分 81
NB_vol_1
这个作者很懒,什么都没留下…
展开
-
leveldb代码阅读(1)——leveldb介绍以及使用
Leveldb是一个google实现的非常高效的kv数据库。LevelDb有如下一些特点: 首先,LevelDb是一个持久化存储的KV系统,和Redis这种内存型的KV系统不同,LevelDb不会像Redis一样狂吃内存,而是将大部分数据存储到磁盘上。 其次,LevleDb在存储数据时,是根据记录的key值有序存储的,就是说相邻的key值在存储文件中是依次顺序存储的,而应用原创 2016-01-13 23:38:23 · 1225 阅读 · 0 评论 -
leveldb代码阅读(17)——流程分析:写数据(详细版本)
原文地址:http://www.blogjava.net/sandy/archive/2012/03/21/leveldb10.html总体来说,leveldb的写操作有两个步骤,首先是针对log的append操作,然后是对memtable的插入操作。影响写性能的因素有:1. write_buffer_size2. kL0_SlowdownWritesTrigger and kL0转载 2016-01-15 15:25:55 · 1307 阅读 · 0 评论 -
leveldb代码阅读(16)——流程分析:打开数据库(详细版本)
原文地址:http://www.blogjava.net/sandy/archive/2012/03/20/leveldb9.htmlleveldb 是通过Open函数来打开/新建数据库。static Status Open(const Options& options, const std::string& name,转载 2016-01-15 15:23:47 · 1315 阅读 · 0 评论 -
leveldb代码阅读(15)——内存中的数据结构Memtable/SkipList
原文地址:http://www.blogjava.net/sandy/archive/2012/03/19/leveldb8.html我们知道,leveldb在写数据的时候,除了log文件,都要在内存中写一份。先看看SkipList【跳表】这个数据结构:SkipList有如下特点:1. 本质上一个排序好的链表2. 分层,上层节点比下层的少,更具有跳跃性3. 查询的复转载 2016-01-15 15:20:19 · 634 阅读 · 0 评论 -
leveldb代码阅读(14)——Level和Compaction
原文地址:http://www.blogjava.net/sandy/archive/2012/03/15/leveldb6.htmlleveldb之所以使用level作为数据库名称,精华就在于level的设计。本质是一种归并排序算法。这样设计的好处主要是可以减少compaction的次数和每次的文件个数。Compaction为什么要compaction转载 2016-01-15 15:18:36 · 841 阅读 · 0 评论 -
leveldb代码阅读(13)——数据文件的格式和生成
原文地址:http://www.blogjava.net/sandy/archive/2012/03/12/leveldb4.htmlleveldb使用SSTable格式来保存数据。格式为:(当前没有META BLOCK)SSTABLE = |DATA BLOCK1|DATA BLOCK2|...|DATA BLOCK N|META BLOCK1|...|META BLOCK N|转载 2016-01-15 15:15:50 · 1087 阅读 · 0 评论 -
leveldb代码阅读(12)——数据库日志文件格式
原文地址:http://www.blogjava.net/sandy/archive/2012/03/09/leveldb3.htmlleveldb在每次数据库操作之前都会把操作记录下来。主要实现在db\log_format.h,db\log_reader.h,db\log_reader.cc,db\log_write.h,db\log_write.cc中。我们来具体看看实现。日志格式转载 2016-01-15 15:06:52 · 993 阅读 · 0 评论 -
leveldb代码阅读(11)——levelDB生成的文件
1、内存table:存在于内存当中的数据表2、SSTable文件:数据库文件,由内存table生成3、LOCK:空文件,数据库锁,防止多进程访问4、LOG: 日志文件,就像我们通常所用的打印日志,记录的一些输出信息5、LOG.old:上一次的日志文件6、MANIFEST: 数据库状态文件,记录了SStable的最小/最大键值还有文件大小等等信息7、*.log: 数据库日志文原创 2016-01-15 15:04:27 · 852 阅读 · 0 评论 -
leveldb代码阅读(10)——levedb的Version、VersionSet、VersionEdit
原文地址:http://www.blogjava.net/sandy/archive/2012/03/16/leveldb7.htmlleveldb 使用 version 来保存数据库的状态。先看看一个重要的数据结果,sst file的META infostruct FileMetaData { int refs; //引用计数 int allowe转载 2016-01-15 11:20:39 · 1141 阅读 · 0 评论 -
leveldb代码阅读(9)——levedb的快照
原文地址:http://www.blogjava.net/sandy/archive/2012/03/13/leveldb5.html所谓snapshot就是一个快照,我们可以从快照中读到旧的数据。先写一个测试程序来看看snapshot的使用:#include iostream>#include "leveldb/db.h"using namespace转载 2016-01-15 11:05:39 · 1495 阅读 · 1 评论 -
leveldb代码阅读(8)——查询数据
1、DBImpl::Put 函数用于数据查询 2、流程如下: 3、首先在可读可写的内存table中查询,查询到就返回 4、在只读内存table中查询,查询到就返回 5、如果都没有找到,那么只能在硬盘中查询了,这是一个比较复杂的过程,通过Version::Get函数实现。 Version::原创 2016-01-15 10:56:15 · 1612 阅读 · 0 评论 -
leveldb代码阅读(7)——插入数据
1、DBImpl::Put 函数用于数据插入,内部调用的是DB::Put 2、DB::Put的流程如下: 3、创建一个批量写任务WriteBatch 4、把需要插入数据库的键值对插入到批量写任务中 5、调用Write函数写入 DBImpl::Write函数的流程: 1、创原创 2016-01-14 21:37:58 · 923 阅读 · 0 评论 -
leveldb代码阅读(6)——后台进程
leveldb的后台进程是leveldb当中比较难的部分,到现在还是模模糊糊的,先把自己懂的记录下来,以后再学习 1、leveldb通过DBImpl::MaybeScheduleCompaction启动后台进程(其实是一个进程),对数据进行合并、转储、压缩等处理 2、它首先判断是否已经持有互斥锁 3、判断是否已经启动后台进程,如果已经启动了,就原创 2016-01-14 20:43:13 · 1426 阅读 · 0 评论 -
leveldb代码阅读(5)——恢复数据库的状态
1、创建一个以数据库名字命名的目录dbname 2、锁住文件锁 3、判断Current文件是否存在,Current文件指向当前使用Manifest文件 4、如果Current已经存在了,那么表示出错(啥都没干就存在这个文件,当然出错!) 5、如果Current文件不存在,而且指定了create_if_missing标志,那么就原创 2016-01-14 16:42:22 · 1027 阅读 · 0 评论 -
leveldb代码阅读(4)——打开数据库的流程
1、创建一个DBImpl对象,DBImpl是DB的子类 2、加锁 3、调用Recover把数据库恢复成为上次退出时的状态 4、创建日志文件以及对应的内存table 5、把版本变更应用到当前的版本上,使当前版本的状态最新 6、删除过期文件 7、调度后台进程,后台进程的功能是进行table数据的原创 2016-01-14 15:37:08 · 836 阅读 · 0 评论 -
leveldb代码阅读(3)——Leveldb 实现原理
原文出处:http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.htmlLevelDb日知录之一:LevelDb 101 说起LevelDb也许您不清楚,但是如果作为IT工程师,不知道下面两位大神级别的工程师,那您的领导估计会Hold不住了:Jeff Dean和Sanjay Ghemawat。这两位是Goog转载 2016-01-14 15:34:35 · 676 阅读 · 1 评论 -
leveldb代码阅读(2)——一些简单的概念
1、leveldb::DB 表示一个数据库对象 2、leveldb::Options 表示用户选项,通过它,用户可以对数据库进行其他的控制 3、leveldb::Status 表示操作结果、操作状态,它封装了操作的结果以及错误信息等 4、leveldb::WriteOptions 表示写选项,主要用在用户插入数据或者删除数据的时候原创 2016-01-14 15:22:32 · 795 阅读 · 0 评论 -
leveldb代码阅读(18)——流程分析:读数据(详细版本)
原文地址:http://www.blogjava.net/sandy/archive/2012/03/21/leveldb11.htmlleveldb读数据先看看ReadOptions有哪些参数可以指定:// Options that control read operationsstruct ReadOptions { // 是否检查checksum // D转载 2016-01-15 15:32:31 · 1093 阅读 · 0 评论