LoginSignup
8
5

More than 5 years have passed since last update.

LevelDBを良いものだと思ったのでクライアントコマンドをGo言語で作った

Last updated at Posted at 2018-06-11

ふと、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を使っています。
8
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
5