【かさんどら】

Cassandra(カサンドラ) とは?

最終更新:
💡 データを分けて、複製して、みんなで支える

複数のサーバーにデータを分散・複製して保存するApacheのワイドカラム型データベース。書き込みを重視した設計で、問い合わせに合わせてテーブルを設計する。応答を待つレプリカ数は整合性レベルで選ぶ。

📌 このページのポイント
データを分担し、コピーも置くノードAXのコピーノードBXのコピーノードCXのコピーノードD他のデータトークンリング担当する範囲を輪で表す複製3つなら、QUORUMは2つの応答
リングはデータ配置のイメージで、物理的な配線ではありません。緑の3ノードはデータXのコピーを持つ設定例。QUORUMは対象データのレプリカの過半数です。
ひよこ ひよこ
データを、どうやって複数のサーバーに置くの?
ペンギン先生 ペンギン先生
パーティションキーのハッシュ値をもとに、担当するノードを決めるよ。そのデータのコピーも複数のノードに保存する。配置の範囲を輪で表すのがトークンリングで、サーバーを輪の形に配線するという意味ではないんだ。
ひよこ ひよこ
リーダーがいないと、誰が受け付けるの?
ペンギン先生 ペンギン先生
専用のマスターノードはなく、要求を受け取ったノードがコーディネーターとして担当レプリカへ連絡するよ。ただし、どんな故障でも動き続けるわけではない。必要なレプリカの応答が得られなければ、その操作は成功しないんだ。
ひよこ ひよこ
整合性レベルって、難しそう…。
ペンギン先生 ペンギン先生
「何個のコピーから返事を待つか」と考えると入りやすいよ。たとえば複製数が3なら、QUORUMは過半数の2つの応答を必要とする。クラスタ全体のサーバーの過半数ではないんだ。書き込みは担当レプリカすべてへ送り、応答をどこまで待つかを設定するよ。
ひよこ ひよこ
書き込みでは、どんな工夫をしているの?
ペンギン先生 ペンギン先生
ノード内では、まずコミットログに記録し、次にメモリ上のMemtableへ書く。その後、データをディスクのSSTableへ書き出し、背景のコンパクションでファイルを整理するよ。書き込み向けの工夫はあるけれど、読み取りや背景処理の負荷も考える必要があるんだ。
ひよこ ひよこ
普通のSQLデータベースと同じ使い方でいい?
ペンギン先生 ペンギン先生
CQLはSQLに似ているけれど、リレーショナルデータベースと同じではないよ。テーブル同士のJOINはできず、よく使う問い合わせを先に考えて、必要な列とキーを設計する。データの偏りやパーティションの大きさも、使い勝手や性能に影響するんだ。
ペンギン
まとめ:ざっくりこれだけ覚えればOK!
「Cassandra」って出てきたら「データを複数のサーバーで分担・複製するデータベース」と思えばだいたいOK!
📖 おまけ:英語の意味
「Apache Cassandra」 = アパッチ カサンドラ
💬 Apache Software Foundationのプロジェクトとして開発される分散データベースだよ。

参考資料

← 用語集にもどる