Rocks DB

Takami Torao #RocksDB
  • このエントリーをはてなブックマークに追加

概要

Rocks DB は C++ で実装された key-value ストアの組み込み用ライブラリ。key 及び value は任意のバイナリデータが使用できる。メモリや極低レイテンシーな Flash ドライブのような物理ストレージと他コア CPU の実行環境に最適化されている。

Level DB のコードに HDFS の設計を取り入れている。API レベルで Level DB との後方互換性がある。

インストール

Ubuntu 18.04

Unix 系 OS ではソースからビルドする必要がある。以下は Docker で新規の ubuntu:18.04 コンテナを起動した状態から Python で RocksDB が利用できるようになるまでの一連のコマンド。

$ apt-get update
$ apt-get upgrade -y

$ apt-get install libgflags-dev libsnappy-dev zlib1g-dev libbz2-dev liblz4-dev libzstd-dev build-essential git -y
$ git clone https://github.com/facebook/rocksdb.git
$ cd rocksdb
$ make shared_lib
$ export CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:`pwd`/include
$ export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:`pwd`
$ export LIBRARY_PATH=$LIBRARY_PATH:`pwd`

$ apt-get install python3 python3-pip python3-dev -y
$ pip3 install python-rocksdb
$ python3 -c "import rocksdb; db=rocksdb.DB('test.db',rocksdb.Options(create_if_missing=True)); db.put(b'a',b'b'); print(db.get(b'a'))"
b'b'

macOS

Mac OS X は homebrew でインストールすることができる (gcc 4.8 以上が必要)。

$ brew install gcc --llvm
Updating Homebrew...
==> Installing dependencies for gcc: gmp, isl, mpfr and libmpc
...

$ brew install rocksdb
==> Installing dependencies for rocksdb: gflags and lz4
==> Installing rocksdb dependency: gflags
...

$ rocksdb_ldb --help
  ldb - RocksDB Tool

commands MUST specify --db=<full_path_to_db_directory> when necessary
...

Python の python-rocksdb を使って利用する。

$ pip install python-rocksdb
$ python
Python 3.6.6 (default, Jan 23 2019, 15:03:25)
[GCC 4.2.1 Compatible Apple LLVM 10.0.0 (clang-1000.10.44.4)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import rocksdb
>>> db = rocksdb.DB("test.db", rocksdb.Options(create_if_missing=True))
>>> db.put(b'key', b'value')
>>> print(db.get(b'key'))
b'value'

付属の CLI ツール rocksdb_ldb を使用することもできる (ただし create_if_missing オプションが存在しないので既存の DB しか使用できない?)。

$ rocksdb_ldb scan --db=test.db
key : value

参照

  1. RocksDB: A Persistent Key-Value Store for Flash and RAM Storage