LevelDBをつかってみた

RocksDBやRiakで使われているLevelDBを使ってみました。

leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting

環境

CentOS6.4

ダウンロード

gitかwgetでダウンロードできます。

Downloads - leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting

インストール
$ sudo yum install gcc-c++
$ sudo yum install snappy
※snappyはいらないかもしれません。
 
ダウンロードしたleveldbのフォルダに移動してmakeする 

$ cd leveldb

$ make

$ make check

libとincludeをコピー

$ sudo cp libleveldb.a /usr/local/lib

$ sudo cp -r include/leveldb /usr/local/include

Cのコードをかく

保存用のコード

$ cat save.cc
#include "leveldb/db.h"
#include <iostream>
#include <assert.h>
 
int main(int argc, char *argv) {
    if (argc != 3) {
        printf("usage : ./save key value\n");
        return 1;
    }
    // 引数を変数に設定
    std::string key(argv[1]);
    std::string value(argv[2]);
 
    // dbの読み込み
    leveldb::DB* db;
    leveldb::Options options;
    options.create_if_missing = true;
    leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
    // DBの読み込みチェック
    assert(status.ok());
 
    // 保存処理
    status = db->Put(leveldb::WriteOptions(), key, value);
    assert(status.ok());
    std::cout << "set (key, value) = (" << key << ", " << value << ")" << std::endl;
 
}

取得用のコード

$ cat load.cc
#include "leveldb/db.h"
#include <iostream>
#include <assert.h>
 
int main(int argc, char *argv) {
    if (argc != 2) {
        printf("usage : ./load key\n");
        return 1;
    }
    // 引数を変数に設定
    std::string key(argv[1]);
    std::string value;
 
    // dbの読み込み
    leveldb::DB* db;
    leveldb::Options options;
    options.create_if_missing = true;
    leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
    // DBの読み込みチェック
    assert(status.ok());
 
    // 読み込み処理
    status = db->Get(leveldb::ReadOptions(), key, &value);
    if (status.ok()) {
        std::cout << "load (key, value) = (" << key << ", " << value << ")" << std::endl;
    } else {
        std::cout << "Not found" << std::endl;
    }
 
}

削除用のコード

$ cat delete.cc
#include "leveldb/db.h"
#include <iostream>
#include <assert.h>
 
int main(int argc, char *argv[]) {
    if (argc != 2) {
        printf("usage : ./delete key\n");
        return 1;
    }
    // 引数を変数に設定
    std::string key(argv[1]);
 
    // dbの読み込み
    leveldb::DB* db;
    leveldb::Options options;
    options.create_if_missing = true;
    leveldb::Status status = leveldb::DB::Open(options, "/tmp/testdb", &db);
    // DBの読み込みチェック
    assert(status.ok());
 
    // 読み込み処理
    status = db->Delete(leveldb::WriteOptions(), key);
    assert(status.ok());
    std::cout << "Deleted key(" << key << ")" << std::endl;
 
}
 コンパイルして実行

コンパイル

 

$ g++ -o save save.cc /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/
$ g++ -o load load.cc /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/
$ g++ -o delete delete.cc /usr/local/lib/libleveldb.a -lpthread -I /usr/local/include/leveldb/

実行

$ ./save key1 value1
set (key, value) = (key1, value1)
 
$ ./load key1
load (key, value) = (key1, value1)
 
$ ./delete key1
Deleted key(key1)
 
$ ./load key1
Not found

動作OK!

資料

leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting

A quick guide to LevelDB