Hectorで、JavaからCassandraを操作する。

phpcassaで、PHPからCassandraを操作する。」に続いて、今度はJavaからCassandraを操作してみます。

JavaのCassandraライブラリHector

JavaのCassnadraライブラリもいくつかあるのですが、今回はHectorというライブラリを使ってみます。
スクリーンショット 2014-04-05 13.46.36
Hector – Java Client for Cassandra
これも、ThriftによるCassandraの操作をラップしたライブラリです。
ライブラリのソースコードは、GitHubで、MITライセンスとして公開されています。
hector-client/hector

HectorをMavenでプロジェクトに導入する。

さっそくプロジェクトに導入してみます。
Hectorは、Mavenで簡単に導入することができます。


	me.prettyprint
	hector-core
	1.0-5

これで終わりです。実際の使い方に移ります。

Hectorで、Cassandraに接続

早速、実際に接続するコードを記述します。
まずClusterオブジェクトを作成し、それからキースペースへの接続をおこないます。今回は、クラスタとして、以前にインストールしたMac OS XのローカルのCassandraの1台を想定しています。
分散データベースApache CassandraをMac OS Xにインストール

Cluster cluster = HFactory.getOrCreateCluster("first_cluster", "localhost:9160");
Keyspace keyspace = HFactory.createKeyspace("first_keyspace", cluster);

これで接続は完了です。

データを追加する。

データを追加してみます。
テータの追加にはMutatorクラスを使用します。MutatorクラスでaddInsertionメソッドを実行してから、executeで更新を反映します。

Mutator mutator = HFactory.createMutator(keyspace, stringSerializer);
mutator.addInsertion("hoge", "first_table", HFactory.createStringColumn("value", "fuga"));
mutator.addInsertion("piyo", "first_table", HFactory.createStringColumn("value", "hage"));
mutator.execute();

PHPの時と違って、オブジェクトのシリアライザを指定する必要があるようです。良く使うので、static変数に保持してしまいます。

private static StringSerializer stringSerializer = StringSerializer.get();

データの追加処理を実行したら、CQLシェルで結果を確認してみます。

cqlsh:first_keyspace> select * from first_table;
 name | value
------+-------
 piyo |  hage
 hoge |  fuga
(2 rows)

確かに保存されています!

データを削除する。

今度は挿入したデータを削除してみます。
削除の場合もMutatorクラスを利用しますが、メソッドはdeleteメソッドを使用します。

Mutator mutator = HFactory.createMutator(keyspace, stringSerializer);
mutator.delete("hoge", "first_table", "value", stringSerializer);
mutator.execute();

deleteの第一引数が削除対象のプライマリキーです。

cqlsh:first_keyspace> select * from first_table;
 name | value
------+-------
 piyo |  hage
(1 rows)

hogeキーのデータが削除されました!

データを更新する。

データの更新もしてみます。

Mutator mutator = HFactory.createMutator(keyspace, stringSerializer);
mutator.addInsertion("piyo", "first_table", HFactory.createStringColumn("value", "hogera"));
mutator.execute();

データの更新も挿入と同様にMutatorクラスのaddInsertionメソッドでおこないます。
CassandraはKVSの一種なので、挿入と更新に区別がありません。だから、更新もaddInsertionメソッドでおこないます。CQLは、insertとupdateの両方が用意されていますが、あれはSQLに合わせて用意されているだけで、実体は同じものであるとのことです。

cqlsh:first_keyspace> select * from first_table;
 name | value
------+--------
 piyo | hogera
(1 rows)

更新ができました!

データを取得する。

取得が最後になってしまいましたが、最後にさきほど更新したpiyoキーのデータを、Hectorから取得してみます。
使用するのは、ColumnQueryクラスです。

ColumnQuery columnQuery = HFactory.createColumnQuery(keyspace, stringSerializer, stringSerializer,
		stringSerializer);
columnQuery.setColumnFamily("first_table").setKey("piyo").setName("value");
QueryResult> result = columnQuery.execute();

ColumnQueryオブジェクトはチェーンメソッドでクエリの設定を記述できます。この処理で、カラムキーがpiyoのローの、valueカラムの値を取得します。
取得結果のQueryResutlオブジェクトを出力してみます。

HColumn(value=hogera)

保存されていた値が取得できています!

まとめ

今回は、Hectorを使ってJavaからCassandraを操作してみました。
これで、JavaからもCassandraを利用できるようになりました!
スケーラビリティと可用性の高さで使い道が色々考えられるので、これから実際にどうやって使えるかを考えようと思います。

コメント

  1. […] Hectorで、JavaからCassandraを操作する。 […]

タイトルとURLをコピーしました