Cassandraのはじめ方─手を動かしてNoSQLを体感しよう

第5回 APIの全体像とデータの投入

この記事を読むのに必要な時間:およそ 5.5 分

前回でCassandraへのアクセスするコードの基本をおさえました。今回解説するのは以下の2点です。

  • CassandraのAPIの全体像
  • Cassandraにデータを投入するコードの詳細

3つの分類からAPIの全体像をおさえる

第1回でもご紹介しましたが,CassandraのクライアントAPIはThriftによって自動生成されます。APIは非常にシンプルなものが幾つかあるだけで,覚えるのもさほど難しくはありません。本連載ではその中からよく使うものに特化してご紹介していきます。

以下にCassandraのAPIを,データ挿入系・データ検索系・認証/管理系の3つに分類してまとめてみました。まずはこれらにひと通り目を通してみてください。

データ挿入/更新/削除のAPI

データ挿入,更新,削除のAPIは以下の表のとおりです。現実的によく使う中心的なAPIはbatch_mutate,removeの2つです。この連載でも幾度と登場することになるので,まずはこれらをおさえておいてください。

表1 データ挿入,更新,削除のAPI

メソッド名説明
insertカラムファミリかスーパーカラム内に1件カラムを挿入する
batch_insert同一キー内のカラムやスーパーカラムを一括挿入する※1
batch_mutateバッチ的に複数のカラムまたはスーパーカラムを更新する
remove特定行のデータまたはカラムファミリまたはスーパーカラムを指定して削除する
※1
廃止予定。batch_mutateを使ってください。

データ検索系

データ検索系の中心となるのはget_slice,get_range_slicesの2つです。特定のキーまたはキーのグループがわかっている場合にはmultiget_sliceを使うといいでしょう。検索結果が無い場合の挙動がそれぞれのAPIで多少違うので,あわせて付記しておきました。

表2 データ検索系のAPI

メソッド名説明検索結果が無い場合の挙動
get特定キーからカラムまたはスーパーカラム1つを取り出すNotFoundExceptionが発生する
get_sliceスライスされたカラムまたはスーパーカラムの集合を返す空のListを返す
multiget複数キーに対して並列に複数getをこなす値のカラムまたはスーパーカラムが空のMapを返す※2
multiget_slice複数キーに対して複数のget_sliceを並列にこなす値のカラムまたはスーパーカラムが空のMapを返す
get_countカラムファミリまたはスーパーカラム内のカラム数を数える0を返す
get_range_sliceキーレンジでカラムのサブセットを返す空の配列を返す※3
get_range_slicesキーレンジでカラムのサブセットを返す空の配列を返す
※2
廃止される予定。代わりにmultiget_sliceを使ってください。
※3
廃止される予定。get_range_slicesを使ってください。

認証/管理系API

認証管理系のAPIで重要なのは,認証を行うloginです。loginでどのような挙動を行うかは設定により変更可能です。

運用・管理については,じつは別途nodetool,nodeprobeといったツールが準備されているので,APIよりそちらを利用するのが一般的です。しかし,プログラム経由で運用・管理を行いときのために知っておくとよいでしょう。

表3 認証/管理系API

メソッド名説明
loginキースペースごとに認証する
get_string_propertyノードやクラスタ情報をキー指定で取り出す※4
get_string_list_propertyノードやクラスタ情報を取り出す※5
describe_keyspacesキースペースを取り出す
describe_cluster_nameクラスタ名を取得する
describe_versionThrift APIのバージョン名を取得する
describe_ringトークンのレンジとホストアドレスのリングを表示する
describe_keyspaceキースペース内のカラムファミリ名とその属性のMapを取得する
describe_splitsHadoopの並列処理クエリ用の実験的なAPI※6
※4
0.7で廃止・削除される予定です。
※5
0.7で廃止・削除される予定です。
※6
現状まだ安定していません。

カラムを1つ挿入する

では,Cassandraへの操作を書いていきましょう。まずはデータがないと何もならないので,データを入れてみます。前回もデータ挿入のサンプルをご紹介しましたが,Cassandraへデータを入れるには大きく分けて2つの方法があります。

  1. insertでカラムを1つづつ入れていく
  2. batch_mutateでバッチ的に一気にデータを投入する

前出の表1にはbatch_insertというAPIも記載しましたが,今後廃止予定になっているので本連載では割愛します。ひとまず,前回の振り返りでinsertでカラムを挿入するところからはじめてみましょう。

カラムを1つ挿入するにはinsertを使います。insertは以下の引数をとります。

void insert(String keyspace, 
            String key, 
            ColumnPath column_path, 
            byte[] value, 
            long timestamp, 
            ConsistencyLevel consistencyLevel)

著者プロフィール

大谷晋平(おおたにしんぺい)

オープンソースプログラマ。WebフレームワークT2の開発をしながらHadoop/NoSQLミドルウェアにも手を出す。最近ではもっぱらHadoop,Cassandra,Avro,kumofsなどに興味津々。

blog:http://d.hatena.ne.jp/shot6/

Twitter:http://twitter.com/shot6/

コメント

コメントの記入