3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Posted at

#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
3
0
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
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?