leveldb学习笔记

LevelDB由 Jeff Dean和Sanjay Ghemawat开发。

LevelDb是能够处理十亿级别规模Key-Value型数据持久性存储的C++ 程序库。

特别如下:

1、LevelDb是一个持久化存储的KV系统,将大部分数据存储到磁盘上。

2、LevleDb在存储数据时,是根据记录的key值有序存储的,应用可以自定义key大小比较函数。

3、LevelDb的操作接口包括写记录,读记录以及删除记录。针对多条操作的原子批量操作。

4、LevelDb支持数据快照(snapshot)功能,使得读取操作不受写操作影响。

5、LevelDb支持数据压缩。

LevelDb性能非常突出,其随机写性能达到40万条记录每秒,而随机读性能达到6万条记录每秒。总体来说,LevelDb的写操作要大大快于读操作,而顺序读写操作则大大快于随机读写操作。

整体架构

当应用写入一条Key:Value记录的时候,LevelDb会先往log文件里写入,成功后将记录插进Memtable中。

Log文件在系统中的作用主要是用于系统崩溃恢复而不丢失数据。

当Memtable插入的数据占用内存到了一个界限后,Memtable就成为Immutable Memtable,LevleDb会生成新的Log文件和Memtable。

LevelDb后台调度会将Immutable Memtable的数据导出到磁盘,形成一个新的SSTable文件。

【注释】 Immutable Memtable 这个Memtable的内容是不可更改的,只能读不能写入或者删除。

参考地址:

http://www.cnblogs.com/haippy/archive/2011/12/04/2276064.html

时间: 2024-10-10 22:23:57

leveldb学习笔记的相关文章

leveldb 学习笔记之VarInt

在leveldb在查找比较时的key里面保存key长度用的是VarInt,何为VarInt呢,就是变长的整数,每7bit代表一个数,第8bit代表是否还有下一个字节, 比如小于128(一个字节以内)的值生成方式如下: 将该值与二进制1000 0000值进行比较,如果小于,则直接将该值作为unsigned char也就是整数值写入. 一个大于128也就是超过1个字节的变长整数的生成方式如下: 将该值与二进制1000 000 000 0000 (32768=2<<14)进行比较,如果小于,则将该值

leveldb 学习笔记

log文件的格式 log文件每一条记录由四个部分组成: CheckSum,即CRC验证码,占4个字节 记录长度,即数据部分的长度,2个字节 类型,这条记录的类型,后续讲解,1个字节 数据,就是这条记录的数据. 关于记录的类型,平常使用中有4种: FULL,表示这是一条完整的记录 FIRST,表示这是一条记录的第一部分. MIDDLE,表示这是一条记录的中间部分. LAST,表示这是一条记录的最后一部分.

CAFFE学习笔记(四)将自己的jpg数据转成lmdb格式

1 引言 1-1 以example_mnist为例,如何加载属于自己的测试集? 首先抛出一个问题:在example_mnist这个例子中,测试集是人家给好了的.那么如果我们想自己试着手写几个数字然后验证识别效果又当如何呢? 观察CAFFE_ROOT/examples/mnist/下的lenet_train_test.prototxt文件,发现里面既给出了训练集的路径,又给出了测试集的路径.因此答案很显然了,我们可以把自己的测试集做成leveldb(或lmdb)格式的,然后在lenet_train

学习笔记:Caffe上配置和运行MNIST

学习笔记:Caffe上配置和运行MNIST MNIST,一个经典的手写数字库,包含60000个训练样本和10000个测试样本,图片大小28*28,在Caffe上配置的第一个案例 1首先,获取minist的数据包. 这个版本是四个数据包cd $CAFFE_ROOT./data/mnist/get_mnist.sh [html] view plaincopy #!/usr/bin/env sh # This scripts downloads the mnist data and unzips it

CAFFE学习笔记(五)用caffe跑自己的jpg数据

1 收集自己的数据 1-1 我的训练集与测试集的来源:表情包 由于网上一幅一幅图片下载非常麻烦,所以我干脆下载了两个eif表情包.同一个表情包里的图像都有很强的相似性,因此可以当成一类图像来使用.下载个eif解压包可以把eif文件解压成gif和jpg格式的文件,然后删除gif文件,只留下jpg格式的文件,这些图就是我的训练集与测试集了. 1-2 使用rename批量重命名图像 (1)对于一个存放了图像src.jpg的文件夹ROOT,在ROOT中新建一个test.txt文件,在里面写下"renam

学习笔记:Caffe上配置和运行Cifar10的示例

学习笔记:Caffe上配置和运行Cifar10的示例 CIFAR-10数据集含有6万个32*32的彩色图像,共分为10种类型,由 Alex Krizhevsky, Vinod Nair和 Geoffrey Hinton收集而来.包含50000张训练图片,10000张测试图片 http://www.cs.toronto.edu/~kriz/cifar.html 数据集的数据存在一个10000*3072 的 numpy数组中,单位是uint8s,3072是存储了一个32*32的彩色图像.(3072=

学习笔记-CIFAR10模型理解简述

学习笔记-CIFAR10模型理解简述 整个结构中包含三个convolution layer.三个pooling layer和两个fully connected layer. 每个层有多个Feature Map,每个Feature Map通过一种卷积滤波器提取输入的一种特征,然后每个Feature Map有多个神经元. 首先是数据层,测试数据100张为一批(batch_size),后面括号内是数据总大小.如100*32*32*3= 307200 Top shape: 100 3 32 32 (30

vector 学习笔记

vector 使用练习: /**************************************** * File Name: vector.cpp * Author: sky0917 * Created Time: 2014年04月27日 11:07:33 ****************************************/ #include <iostream> #include <vector> using namespace std; int main

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则

Caliburn.Micro学习笔记(一)----引导类和命名匹配规则 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详细,自己在看它的文档和代码时写了一些demo和笔记,还有它实现的原理记录一下 学习Caliburn.Micro要有MEF和MVVM的基础 先说一下他的命名规则和引导类 以后我会把Caliburn.Micro的 Actions IResult,IHandle ICondu