1.はじめに
Apache Cassandraは、高い可用性とスケーラビリティを実現する分散型NoSQLデータベースです。
一方で、分散データベースならではの考え方として、「Consistency Level(整合性レベル)」という仕組みがあります。
私も最初は、
「ALLに設定しておけば、一番安全なのでは?」
と思っていました。
しかし調べてみると、整合性を高くすればするほど、レスポンスや可用性にも影響があり、必ずしもALLが最適というわけではありません。
そこで本記事では、
- Cassandraで整合性レベルが必要になる理由
- ONE・QUORUM・ALLの違い
- ALLを選択する際のデメリット
について、図を交えながら解説します。
2.Cassandraをおさらい
まずは、Cassandraがどのようなデータベースなのか簡単に振り返ります。
Apache Cassandraは、
- 分散型NoSQLデータベース
- データを複数のノードへ複製して保存
- ノード障害が発生してもサービスを継続できる
という特徴があります。
例えば3台のノードで構成されている場合、
同じデータを複数台へ保存することで、高い可用性を実現しています。

3.なぜ整合性レベルが必要なのか
分散データベースでは、すべてのノードが常に同じ状態とは限りません。
下記のような状態の場合、更新前のデータが返ってきてしまいます。
このような状況で、
「何台のノードへの読み書きを成功とみなすか」
を決める仕組みが、
Consistency Level(整合性レベル)
です。
4. Consistency Levelの種類
代表的な整合性レベルは次の3つです。
| 整合性レベル | 成功条件 |
|---|---|
| ONE | 1台成功すれば成功 |
| QUORUM | 過半数のノードが成功すれば成功 |
| ALL | すべてのノードが成功すれば成功 |
それぞれ特徴があります。
①ONE
ONEは、
1台のノードが応答すれば成功
となります。
メリット
- レスポンスが速い
- ノード障害に強い
デメリット
更新されていないノードへアクセスすると、
古いデータを取得する可能性があります。
そのため、
速度を最優先したいケースで利用されます。
②QUORUM
QUORUMは、
過半数のノードが成功すれば成功
となります。
例えば、
複製・保存する数が3つの場合、
QUORUM = 2台
になります。
メリット
- 整合性と性能のバランスが良い
- 1台障害でも処理を継続できる
そのため、
実際の運用では最もよく利用される整合性レベルです。
③ALL
ALLは、
すべてのノードが成功して初めて成功
となります。
一見すると、
一番安全そう
に思えます。
しかし、実際にはデメリットもあります。
5.ALLのデメリット
① 1台でも障害があると失敗する
例えば3台構成の場合、
Node A:〇
Node B:〇
Node C:×
だった場合、
Node AとNode Bにはデータが保存できています。
しかし、
ALLでは
書き込み失敗
となります。
つまり、
1台でも障害があると全体が失敗扱い
になります。
②レスポンスが遅くなる
ALLでは、
すべてのノードの応答を待つ必要があります。
例えば、
Node A:10ms
Node B:15ms
Node C:300ms
だった場合、
処理時間は
300ms
になります。
遅いノードが1台あるだけで、
全体のレスポンスが悪化してしまいます。
③ メンテナンス中でも失敗しやすい
例えば、
ノード1台を再起動しているだけでも、
ALLでは成功条件を満たせません。
そのため、
運用やメンテナンスの影響を受けやすくなります。
6.QUORUMがよく利用される理由
例えば、
複製・保存するノード数が3つの場合、
QUORUM = 2
になります。
つまり、
Node A:〇
Node B:〇
Node C:×
でも処理は成功します。
また、過半数の場合常に最新データを取得することが可能です。
書き込み(QUORUM)
Node A ○
Node B ○
Node C ×
↓
読み取り(QUORUM)
Node A ○
Node B ×
Node C ○
書き込み時と読み取り時で、Node A が共通しています。
このように必ず1台以上のノードが重なるため、最新データを取得できます。
そのため、整合性・性能・可用性のバランスが良く、実運用ではQUORUMが選択されるケースが多くあります。
7.結局どれを選択すべきか?
用途によって選択する整合性レベルは異なります。
| 用途 | おすすめ |
|---|---|
| 高速なレスポンスを優先 | ONE |
| 整合性と性能のバランスを重視 | QUORUM |
| 全ノードへの反映を保証したい | ALL |
重要なのは、
「ALLだから最強」
ではないということです。
整合性を高めれば、
レスポンスや可用性は低下します。
逆に、
性能を重視すると、
古いデータを取得できてしまう可能性があります。
8.まとめ
Consistency Levelは、
何台のノードへの読み書きを成功とみなすか
を決める仕組みです。
- ONE:高速だが古いデータを取得する可能性がある
- QUORUM:整合性・性能・可用性のバランスが良い
- ALL:整合性は高いが、可用性やレスポンスが低下する
Cassandraでは、「とにかく整合性を高くする」のではなく、
システムの要件に合わせて整合性レベルを選択すること
が重要です。
整合性・可用性・性能のトレードオフを理解することで、Cassandraの設計思想がより理解しやすくなるのではないでしょうか。
最後まで読んでいただき、ありがとうございました!

