【かさんどら】
Cassandra(カサンドラ) とは?
最終更新:
💡 データを分けて、複製して、みんなで支える
複数のサーバーにデータを分散・複製して保存するApacheのワイドカラム型データベース。書き込みを重視した設計で、問い合わせに合わせてテーブルを設計する。応答を待つレプリカ数は整合性レベルで選ぶ。
📌 このページのポイント
- パーティションキーをもとにデータを分散・複製する
- 専用のマスターノードを置かず、各ノードが要求を受け付ける
- 整合性レベルで、応答を待つレプリカ数を選ぶ
- CQLを使い、必要な問い合わせからテーブルを設計する
データを、どうやって複数のサーバーに置くの?
リーダーがいないと、誰が受け付けるの?
専用のマスターノードはなく、要求を受け取ったノードがコーディネーターとして担当レプリカへ連絡するよ。ただし、どんな故障でも動き続けるわけではない。必要なレプリカの応答が得られなければ、その操作は成功しないんだ。
整合性レベルって、難しそう…。
「何個のコピーから返事を待つか」と考えると入りやすいよ。たとえば複製数が3なら、QUORUMは過半数の2つの応答を必要とする。クラスタ全体のサーバーの過半数ではないんだ。書き込みは担当レプリカすべてへ送り、応答をどこまで待つかを設定するよ。
書き込みでは、どんな工夫をしているの?
ノード内では、まずコミットログに記録し、次にメモリ上のMemtableへ書く。その後、データをディスクのSSTableへ書き出し、背景のコンパクションでファイルを整理するよ。書き込み向けの工夫はあるけれど、読み取りや背景処理の負荷も考える必要があるんだ。
CQLはSQLに似ているけれど、リレーショナルデータベースと同じではないよ。テーブル同士のJOINはできず、よく使う問い合わせを先に考えて、必要な列とキーを設計する。データの偏りやパーティションの大きさも、使い勝手や性能に影響するんだ。
📖 おまけ:英語の意味
「Apache Cassandra」 = アパッチ カサンドラ
💬 Apache Software Foundationのプロジェクトとして開発される分散データベースだよ。