Cassandra, Thriftを利用したAPIを確認する
Cassandraにデータアクセスする為に、Thriftを利用しています。
ただ、自分の物覚えが悪く、データ取得のイメージがしづらい為、何度かAPIを忘れてしまいました。
その為、記憶がすぐ蘇るように図を書いてみました。
(他に良い図の書き方があったら教えてください。)
利用しているAPI
CassandraのThrift clientには、いくつかの検索メソッドがあります。説明を読んだり、
コードを実行している分には、なんとなく理解した気になるのですが、どういう塊で
データを取得するんだっけ?という時によくイメージ出来なかったりします。
そこで、下記のメソッドを対象に、イメージを書いてみます。(表1. データ検索系のAPI)
表1. データ検索系のAPI
No | メソッド名 | 説明 |
---|---|---|
1 | get | 特定キーからカラムまたはスーパーカラム1つを取り出す |
2 | get_slice | スライスされたカラムまたはスーパーカラムの集合を返す |
3 | multiget | 複数キーに対して並列に複数getをこなす |
4 | multiget_slice | 複数キーに対して複数のget_sliceを並列にこなす |
イメージを書くにあたって、サンプルデータを下記に示します。
表2. サンプルデータ
Keyspace | ColumnFamily | Key | Column(Row) | value |
---|---|---|---|---|
Keyspace1 | Standard2 | michibatajessica | first | Jessica |
last | Michibata | |||
age | 25 | |||
Keyspace1 | Standard2 | sasakinozomi | first | nozomi |
last | sasaki | |||
age | 22 |
上記のデータを元に、APIのアクセスのイメージを現してみます。
図1. 【Cassandraのthrift clientの検索API】イメージ図
参照API「get」
Cassandraからカラムデータを取得する時に、「get」を利用することができます。
org.apache.cassandra.thrift.ColumnPathクラスを利用して、「setColumn」メソッドで
抽出対象カラム名を指定することにより、データを取得することができます。
参照API「get_slice」
Cassandraから複数のカラムデータを取得する時に、「get_slice」を利用することが
できます。
抽出対象を指定する方法は、2つあります。
データの取得のイメージは、青い線になります。
参照API「multiget」
「複数キーに対して並列に複数getをこなす」と説明文を書きましたが、緑色の線がイメージになります。
複数のキーを指定するときに、やはりListにつめて指定します。
参照API「multiget_slice」
「複数キーに対して複数のget_sliceを並列にこなす」という処理になります。
データ取得のイメージは、肌色になります。
まとめ
1つ1つのデータアクセスを確認すると難しくないのですが、格納されているデータに関して
どうやって取得すれば良いんだっけ?と思ったときに混乱しそうだと思いました。
また、範囲指定などをする時に、org.apache.cassandra.thrift.SliceRangeクラスを
利用するのですが、その後、org.apache.cassandra.thrift.SlicePredicateクラスに
条件(SliceRange)をつめなおすので、またイメージしづらかったりします。
SliceRangeクラスのsetStartメソッド、setFinishメソッドに関しては、storage-conf.xmlに
設定されているCompareWithを元に範囲指定できるみたいです。
細かい利用の仕方やデータの格納に関しては、もう少しいろいろ試してみて
紹介してみたいとおもいます。
「SuperColumn」を利用した場合のデータの取得の仕方や、「get_range_slice」「get_range_slices」など
まだ利用したことがないAPIもあります。
本当は、プログラム作成対象のユースケースを元に、いろいろ実装を試せば良かったのですが
そもそもCassandraのDBアクセスにはどんなものがあるのかイメージできなかったので、いろいろ
サンプルプログラムを作ってみました。
もう少しなにができるのか、また、Cassandraのデータモデルを図示するにはどんな書き方が
できるのかいろいろ試してみたいとおもいます。