カスタム検索

2010年1月29日金曜日

kumofs その3・Grailsと連携してみた

Grailsからkumofsを使ってみます

・適当な Grails アプリケーションを作成します
grails create-app kvstest

・memcachedクライアントのライブラリをインストールします
kumofs は memcached プロトコルを使用します。
今回は memcached の Java クライアントである Spymemcached
を使用します

上記サイトからJARファイルをダウンロードして lib フォルダへコピーします


・やりとりをするサービスを作成します
IBMのサイトにとても良いサンプルがあるのでこれを参考にします
上記サイトにあるサービスがほぼそのまま使えます
setのタイムアウトが600と指定されているのですが、kumofsでは0しか受け付けないため、0に変更します

*デフォルトの接続方式だと大量データでエラーが起きたので変更しました、そこらへんは次回に。

->Spymemcachedの問題でした、解決方法はこちらのエントリーで

memcachedClient.set(key, 0, value)


・適当なコントローラーを作成してget,setをテストします
本当に適当なので割愛、SSだけ





サクっと動きました!
次回はCouchDBとの速度比較なんかをやってみます

2010年1月28日木曜日

kumofs その2・Macで起動させてみた

とりあえずインストール出来ましたので、早速起動してみましょう
まずはkumofsの構成から

・kumo-server
データノード
実データが保存される場所、最低1つ

・kumo-manager
管理ノード
kumo-serverの管理を行う、1or2台

・kumo-gateway
アプリケーション <-> kumo-serverのプロキシ
アプリケーションからは常にここを参照するため、裏のmanager,serverの構成がどんな風に変わっても問題ない
アプリケーションサーバに対して 1:1 で起動する


とりあえずオールインワンで動かしてみます
・管理ノードを起動
kumo-manager -v -l localhost

・データノードを起動
kumo-server -v -l localhost -m localhost -s /opt/kumo/kumodb.tch

・起動したノードを確認
kumoctl localhost status

hash space timestamp:
Thu Jan 01 09:00:00 +0900 1970 clock 0
attached node:
not attached node:
127.0.0.1:19800

not attached node に登録されていますね。

・起動したデータノードを実際に参加させます
kumoctl localhost attach

・もっかい確認します
kumoctl localhost status
hash space timestamp:
Thu Jan 28 14:42:43 +0900 2010 clock 152
attached node:
127.0.0.1:19800 (active)
not attached node:

・プロキシを起動します
kumo-gateway -v -m localhost -t 11211

・telnet で接続確認します
telnet localhost 11211
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying fe80::1...
telnet: connect to address fe80::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.

・データを入れてみます
set hoge 0 0 3
foo
STORED

・データを取得してみます
get hoge
VALUE hoge 0 3
foo
END

hoge=foo というデータが入りました!

次回はGrailsと連携してみます

kumofs その1・Macにkumofsを入れてみた

この記事は書きかけでMacがクラッシュしたため、当社比-120%の説明不足でお送りさせていただきます。

kumofsとは
・内側=KVS用のライブラリであるTokyoCabinet(mixi等で使用されている)を使用
・外側=グローバルスタンダードなmemcachedプロトコルでのやり取りが可能
・簡単にスケールアウトが可能なスケーラビリティを持ったKVS
という認識!

なんだかワクワクする構成なのでとりあえず試してみた

Macでのインストールをベースに書いていきます。


・gccのバージョンをあげる
kumofsのインストールにはgccの4.1以上が必要です
MacではXcodeをインストールする事によってgccがインストールされますが、デフォルトのバージョンは4.0.1です
4.2も一緒に入っているので、これを切り替えます

cd /usr/bin
sudo rm -rf cc gcc c++ g++
sudo ln -s gcc-4.2 cc
sudo ln -s gcc-4.2 gcc
sudo ln -s c++-4.2 c++
sudo ln -s g++-4.2 g++


・TokyoCabinetのインストール
最新のソースパッケージをダウンロードして

./configure
make
sudo make install


・MessagePack(C++API)
MessagePackはバイナリでシリアライズ可能な形式
JSONのバイナリ版みたいな感じ、JSONよりもシリアライズ/デシリアライズが高速で、容量も小さい

C/C++向けのソースパッケージをダウンロードして

./confifure
make
sudo make install


・MessagePack(RubyAPI)

gem install msgpack
でさくっと入るはずなんだけど何故かうまくいかなかったので、ソースからインストールする
Gitは http://code.google.com/p/git-osx-installer/ からダウンロード

git clone git://git.sourceforge.jp/gitroot/msgpack/msgpack.git
cd msgpack
cd ruby
ruby extconf.rb
make
sudo make install


・kumofsのインストール
最新のパッケージをダウンロードして

./configure
make
sudo make install

上記のインストールが終わっていれば正常にインストールされると思います

/usr/local/bin/kumo*
のファイルがあればOKです

次回は実際に起動をしてデータを入れてみます

2010年1月27日水曜日

コンパイルされたClassファイルからJavaのバージョンを取得する

Javaのバージョントラブルがあったので、忘れないうちにメモ!
ココを参考にしました。

javap -v ClassFile | grep major
(クラスファイル名に .class はなしでOK)

で以下のように表示される(はず)

major version: 47

Javaのバージョンとの対比表

1.1 = 45.3
1.2 = 46.0
1.3 = 47.0
1.4 = 48.0
1.5 = 49.0
1.6 = 50.0

なので、上記の場合は 1.3でコンパイルされている、と。
Grailsって中のファイルとPluginでコンパイルされるバージョンが違う・・・Javaの参照の仕方が違うのかな