RocksDBのCli(Cui)ツールのldbを使う

programing

RocksDBの中身を覗いたり内容を書き換えたりする時に、GUIツールがあれば便利です。

実際、GUIツールもいくつかあります。ですが、それらを触ってみて、どうも私としては使いにくいなと正直思いました。

で、もっと簡単なものが無いのかと探していたら、RocksDBをビルドした時に一緒にCLIツールもビルドされていたことを知りました。そのひとつがldb。ちょっと覗いたり、値を書き換えたりするだけであれば十分これで事足りる感じだったので、簡単に使い方を記録しておきます。

RocksDB

https://github.com/facebook/rocksdb

levelDBをフォークしてfacebookが作ったキーバリュー型のデータストアです。

ldb

RocksDBのCLI(CUI)ツールです。RocksDBをビルドすると、<ビルド用ディレクトリ>/toolsの中にldbコマンドが含まれていることが分かると思います。

データの中身を全て出力する

簡単です。scanコマンドで出力できます。データベースの指定は、--dbオプションで指定します。

// 基本
# ldb --db=<データベースのパス> scan

// 例
# ldb --db=/home/user/data/SampleRocksDB/ scan

ただ、上記の場合だと、バイトデータをそのまま出力するので、そのままでは文字化けして読めない場合もあります。

そういう時に、--hexオプションを重ねて付けることで、Hex文字列として中身を出力できます。

// 基本
# ldb --db=<データベース> --hex scan

// 例
# ldb --db=/home/user/data/SampleRocksDB/ --hex scan

キーを指定してその値を取得する

getコマンドを使います。

// 基本
# ldb --db=<データベースのパス> get <key>

// 例
# ldb --db=/home/user/data/SampleRocksDB/ get some_key

もし、keyが入力可能な状態であれば上記の書き方で済みますが、キーがバイトデータであった場合、入力するのが困難です。

そういうときは、--hexオプションを使うことでHex文字列でキーの指定が出来ます。注意としては、0xの接頭辞を付けることを忘れずに。

// 基本
# ldb --db=<データベースのパス> --hex get 0xFFFFFFFFFF

// 例
# ldb --db=/home/user/data/SampleRocksDB/ --hex get 0xf1647c

書き込む

putコマンドが使えます。

// 基本
ldb --db=<データベースのパス> put <key> <value>

// 例( apple : red を保存 )
# ldb --db=/home/user/data/SampleRocksDB/ put apple red

また、ここでも--hexを利用できます。

// 基本
ldb --db=<データベースのパス> --hex put 0xFFFFFF 0x000000

// 例
# ldb --db=/home/user/data/SampleRocksDB/ put 0xFFFFFF 0x000000

OKとログが出れば書き込み完了です。

テーブルのリストを取得する

RocksDBは、一つのデータベースの中に複数のテーブルを持つ場合があります。それらはcolumn_familiesと呼ばれています。

データベースの中に含まれるテーブル名を取得するには、list_column_familiesコマンドを使います。

# ldb list_column_families <データベースのパス>

list_column_familiesコマンドでデータベースを指定するときは、--dbオプションは使わずにデータベースの直後にパスを書きます。

column_familiesを指定する

ここまで、いくつかコマンドを紹介してきましたが、それらは全てdefaultのテーブル(column_family)を暗黙的に指定していました。別のテーブルを指定してそれらの操作をしたいときは、--column_familyオプションwの使います。

# ldb --db=/home/user/data/SampleRocksDB/ --hex --column_family=another_table scan

上記の場合、/home/user/data/SampleRocksDB/のデータベースのanother_tableテーブルの中身を、hexで全て出力ることになります。

以上。