2011年2月12日土曜日

Go + SWIG + Cassandra + Thrift

2011年2月現在、Goにはデータベースとやりとりするためのバインディングが無い。Goパッケージのダッシュボードには色んな人が作ったパッケージがあるけど、どれも有志が作ったもので例えばMySQLが公式にGoをサポートしてくれるわけではない。なので、Goを使ってDBとやりとりして何かしようと思うとちょっと面倒だったりする。

そんな状況で、公式なGoバインディングが登場するまでのつなぎとしてGo + SWIGという選択肢がある。今回はそのGo + SWIGからCassandraを呼ぶことで、GoからのDB利用を試すことにする。

SWIGとは

SWIGはPythonとかの言語からC/C++のライブラリが呼べるようにするツールだと思ってもらえればいい。SWIG v2.02から(正確にはr12398から)はGoからC/C++のライブラリを呼べるようになったので、C/C++でデータベースとやりとりするラッパーを作って、それをGoから呼ぶようにすれば半分公式サポートされてるような状態にできる。これだったら、どこの誰がメンテしてるかわからない野良パッケージに頼るよりは安心して使える。

Cassandraとは

Cassandraは最近はやりのNoSQL系データベース、らしい。良く知らないけどmemcachedとかのkey/value系データベースみたいな。Read/Writeが高速にできて、APIもわりとシンプルなのでこれを今回使うことにする。

Thriftとは

Cassandraはちょっと凝った?ことをやっていて、データベース本体とインタフェースするためのライブラリが別に存在する。それがThriftというライブラリで、CassandraはいまのところThrift経由でアクセスするのが正攻法らしい。多分これはCassandraのエンジン部分とインタフェース部分を分離したかったからだろうけど、とにかくユーザーはCassandraを使おうと思ったらThriftを経由することになる。

Thrift自体は単体でも使用できて、サーバーサイドとクライアントサイドが通信するための色々なことを肩代わりしてくれる便利ライブラリらしい(適当)。

準備

では前置きがすんだところで実際の準備へ入る。

SWIGのインストール

  1. svnのリポジトリから最新を持ってくる。公式にリリースされてるSWIG v2.01は最新のGoとの連携が壊れてるので、最新のGo(release.2011-02-01)と連携するならsvnからの最新、最低でもr12398以上が必要。
  2. $ svn co https://swig.svn.sourceforge.net/svnroot/swig/trunk swig
    
  3. SWIGをビルド、インストールする。実行も確認する。
  4. $ cd swig
    $ ./autogen.sh
    $ ./configure --with-go=/home/masato/lib/google-go/bin/8g
    $ make && sudo make install
    $ swig
    Must specify an input file. Use -help for available options.
    

Cassandraのインストール

  1. Cassandra公式ウェブサイトへ行って最新のバイナリ(現在0.7.0)をダウンロードして、自分のhome以下に展開。なんならシンボリックリンクでも作ってバージョンを隠蔽する。
  2. $ cd ~/lib
    $ tar xzf apache-cassandra-0.7.0-bin.tar.gz
    $ ln -s apache-cassandra-0.7.0/ cassandra
    
  3. .bashrcに記述するなりしてcassandraのバイナリヘパスを通す。
  4. export PATH=$PATH:~/lib/cassandra/bin
    
  5. cassandraを実行するのに必要なディレクトリを作成して、パーミッションを正しく設定する
  6. $ sudo mkdir -p /var/log/cassandra
    $ sudo mkdir -p /var/lib/cassandra
    $ sudo chown -R `whoami` /var/log/cassandra/
    $ sudo chown -R `whoami` /var/lib/cassandra/
    
  7. cassandraを起動する。特に例外が発生することなくそのまま実行されてれば成功。
  8. $ cassandra -f
     INFO 10:18:16,041 Heap size: 2087124992/2102198272
     INFO 10:18:16,045 JNA not found. Native methods will be disabled.
    ...
    

Thriftのインストール

  1. Thrift公式ウェブサイトへ行って最新のソース(現在0.6.0)をダウンロード、解凍する。
  2. $ tar xzvf thrift-0.6.0.tar.gz
    
  3. ビルド、インストールする。単純にビルドしようとすると色々要求されたので、今回はいくつかのオプションをオフにしてビルドした。人によっては他にもpythonやらを無効にするのもあり。
  4. $ ./configure --without-java --without-java_extension --without-php --without-php_extension --with-cpp
    $ make && sudo make install
    
  5. 実行を確認。
  6. $ thrift
    Usage: thrift [options] file
    ...
    

(続く)

0 件のコメント:

コメントを投稿