データベーススペシャリスト 2021年 午前2 問01
問題文
CAP定理に関する記述として適切なものはどれか。
選択肢
ア:システムの可用性は基本的に高くサービスは利用可能であるが整合性については厳密ではない。しかし最終的には整合性が取れた状態となる。
イ:トランザクション処理はデータの整合性を保証するので実行結果が矛盾した状態になることはない。
ウ:複数のトランザクションを並列に処理したときの実行結果と直列で逐次処理したときの実行結果は一致する。
エ:分散システムにおいて整合性可用性分断耐性の三つを同時に満たすことはできない。(正解)
🔒 解説は解答すると表示されます
CAP定理【午前2解説】
正解の理由
分散システムにおける「整合性(Consistency)」「可用性(Availability)」「分断耐性(Partition tolerance)」の三つを同時に完全に満たすことは理論的に不可能である、という主張がCAP定理です。ネットワーク分断(通信遮断や遅延による切断)が発生した際、システムは整合性と可用性のどちらか一方を犠牲にする必要があります。したがって選択肢のうち正しいのは エ です。
補足として、CAP定理の形式的な分析・証明としては、セス・ギルバート(Seth Gilbert)とナンシー・リンチ(Nancy Lynch)による論文(2002年)が知られており、この形式化によってCAPのトレードオフが厳密に示されています。
解法ステップ
- 各用語の定義を思い出す
- 整合性(C):全ノードが同一のデータビューを持つこと(しばしば強い整合性=線形化可能性・一貫した単一の状態と解釈される)。
- 可用性(A):各リクエストに対して常に応答(成功または失敗)を返すこと(単に「稼働率が高い」こととは異なる)。
- 分断耐性(P):ネットワーク分断が起きても動作を続ける能力(分断時の動作を許容すること)。
- CAP定理の主旨を確認する:ネットワーク分断が発生した場合に、CとAを同時に保証することはできない。
- 各選択肢を定義に照らして検討し、CAPの主張と合致するものを選ぶ。
- 他の選択肢はCAPの範囲外の誤解や限定条件を含むため除外する。
選択肢別の誤答解説
- ア: 「可用性は高いが整合性は厳密でない。最終的には整合性が取れる」
→ この記述は「最終的整合性(eventual consistency)」の説明に近いですが、CAP定理そのものがこれを保証するわけではありません。CAPは分断時にCとAのどちらかを放棄しなければならないことを示す定理であり、「最終的に整合性が取れる」と断言するのは一般化し過ぎです。したがって問題文としては不適切です。 - イ: 「トランザクション処理はデータの整合性を保証するので矛盾は起きない」
→ トランザクション(特にACIDのモデル)は単一システム内での整合性を保証する設計ですが、分散環境や不適切な実装、並行性制御の緩和(弱い隔離レベル)では矛盾が発生し得ます。さらにCAP定理は分散システムの三要素のトレードオフを扱うため、この選択肢は文脈がずれています。 - ウ: 「並列実行の結果と直列実行の結果は一致する」
→ これは「直列化可能性(serializability)」の定義であり、すべての並列実行が必ず直列化可能になるとは限りません。データベースの隔離レベルや実装によっては一致しないこともあるため一般的な真とは言えません。 - エ: 「分散システムにおいて整合性可用性分断耐性の三つを同時に満たすことはできない」
→ これがCAP定理の正しい表現です。分断(P)が起きた際、CとAの同時保証は不可能であるため、設計上どちらを優先するかの選択が必要になります。
よくある誤解
- CAPの「整合性(C)」をACIDの「一貫性」と同一視する誤り
→ CAPのCは分散ノード間での一貫したビュー(しばしば強い整合性=線形化可能性に相当)を指すが、ACIDの「一貫性」はトランザクション後のデータが整合性制約を満たすという意味で文脈が異なる。混同すると誤答の原因になります。 - CAPは常にCとAの両立が不可能だと考える誤り
→ CAPによるトレードオフは「ネットワーク分断が発生した場合」に問題となる。分断がない平常時はCとAの両方を確保できる場合もあります。 - 「可用性=稼働率」だけと捉える誤り
→ CAPの可用性は「すべてのリクエストに対して応答を返す(応答が必ず得られる)」という意味合いで、単なる高稼働とは異なります。分断時に古いデータで応答する設計は可用性を優先した選択です。
補足コラム
- 形式化の歴史と発展:CAP定理は最初に概念として示され、後にセス・ギルバートとナンシー・リンチ(2002年)の論文で非同期ネットワークモデルにおける形式的分析が示されました。これによりCAPのトレードオフが理論的に明確化されました。
- 実務的な対応例:
- CP寄り(整合性優先)実装:PaxosやRaftを用いる分散データストア(例:一部の構成のHBase、etcd)。分断時は整合性を保つために書き込みを止めるなどして可用性を犠牲にする。
- AP寄り(可用性優先)実装:Dynamo系(Cassandra、DynamoDBの一部設定)で、分断時も応答を続けるが最終的整合性を目指す。
- 関連定理:PACELC(Daniel Abadi)は「分断があればPの時にAとCのトレードオフ、分断がなければレイテンシーと整合性のトレードオフ」を示し、実務設計の判断材料として有用です。
FAQ
Q: CAP定理は実システム設計でどう使えばよいですか?
A: ネットワーク分断が発生した場合にどちらを犠牲にするか(整合性か可用性か)を事前に決め、レプリケーション方式や合意アルゴリズム(Paxos/Raft等)を選ぶ際の指針としてください。
A: ネットワーク分断が発生した場合にどちらを犠牲にするか(整合性か可用性か)を事前に決め、レプリケーション方式や合意アルゴリズム(Paxos/Raft等)を選ぶ際の指針としてください。
Q: 「最終的整合性」はCAPによって保証されますか?
A: いいえ。最終的整合性はAP寄りの設計方針の一つであり、CAP定理が自動的に保証するものではありません。実装(レプリケーションやコンフリクト解消戦略)によって実現されます。
A: いいえ。最終的整合性はAP寄りの設計方針の一つであり、CAP定理が自動的に保証するものではありません。実装(レプリケーションやコンフリクト解消戦略)によって実現されます。
Q: CAPの正式証明は誰が行ったのですか?
A: セス・ギルバート(Seth Gilbert)とナンシー・リンチ(Nancy Lynch)が2002年に分散システムのモデルで形式的に扱った研究が広く参照されています。
A: セス・ギルバート(Seth Gilbert)とナンシー・リンチ(Nancy Lynch)が2002年に分散システムのモデルで形式的に扱った研究が広く参照されています。
関連キーワード: CAP定理、整合性、可用性、分断耐性、分散システム、セス・ギルバート、ナンシー・リンチ、最終的整合性、Paxos、Raft、PACELC

\ せっかくなら /
データベーススペシャリストを
クイズ形式で学習しませんか?
クイズ画面へ遷移する→
すぐに利用可能!

