LevelDB使用入門

3028 ワード

1,levelDBソースをダウンロード
git clone https://github.com/google/leveldb.git
2,コンパイルLevelDB
cd leveldb & make all
コンパイルが完了すると、現在のディレクトリに2つのディレクトリが追加されます:out-sharedとout-static
out-staticディレクトリの下に必要なlibleveveldbがあります.a
3、現在のディレクトリに新しいフォルダtestを作成する
touch test; cd test
4,testディレクトリにテストコードtestを新規作成する.cpp
#include 
#include 
#include 
#include "leveldb/db.h"

int main(){
        leveldb::DB* db;
        leveldb::Options options;
        options.create_if_missing = true;
        leveldb::Status status = leveldb::DB::Open(options,"/tmp/testdb", &db);
        assert(status.ok());

        std::string k1 = "name";
        std::string v1 = "jim";

        status = db->Put(leveldb::WriteOptions(), k1, v1);
        assert(status.ok());

        status = db->Get(leveldb::ReadOptions(), k1, &v1);
        assert(status.ok());
        std::cout<Put(leveldb::WriteOptions(), k2, v2);
        assert(status.ok());
        status = db->Get(leveldb::ReadOptions(), k2, &v2);
        assert(status.ok());
        std::cout<Delete(leveldb::WriteOptions(), k2);
        assert(status.ok());
        std::cout<Get(leveldb::ReadOptions(),k2, &v2);
        if(!status.ok())
            std::cerr<

5,コンパイル前の準備
これをa現在のディレクトリへコピー
cp ../out-static/libleveldb.a ./
レベルdb/includeディレクトリをPATHに追加:
cd ..; export PATH=$PATH:$(pwd)/include; cd test
6,コンパイル運転
コンパイル:
g++ -o test test.cpp libleveldb.a -lpthread -I../include
実行:
➜  test git:(master) ✗ ./test
k1:name; v1:jim
k2:age; v2:20
Delete k2..
k2:age; NotFound:

これまでleveldbは基本的に使用できました.
9,実行完了.testの後、/tmp/testdbの下にleveldb関連ファイルが生成されます.
➜  test git:(master) ✗ ls -alh /tmp/testdb
total 56
drwxr-xr-x  10 root  wheel   340B 10  3 12:51 .
drwxrwxrwt  14 root  wheel   476B 10  3 12:31 ..
-rw-r--r--   1 root  wheel   148B 10  3 12:14 000005.ldb
-rw-r--r--   1 root  wheel   148B 10  3 12:51 000008.ldb
-rw-r--r--   1 root  wheel    80B 10  3 12:51 000009.log
-rw-r--r--   1 root  wheel    16B 10  3 12:51 CURRENT
-rw-r--r--   1 root  wheel     0B 10  3 11:57 LOCK
-rw-r--r--   1 root  wheel   309B 10  3 12:51 LOG
-rw-r--r--   1 root  wheel   309B 10  3 12:14 LOG.old
-rw-r--r--   1 root  wheel   110B 10  3 12:51 MANIFEST-000007

8,LevelDB公式サイトの説明によると、LevelDBの特徴と制限は以下の通りである:特徴:
1、keyとvalueはいずれも任意の長さのバイト配列である.
2、entry(すなわちK-Vレコード)のデフォルトはkeyの辞書順に格納され、もちろん開発者もこのソート関数を再ロードすることができる.
3、提供する基本操作インタフェース:Put()、Delete()、Get()、Batch()
4、一括操作を原子操作で行うことをサポートする;
5、データパノラマのsnapshot(スナップショット)を作成し、スナップショットでデータを検索することを許可する.
6、前方(または後方)反復器でデータを遍歴することができる(反復器が隠しているsnapshotを作成する).
7、Snappyを使用してデータを自動的に圧縮する;
8、移植性;
制限:
1、非関係型データモデル(NoSQL)、sql文をサポートしない、インデックスもサポートしない;
2、一度に1つのプロセスだけが1つの特定のデータベースにアクセスすることを許可する.
3、内蔵のC/Sアーキテクチャはないが、開発者はLevelDBライブラリを使って自分で1つのserverをカプセル化することができる.