RocksDBのCli(Cui)ツールのldbを使う
Posted
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
で全て出力ることになります。
以上。