以前にも少し試していましたが、改めてCassandraを触っています。
分散データベースApache CassandraをMac OS Xにインストール
CQLを使って、CassandraをSQLライクに操作する。
以前は、Hectorというライブラリを試してみましたが、今回はJava Driverライブラリを使ってみました。
Hectorで、JavaからCassandraを操作する。
Cassandra Java Driverとは?
Hectorと違って、Cassandra Java DriverはCQLでデータアクセス処理が記述できます。
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
これで本格的に運用するか検討しようと思います。