「phpcassaで、PHPからCassandraを操作する。」に続いて、今度はJavaからCassandraを操作してみます。
JavaのCassandraライブラリHector
JavaのCassnadraライブラリもいくつかあるのですが、今回はHectorというライブラリを使ってみます。
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を利用できるようになりました!
スケーラビリティと可用性の高さで使い道が色々考えられるので、これから実際にどうやって使えるかを考えようと思います。
コメント
[…] Hectorで、JavaからCassandraを操作する。 […]