オープンソースの分散データベース管理システムである。 元はFacebook社において大規模データの格納のために開発されたものである。 Facebookのデータチームを率いるJeff HammerbacherはCassandraをDynamoのようなインフラストラクチャ上で動作するBigTableデータモデルであると表現している。
Cassandraはイベンチュアル・コンシステンシーにより構造化されたキー・バリュー型データストアを提供する。 キーは複数の値にマッピングされ、これらはcolumn familyとしてグルーピングされる。 column familyはCassandraデータベースが作成される際は固定されているが、後にfamilyに対し列を追加することは可能である。 さらに、列は特定のキーにのみ追加されるので、どのfamilyにおいても異なるキーは任意の列数を持つことができる。 各キーに対応するcolumn familyの値は連続して記録され、このことによりCassandraは列指向データベースマネジメントシステムと行指向データベースシステムの複合型であると言える。
tiwtter, digg, facebookで現在も利用中。 アメリカ政府では400台のクラスタを構成して運用中。
- 列指向データベース
- 分散ハッシュテーブル
- カラムナデータ構造 ¥(カラム指向データ構造¥)
- CAP定理でいうAPが強い。一貫性は落ちる
- 一貫性はApp側で行う必要があり 複数のノードで分散してデータを保持する。このノードの集まりのことを「クラスタ」と呼ぶ。
- すべてのノードが同一の機能を持ち、1つのデータは複製されて同じクラスタ内の複数のノードに格納される。
- SPOFなし
- クライアントは、クラスタのどのノードに対してもデータの書き込みや読み込みをリクエストすることができる。 書き込みリクエストを受け取ったノードでは、トークンを計算してデータやその複製を保持するノードを決定する。
- 無停止でスケールアウトできる
- 書き込みが高速。読み込みはそれほど早くないけど最新バージョンを使うことでそれほど気にする必要はなくなる
- Hadoop Mapreduce 対応(ver 0.7 以降)
Cassandraのデータモデルは、「キースペース」「カラムファミリー」「キー」「スーパーカラム」「カラム」の5つの要素から構成される。 [キースペース]+[カラムファミリー]+[キー](+[スーパーカラム]+)[カラム]が、データを特定するためのキーとして扱われる。
ver0.7でサポートされた機能 日本語でちゃんと解説されているサイトはまだ見かけない。 みんな英語読んで自分が使えたらOKな感じで誰も翻訳してくれてない。 セカンダリインデックスの解説はここが一番詳しいと教えてもらったのでここを読んでかいつまんで解説する。 Secondary Indexes | DataStax Cassandra 0.7 Documentation About Indexes in Cassandra | DataStax Cassandra 1.0 Documentation
- Cassandra は銀の弾丸じゃないですよ。
- RDBMSと併用しながら使っている事例が多い。(ex.FacebookのInboxサーチ, twitterのログ解析)
主要NoSQLの種類と特性を整理--分散DBMS「Cassandra」も解説 - builder Developers summit cassandraで見るNoSQL へ~たのめも:Riak と Cassandra と HBase、あらまー! - livedoor Blog(ブログ) Cassandraとh baseの比較して入門するno sql
可用性-ネットワーク分断体制のラインを重視したプロダクト。
BrewersCapTheorem - ブリュワーの CAP 定理
http://www.hyuki.com/yukiwiki/wiki.cgi?BrewersCapTheorem
Cassandraのトランザクションサポート化 & web2pyによるcms用プラグイン開発
Cassandraの構造 - LunaBiblos
http://lunarium.info/arc/index.php/Cassandra%E3%81%AE%E6%A7%8B%E9%80%A0
Cassandraのしくみ データの読み書き編
http://www.slideshare.net/yukim/cassandra-3885571
Cassandraとh baseの比較して入門するno sql
http://www.slideshare.net/yutuki/cassandrah-baseno-sql