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

以前にも少し試していましたが、改めてCassandraを触っています。
分散データベースApache CassandraをMac OS Xにインストール
CQLを使って、CassandraをSQLライクに操作する。
以前は、Hectorというライブラリを試してみましたが、今回はJava Driverライブラリを使ってみました。
Hectorで、JavaからCassandraを操作する。

Cassandra Java Driverとは?

Hectorと違って、Cassandra Java DriverはCQLでデータアクセス処理が記述できます。
スクリーンショット 2014-09-17 22.35.25
DataStax Java Driver 2.0 For Apache Cassandra Documentation
SQLなら使えるメンバーも多く、学習コストが少なそうです。早速試してみます。

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

ライブラリの導入は、Mavenからおこないました。


	com.datastax.cassandra
	cassandra-driver-core
	2.1.0

これで完了です。簡単です。

Cassandraに接続

クイックスタートを見ながら、コードを書いていきます。
Connecting to a Cassandra cluster
まずはCassandraへ接続します。接続先ホストを指定して、Clustorインスタンスを作成し、connectメソッドで接続します。

Cluster cluster = Cluster.builder().addContactPoint("127.0.0.1").build();
Session session = cluster.connect();

これで接続は完了です。

データを追加する。

データを追加してみます。
Using a session to execute CQL statements
executeメソッドでCQLを実行するだけなので単純です。

session.execute("INSERT INTO first_keyspace.first_table (name, value) VALUES ('hoge', 'fuga');");
session.execute("INSERT INTO first_keyspace.first_table (name, value) VALUES ('piyo', 'hage');");

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

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

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

データを削除する。

今度は挿入したデータを削除してみます。
SQLライクに操作できるので、類推で記述できます。

session.execute("DELETE FROM first_keyspace.first_table WHERE name = 'hoge';");

CQLシェルから確認します。

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

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

データを更新する。

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

session.execute("UPDATE first_keyspace.first_table SET value = 'hogera' WHERE name = 'piyo';");

CQLシェルから確認します。

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

更新ができました!

データを取得する。

取得が最後になってしまいましたが、最後にさきほど更新したpiyoキーのデータを、Java Driverから取得してみます。
ここでも使うのはexecuteメソッドですが、戻り値を受けるようにします。

ResultSet resultSet = session.execute("SELECT * FROM first_keyspace.first_table WHERE name = 'piyo';");
for (Row row : resultSet)
	System.out.println(row);

取得結果のRowを表示してみます。

Row[piyo, hogera]

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

まとめ

以前はHectorを使って操作してみましたが、今回は、Java Driverを使ってJavaからCassandraを操作してみました。
SQLっぽく操作できるので心理的な障壁がぐっと下がるのは良いです。
実際には、こんな風にクエリを書くことは少なくて、プリペアードステートメントを使いたくなるんですが、それもちゃんと用意されています。
Using bound statements
これで本格的に運用するか検討しようと思います。

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