最近会社ではAerospikeを使ってる。
今回はそのKVSで少しハマったことがあったのでメモ。
Aerospikeとは?
KVS
Aerospike社の開発するNoSQLでC言語で実装されている。
2014年にオープンソースとして公開されている。
特徴とかアーキテクチャとかは公式見てください。↓
http://www.aerospike.com/technologies/#technologies
何をしたかったのか
AerospikeにはRDBMSでいうtableにあたるsetというものが存在し、その中にrecordが入る。
このset内のレコードをすべて削除したかった。
検証環境
Aerospike社からDocker Imageが配布されているので、これを検証用として使用する。
# Aerpospikeはデフォルトで3000をLISTENします $ docker run -it -p 3000:3000 aerospike/aerospike-server:3.14.0
適当にレコード突っ込む
$ aql aql> INSERT INTO test.testset (PK, a, b) VALUES ('xyz', 'abc', 123) aql> INSERT INTO test.testset (PK, a, b) VALUES ('xyz2', 'abc', 123)
消し方
一応公式サイトには2通りの消し方がのってるので順番に使ってみます。
消し方 その①
Aerospikeから提供されているJava製のツールで削除する。
使い方は簡単で
$ git clone https://github.com/aerospike/delete-set $ cd delete-set # jarファイルが出来る $ mvn clean package $ java -jar delete-set-1.0.0-jar-with-dependencies.jar -h 127.0.0.1 -p 3000 -n test -s testset 0 INFO SetDelete - Host: 127.0.0.1 1 INFO SetDelete - Port: 3000 1 INFO SetDelete - Name space: test 1 INFO SetDelete - Set: testset 197 INFO SetDelete - Deleted 1 records from set testset
これで消えてくれる。
とはいえこのためだけにjarを用意するのも何か腑に落ちない。
消し方 その②
Aerospikeから提供されているAerospike Information Tool (asinfo)を使う方法。
次のコマンドをうてば良いらしい。
asinfo -v "set-config:context=namespace;id=<name space>;set=<set name>;set-delete=true;"
こっちのほうが簡単なのではと思って実行してみた。
$ asinfo -v "set-config:context=namespace;id=test;set=testset;set-delete=true;" error
何も分からんw
知りたいのは何でerror
なのかである。
どこか別の場所に記載がないかとドキュメントも色々あさると次のような記載があった。
truncate
introduced in Aerospike Server version 3.12.0, released in March 2017.
set-delete
deprecated and works up to Aerospike 3.12.1, released in April 2017.
なるほどw
Aerospikeの3.12.1からはset-deleteはなくなるからtruncate使ってくれよなということらしい。
下記のコマンドで無事recordを全部削除できた。
$ asinfo -v "truncate:namespace=test;set=testset;" ok
とはいえ error
だけはきつのでもうちょい情報くれという感じ。