読者です 読者をやめる 読者になる 読者になる

Erlangのthrift_clientを使ってCassandraと戯れる

Cassandra Erlang

もう何度目か分からない空前のErlangブームを迎えているわけですが、ErlangでCassandra/Thriftを使う方法がちょっと分からなかったので、メモ。

まず、Thrift配布物に含まれているlib/erlをMakeして、Erlang用のThriftライブラリをインストールしておくことが必要。さらに、Cassandraの配布物に含まれているcassandra.thriftから、

$ thrift --gen erl cassandra.thrift
$ cd gen-erl
$ erlc *.erl

のようにしてCassandraクライアントライブラリを生成して、コンパイルしておくことも必要。

その上で、

{ok, C}  = thrift_client:start_link("127.0.0.1", 9160, cassandra_thrift).

で接続。

thrift_client:call(C8, set_keyspace, ["Keyspace1"]).

で使用するKeyspaceを選択。これはtrunk版のCassandraの場合のみに必要。安定版(0.6)のAPIは、insert, get等の第1引数にKeyspaceを与えるようなインターフェイスになっている。

thrift_client:call(C, insert, ["spam", #columnParent{column_family="Standard1"}, #column{name="spam", value="spam", clock=#clock{timestamp=1}}, 1]).

のようにしてinsert。

1> thrift_client:call(C, get, ["spam", #columnPath{column_family="Standard1", column="spam"}, 1]).                                                                    {ok,#columnOrSuperColumn{column = #column{name = <<"spam">>,
                                          value = <<"spam">>,
                                          clock = #clock{timestamp = 1},
                                          ttl = undefined},
                         super_column = undefined}}

のようにしてget。get_sliceならば、

thrift_client:call(C, get_slice, ["spam", #columnParent{column_family="Standard1"}, #slicePredicate{column_names=["spam", "egg", "ham"]}, 1]).

のような感じ。こういった具合にthrift_client:call関数を使うということが分かれば、後は他の言語と全く同じ。

ErlangアプリケーションのストレージとしてCassandraとかHBaseを使うのは良い選択肢に思えるので、しばらくCassandra with Erlangブームは続きそうです。