KVS
nosql
K2hash

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