[OSS-tools vol.1] 組み込みKVS、LevelDBで遊ぶ

何となく気になっていたけど今まで使ったことのなかったOSSのツールやライブラリで遊んでみようと思っています。このコーナーは表題にOSS-toolsとつけようと思います。基本的に軽めです。

● LevelDB

記念すべき第一回はLevelDBです。URLはこちら。
https://code.google.com/p/leveldb/

LevelDBとは組み込みKVSの一種で高速な動作が売りだそうです。なんかすごそう。それでは試してみましょう。

●インストール

上記サイトよりソースコードをダウンロードして適当な場所に展開しましょう。私が試したのはver 1.15.0でした。

インストールは、ソースコードを展開したディレクトリに移動して、make。簡単です。その場にsoファイルなどができます。インストール先を指定したかったけど、makefileをいじらないといけないのでしょうか。

●使ってみよう

マニュアルを見つついじってみましょう。
http://leveldb.googlecode.com/svn/trunk/doc/index.html

上記のマニュアルの"Reads And Writes"までの内容を動くコードにすると以下のようになりました。(マニュアル記載の断片を繋げて多少アレンジしただけです。)

#include <iostream>
#include "leveldb/db.h"

int main(){
  leveldb::DB *db;
  leveldb::Options options;
  options.create_if_missing = true;
  leveldb::Status status = leveldb::DB::Open(options, "test.db", &db);
  if(!status.ok()){
    std::cerr << "DB open error." << std::endl;
    std::cerr << status.ToString() << std::endl;
  }

  std::string key;
  std::string value1;

  key = "abc";
  value1 = "def";
  status = db->Put(leveldb::WriteOptions(), key, value1);

  std::string value2;
  status = db->Get(leveldb::ReadOptions(), key, &value2);

  std::cerr << "key=" << key << " value=" << value2 << std::endl;

  delete db;
}

test.cppというファイル名で保存してビルドします。

$ g++ -I/path/to/leveldb/include -lpthread test.cpp /path/to/leveldb/libleveldb.a -o test

動かします。

$ ./test
key=abc value=def

動いた!

実行後、カレントディレクトリにtest.dbというディレクトリができていました。プログラム中で指定したパスはファイル名だと思っていましたがディレクトリ名のようです。

$ ls test.db/
000005.ldb  000006.log  CURRENT  LOCK  LOG  LOG.old  MANIFEST-000004

なるほど。

この記事が気に入ったらサポートをしてみませんか?