.. include:: ../../module.txt .. _section1-cassandra-introduction-label: Introduction ===================================================== Cassandraは Amazon Dynamoの分散デザインと、Google Bigtableのデータモデルを併せ持つ非中央集権型で、伸縮自在なスケール、高可用性、耐障害性、設定可能な一貫性を備えたカラム指向型データベースである。 .. _section1-1-cassandra-feature-label: Cassandraの特徴 ----------------------------------------------------- .. _section1-1-1-cassandra-feature-label: 非中央集権型分散データベース ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 多くのデータストアでは、マスター/スレーブ構成をとり、信頼できるリソースとしてのマスターをもとにスレーブ上にマスターのコピーを配置することになるが、Cassandraはいかなるノードも他のノードへの管理操作を持たず、全てのノードが同一のものとして扱われ、任意の特定のノードへの更新は同時に別のノードへも行われる。Cassandraはピアツーピアプロトコルを実装しており、ノード間でゴシッププロトコルを用いて、互いの生死を確認しながら分散システムを構築している。基本的にはデータセンターを跨がることを前提に設計されており、クラスタ間のいかなるノードにもデータを書き込める。こうしたアーキテクチャはマスター/スレーブ構成をもつデータストアとは異なり、単一障害点が存在しないことを意味する。 .. _section1-1-2-cassandra-feature-label: 伸縮自在なスケール ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 伸縮自在なスケーラビリティとは、クラスタがシームレスにスケールアウトとシュリンクを行うことが出来るということで、新しく参加するノードは全てのデータコピーを保持してクラスタ内に組み込まれる。新規ノードを追加する際も、Cassandraはクラスタ全体の再設定や、プロセスの再起動、データのリバランス等、これらの問題を回避してサービスを継続可能である。 .. _section1-1-3-cassandra-feature-label: 高可用性及び耐障害性 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cassandraはダウンタイムなしで、クラスタ内の障害のあったノードを交換することが出来、ローカルでのパフォーマンスを向上させたり、データセンタが被災した場合に備え、複数のデータセンタでデータをレプリケートすることを前提に設計されている。 .. _section1-1-4-cassandra-feature-label: 設定可能な一貫性 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cassandraは結果整合性をもつデータベースとよく呼ばれるが、ただしくは、設定可能な一貫性を持つデータベースである。正確ではない。一貫性はACID属性で言えば、読み手がお互いに矛盾したことなる値を参照することなく、データの状態がある状態へと正しく遷移することであるが、一貫性にはレベルがあり、Cassandraではクライアントが全ての更新においてブロックするレプリカ数をレプリケーションファクタによって制御可能である。 .. _section1-1-5-cassandra-feature-label: Row指向型データベース ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cassandraのデータ構造はバージョンによって異なる。 Cassandraはキーバリュー型のデータ(カラム)を一連にまとめたRowのまとまりであるカラムファミリ及び、それらをノード単位でまとめるキースペースををもつ多次元ハッシュテーブルのデータ構造を持つ。v0.7より前では、どのRowも1つかそれ以上のカラムを持ちながら、他のRowと全く同じカラムを持つ必要がないスキーマフリーな構造をとっていたが、v0.7以降オプションでスキーマ定義が可能となり、v1.1以降は、`スキーマ定義が必須 `_ となった。 .. _section1-2-cassandra-effective-usecase-label: Cassandraのメリットが活かせるユースケース --------------------------------------------------------------------------- 前述したCassandraのメリットを最大限生かすユースケースを列挙する。 .. _section1-2-1-cassandra-effective-usecase-label: 多数のコモディティサーバで構成されるアプリケーション ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 単一ノードのリレーショナルデータベースで賄える状況でCassandraを導入するのは適切ではない。最低でも複数ノードが必要な状況ではCassandraはよりよい選択肢となりえる。 .. _section1-2-2-cassandra-effective-usecase-label: 大量の書き込み、統計、解析 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cassandraは特に書き込みのスループットが高速になるよう最適化されている。初期から使用する多くの企業がユーザのアクティビティ更新、ソーシャルネットワーク、リコメンド/レビュー、アプリケーションの統計といったデータの保存に使用している。これらの利用例は大量の書き込みがある上に予測可能な読み込みが少ない点、更新も不均等に発生するためのノードの追加が容易なCassandraがフィットする案件と言える。近年では、IoTの代表格であるM2Mを用いたセンサーをクライアントにもつサーバ側のデータストアの選択肢として候補に挙げられるだろう。 .. _section1-2-3-cassandra-effective-usecase-label: 地域分散 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ Cassandraはデータの地域分散を標準でサポートする。複数のデータセンターに跨がってデータをレプリケートすることを簡単に行える。ユーザの近くでデータを置くことでパフォーマンスの上の利点があるグローバルな環境にデプロイするアプリケーションがフィットする。