#K2HASHとは?
Yahoo! JAPAN製のKVS。
詳しくはgithubのwikiに書いてある。
k2hashそのものよりもこちらの記事で紹介されているK2HFTFUSEに興味を持った、というのが調査の動機。
環境
さくらVPS x CentOS6を利用。
導入
gitから必要リポジトリをclone
$ git clone git@github.com:yahoojapan/k2hash.git
$ cd k2hash
$ git clone --recursive git://github.com/yahoojapan/fullock
$ git submodule update --init --recursive
このように、k2hashリポジトリのサブモジュールにfullockを登録できていればOK
$ tree k2hash -L 1 -d
k2hash
├── autom4te.cache
├── docs
├── fullock # <- これ
├── lib
├── m4
└── tests
6 directories
$ git config --list | grep submodule
submodule.fullock.url=https://github.com/yahoojapan/fullock.git
インストール(ミスったところ)
環境のせいか、32bit用のディレクトリにインストールされてしまった、という作業履歴。
「インストール(解決)」の章で解決した。
fullockをビルド
$ cd fullock
$ ./autogen.sh
** SUCCEED: autogen
$ ./configure --prefix=/usr
$ make
$ sudo make install
k2hashをビルド
$ cd ..
$ ./autogen.sh
** SUCCEED: autogen
$ ./configure --prefix=/usr
ここでエラーが
configure: error: not found libfullock-dev package.
64bitの環境なのに、32bitのディレクトリにインストールされてしまっていた。
$ ls /usr/lib/*fullock*
/usr/lib/libfullock.a /usr/lib/libfullock.so /usr/lib/libfullock.so.1.0.21
/usr/lib/libfullock.la /usr/lib/libfullock.so.1
インストール(解決)
こちらの方法で解決。
fullockを再度ビルド & インストール
$ cd fullock
$ ./autogen.sh
# configureのオプション確認
$ ./configure --help
・・・
--libdir=DIR object code libraries [EPREFIX/lib]
・・・
# libのインストール先ディレクトリを指定して実行
$ ./configure --prefix=/usr --libdir=/usr/lib64
$ make
$ sudo make install
# 確認
$ ls /usr/lib64/*fullock*
/usr/lib64/libfullock.a /usr/lib64/libfullock.so /usr/lib64/libfullock.so.1.0.21
/usr/lib64/libfullock.la /usr/lib64/libfullock.so.1
これで、64bit用のディレクトリにインストールされた。
k2hashを再度ビルド
こちらも64bitのディレクトリを指定してビルド。
$ cd ..
$ ./autogen.sh
$ ./configure --prefix=/usr --libdir=/usr/lib64
$ make
$ sudo make install
$ ls /usr/lib64/*k2hash*
/usr/lib64/libk2hash.a /usr/lib64/libk2hash.so /usr/lib64/libk2hash.so.1.0.52
/usr/lib64/libk2hash.la /usr/lib64/libk2hash.so.1
使ってみた
対話式ツールを起動
$ cd k2hash/tests
$ ./k2hlinetool -m
-------------------------------------------------------
K2HASH TOOL
-------------------------------------------------------
On memory mode
Attached paraemters:
Full are mapping: true
Key Index mask count: 8
Collision Key Index mask count: 4
Max element count: 32
-------------------------------------------------------
key/valueの登録、更新
# キーに値を設定
K2HTOOL> set foo var
K2HTOOL> print foo
+"foo" => "var"
# 設定した値を更新
K2HTOOL> set foo bar
K2HTOOL> print foo
+"foo" => "bar"
リスト表示
K2HTOOL> list
+"foo" => "bar"
キーのリネーム
K2HTOOL> rename foo hoge
K2HTOOL> list
+"hoge" => "bar"
キーの削除
# テスト用のkey/valを設定
K2HTOOL> set foo bar
K2HTOOL> set hoge fuga
K2HTOOL> list
+"hoge" => "fuga"
+"foo" => "bar"
# 削除
K2HTOOL> rm hoge
K2HTOOL> list
+"foo" => "bar"
k2htouchを使ってみた
ツールは開発者向けドキュメントに色々書いてある。
ファイルにkey/valを書き込める簡易ツール「k2htouch」を使ってみた。
$ cd k2hash/tests
# ファイル作成
$ ./k2htouch ~/k2file create
# 確認
$ ls ~/k2file
/home/me/k2file
# key/value書き込み
$ ./k2htouch ~/k2file set foo bar
# key読み込み
$ ./k2htouch ~/k2file get foo
bar
# サブkey追加
$ ./k2htouch ~/k2file addsubkey foo hoge fuga
# key読み込み
$ ./k2htouch ~/k2file get foo
bar
# keyのサブkey読み込み
$ ./k2htouch ~/k2file getsubkey foo
hoge
# リスト表示
$ ./k2htouch ~/k2file list
foo bar
hoge fuga
# キー削除
$ ./k2htouch ~/k2file delete foo
$ ./k2htouch ~/k2file list