ふと、SQLiteのようにライブラリとして使えるKVSがないかを探してみたところ、LevelDBにたどり着いた。(https://github.com/google/leveldb)
PythonのLevelDB用ライブラリのplyvel
を使ってご機嫌だったが、一覧やキーのリストを取得したり、いらないキーを消すのにいちいちPythonを書いていられないので、クライアントコマンドを作ることにした。Goで。
そして出来上がったものがこちら。
go getでインストールすると使える。
$ go get github.com/yuuichi-fujioka/go-leveldbctl/cmd/leveldbctl
$ leveldbctl -h
NAME:
leveldbctl - A new cli application
USAGE:
leveldbctl [global options] command [command options] [arguments...]
VERSION:
0.0.0
COMMANDS:
init, i Initialize a LevelDB
walk, w Walk in a LevelDB
keys, k Search all keys in a LevelDB
put, p Put a value into a LevelDB
get, g Gut a value from a LevelDB
delete, d Delete a value from a LevelDB
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--dbdir value, -d value LevelDB Directory (default: "./") [$LEVELDB_DIR]
--help, -h show help
--version, -v print the version
使い方
カレントディレクトリをLevelDBのディレクトリとみなし、初期化、CRUD操作ができる。(オプション--dbdir
、-d
で特定のディレクトリをLevelDBとすることも可)
init
で初期化し、あとはput
で作成、get
で取得、delete
で削除する。
$ leveldbctl init # 初期化。いろいろファイルができる。
./ is initialized as LevelDB
$ leveldbctl get aaa # aaaがキー。からっぽなので、ないと言われる。
aaa is not found.
$ leveldbctl put aaa bbb # aaaにbbbを入れると...
put aaa: bbb into ./.
$ leveldbctl get aaa # getでbbbが取れる
bbb
$ leveldbctl delete aaa # 消す。
aaa is deleted
他にはwalk
で全キーバリューの出力、keys
で全キーの出力ができる。
$ leveldbctl keys
egg
foo
hoge
$ leveldbctl walk
egg: spam
foo: bar
hoge: fuga
他
- Mac OS High Sierra、Ubuntu 16.04.4 LTSで動作確認しました。
- コマンドは
github.com/urfave/cli
を使って実装しています。 - LevelDBの操作は
github.com/syndtr/goleveldb/leveldb
を使っています。