Cassandra
前提知識
アーキテクチャ
- カラム指向データベース
- CAPによる分類ではAP型に相当
- コンシステントハッシング法
- データのパーティションキー (後述) のハッシュからトークンを生成し、データのトークンに依ってそのデータを保持するノードを決定する
- ゴシップベースでのクラスタ内のノードの情報共有と障害検知
- ネットワークトポロジの自動検出 (Snitch)
- クラスタ内のどのノードに対してもクエリを発行できる
- 要求を受けたノードは調整ノード (coordinator) としてデータを保持するノードにクエリを中継する
- クエリごとに一貫性レベル (Quorumに相当) を指定できる
- データを保持すべきノードに障害が発生している場合、調整ノードが書き込みクエリの情報を一定時間保持し、ノードがクラスタに復帰したときにそれを転送する (Hinted Hand-off)
- クラスタのネットワークトポロジを考慮したレプリケーション戦略 (オプション)
- ラックやデータセンタを跨るレプリケーションにも対応できる
- データセンタごとにレプリカ数を指定できる
- 追記型のコミットログと読み込み専用のデータファイル SSTable (Sorted String Table) による永続化
- ブルームフィルタアルゴリズムによりキーの検索対象となるSSTableファイルを絞り込む
- バックグラウンドで複数のSSTableを1つに統合するコンパクション機能
- データの読み込み時に一時的な障害などにより古くなったレプリカを自動的に検出して修復できる (Read Repair)
- Paxosを合意アルゴリズムとする軽量トランザクション (read-before-write, 並行プログラミングのCAS操作に相当)
参考
TODO