Posted at

K2HASHのインストール〜コマンドラインツールの利用

More than 1 year has passed since last update.


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