LevelDBをつかってみた
RocksDBやRiakで使われているLevelDBを使ってみました。
leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting
環境
CentOS6.4
ダウンロード
gitかwgetでダウンロードできます。
$ git clone https://code.google.com/p/leveldb/
インストール
$ 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 value1set (key, value) = (key1, value1)$ ./load key1load (key, value) = (key1, value1)$ ./delete key1Deleted key(key1)$ ./load key1Not found
動作OK!
資料
leveldb - A fast and lightweight key/value database library by Google. - Google Project Hosting