织网

身体和灵魂,总有一个在路上

Leveldb本地存储引擎-精致的工具

| Comments

leveldb是一个google实现的非常高效的kv数据库,能够支持billion级别的数据量了。 在这个数量级别下还有着非常高的性能,主要归功于它的良好的设计。特别是LSM算法。 LevelDB 是单进程的服务,性能非常之高,在一台4个Q6600的CPU机器上,每秒钟写数据超过40w,而随机读的性能每秒钟超过10w。@ideawu的ssdb就是基于Leveldb引擎开发的,看起来很NB的样子

它只是一个本地存储引擎:

  • k/v db library,提供持久化
  • No Server
  • No cache 于是它精巧。

talk is cheap ,Show me the Code

简单示范一下C++使用Leveldb ,要先下载leveldb源码编译code

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include<iostream>  
#include<string>  
#include"leveldb/db.h"  

using namespace std;
using namespace leveldb;

int main()
{
    DB *db;
    Options options;
    options.create_if_missing = true;
    Status s = DB::Open(options,"/data/leveldb/lvd.db",&db);
    if(!s.ok()){
        cerr << s.ToString() << endl;
    }
    string key = "name",val = "leveldb";
    s = db->Put(WriteOptions(),key,val);
    if(!s.ok()){
        cerr << s.ToString() << endl;
    }
    s = db->Get(ReadOptions(),key,&val);
    if(s.ok()){
        cout << key << "=" << val << endl;
        s = db->Put(leveldb::WriteOptions(),"key2",val);
        if(s.ok()){
            s = db->Delete(leveldb::WriteOptions(),key);
            if(!s.ok()){
                cerr << s.ToString() << endl;
            }
        }
    }
                                                                                                                                    }

编译方法

1
g++ testleveldb.cpp -o main -I./Include -l./ -lleveldb -lrt

执行./main 之后便可以看到,leveldb的存储文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
zj@hp:~/lvd.db$ tree
.
├── 000003.log
├── CURRENT
├── LOCK
├── LOG
├── MANIFEST-000002
├── sst_0
├── sst_1
├── sst_2
├── sst_3
├── sst_4
├── sst_5
└── sst_6

很多语言都给予了binding,那么python 也不例外了 :) py-leveldb
你需要先安装python-leveldb库

1
2
3
4
import leveldb
db = leveldb.LevelDB('./db')
db.Put('hello', 'world')
print db.Get('hello')

如果你也和我一样蛋疼,你会不会想会有Server可以调用呢,再看下一篇吧 :)

Comments