Cassandraについて

分散ストレージのCassandraについて調査中。

CassandraはNoSQL(Not only SQL)データベースの一つ。TwitterやDiggがMySQLからCassandraに移行したことでも有名です。公式サイトのOverviewにもあるように特徴は以下のようになっています。

特徴

Proven (証明) Facebook, Twitter, Diggなど多くのサービスでの利用実績
Fault Tolerant (耐障害性) レプリケーションによりサーバがダウンしても自動復帰可能
Decentralized (分散) クラスタにより単一障害点がない
Eventually Consistent (結果整合性) 楽観的なデータ一貫性を提供
Rich Data Model (高度なデータモデル) 単純なKVSを超える機能を提供
Highly Available (高可用性) 一貫性のレベルを設定可能

分散ストレージを扱う上で、Eventually Consistent (結果整合性) は大切な概念なのでしっかり抑えておく必要があります。(参考:EventuallyConsistent – 結果整合性)

また、Cassandraはmemcachedのような従来のKVSよりリッチなデータ構造を提供していて、従来のKVSでは1つのkeyに対して1つのvalueを保持しますが、Cassandraではそのkeyの部分を4次元、もしくは5次元で扱うことができます。READMEに例が載っています。

Cassanndraの構造を図にしてみると以下のようになります。

RDBに置き換えると、Keyspaceがデータベース、ColumnFamilyがテーブル、keyが主キー、columnがテーブルのカラムにそれぞれ対応しているイメージです。5次元の場合はSuperColumn(columnのリスト)という次元が追加されます。columnはCassandraにおけるデータの最小単位で以下のような構造。nameがcolumnの名前、valueが値でその他にタイムスタンプも入っています。

インストール
CassandraはJavaで書かれています。(JDK 1.6以降が必要)

* 確認

以下からビルド済みバイナリを入手して任意の場所に置きます。
The Apache Cassandra Project
ログとデータベースを保存するディレクトリを作成し、パーミッションを変更。

起動、接続確認
フォアグラウンドで起動

データ操作
コマンドラインクライアント cassandra-cli を利用
(‘Test Cluster’で接続、デフォルトポートは9160)

データの登録/取得/削除の操作が直感的でわかりやすいですね。

で複数のカラムのvalueが取得できているところも単純なKVSとの違いです。

Cassandraの設定ファイルはconf/storage-conf.xml で、ここでKeyspaceやColumnFamily、ポート番号などを指定します。MySQLだとコマンドでtableを追加したりできますが、Cassandraの場合は起動前にこのファイルで追加することになります。

Perlクライアントの利用
ここではCPANの Net::Cassandra::Easy モジュールを使います。

* 結果

なかなか良いんではないでしょうか。Thriftで通信できるので他の言語からでも簡単に使えそうです。引き続き調査を進めたいと思います。

あわせて読む:

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です