データベーススペシャリスト 2023年 午前2 問01
問題文
CAP定理に関する記述として、適切なものはどれか。
選択肢
ア:システムの可用性は基本的に高く、サービスは利用可能であるが、整合性については厳密ではない。しかし、最終的には整合性が取れた状態となる。
イ:トランザクション処理は、データの整合性を保証するので、実行結果が矛盾した状態になることはない。
ウ:複数のトランザクションを並列に処理したときの実行結果と、直列で逐次処理したときの実行結果は一致する。
エ:分散システムにおいて、整合性、可用性、分断耐性の三つを同時に満たすことはできない。(正解)
🔒 解説は解答すると表示されます
CAP定理の制約【午前2解説】
正解の理由
CAP定理は分散システムが持ちうる基本的特性のトレードオフを示します。要点は「ネットワーク分断(Partition)が発生する場合、整合性(Consistency)と可用性(Availability)を同時に完全に満たすことはできない」というもので、選択肢の中では エ がこれを正確に表現しています。学術的にはこの命題はEric Brewerの提起(Brewerのコンジェクチャ)を受けて、Seth Gilbert と Nancy Lynch によって形式的に示されています(Gilbert & Lynch, 2002)。よって分散環境で分断が起きた際にはCとAのどちらかを犠牲にする設計上の判断が必要であり、これがCAP定理の核心です。
解法ステップ
- 用語を明確にする(Consistency=単一の一貫した見え方、Availability=各要求に対し応答を返すこと、Partition tolerance=ネットワーク分断を許容すること)。
- 問題の前提を確認する(CAP定理は分断が起きうる分散システムを前提とする)。
- 選択肢を上の定義に照らして評価する(分断が起きる場合に三者を同時に満たせるかどうかを考える)。
- 分断発生時にCとAの両立が不可能である点を示す記述を正答とする。
選択肢別の誤答解説
- ア: 「可用性が高く最終的に整合性が取れる」という記述は「最終的一貫性(eventual consistency)」の説明に近く、AP寄りの設計を表しています。しかしCAP定理そのものは『分断が起きたときにCとAを同時に満たせない』ことを主張するため、文面が状況依存で一般命題としては不十分です。よって不正解。
- イ: トランザクション処理が整合性を保証するというのは単一ノードやACIDを前提とした場合の説明で、分散環境でネットワーク分断が起きると可用性の確保と整合性保持の間でトレードオフが生じます。したがって「常に矛盾が起きない」とするのは誤り。
- ウ: 「並列実行の結果が直列実行と一致する」は直列化可能性(Serializability)や並行制御に関する性質で、CAP定理の主題(C/A/Pのトレードオフ)とは異なります。分散環境では直列化を保つために性能や可用性を犠牲にする場合があり、CAPの主張とは別軸の概念です。
- エ: 分散システムにおける整合性(C)、可用性(A)、分断耐性(P)の三つを同時に完全に満たすことはできない、という点を正確に述べており、CAP定理の要旨と一致します。よってこれが正答です。
よくある誤解
- 「CAPは常に三者のうち二つしか選べない」——誤り。ネットワーク分断が発生しない理想的な状況ではC・A・Pを実質的に満たすことが可能ですが、CAP定理が問題にするのは「分断が発生した場合」です。
- 「整合性=厳密な即時整合性だけを指す」——誤解。CAPの「Consistency」は単一の一貫性(single-copy consistency/linearizability 相当)を指すことが多く、最終的一貫性などの弱い整合性は“C”とは別に扱われます。
- 「CAPだけで設計方針が全て決まる」——誤り。実務ではPACELCなど、分断発生時と平常時のトレードオフをより細かく扱う理論もあり、チューニングや一貫性レベルの選択が重要です。
補足コラム
- 起源と証明: CAP定理はEric Brewerの提案(2000年頃)に始まり、その後Seth GilbertとNancy Lynchが2002年に形式的に示しました(Gilbert & Lynch, 2002)。この論文は分散アルゴリズムの観点から、ネットワークの非同期性と分断を前提にしてC・A・Pの不可共同性を論証しています。
- 実システムの例:
- AP志向の例:Dynamo、Cassandra(可用性と分断耐性を重視し、最終的一貫性を採用することが多い)
- CP志向の例:HBase、etcd(整合性と分断耐性を重視し、分断時は可用性を犠牲にする場合がある)
- 発展理論: PACELC(分断時はPでのトレードオフ、分断がない時はLatencyとConsistencyのトレードオフ)など、CAPを補完する考え方が用いられます。
FAQ
Q: CAP定理は「どちらか二つしか選べない」と覚えて良いですか?
A: 分断が発生することを前提にすれば、実質的にCとAの両立は不可能なので「どちらかを犠牲にする」と覚えて差し支えありません。ただし分断の有無や整合性の強さによって実運用での取り扱いは異なります。
A: 分断が発生することを前提にすれば、実質的にCとAの両立は不可能なので「どちらかを犠牲にする」と覚えて差し支えありません。ただし分断の有無や整合性の強さによって実運用での取り扱いは異なります。
Q: 最終的一貫性(eventual consistency)はCAPのCに含まれますか?
A: 含まれません。CAPでいうCはより強い単一コピー一貫性(linearizabilityや強い一貫性)に近い概念です。最終的一貫性は弱い整合性戦略の一つです。
A: 含まれません。CAPでいうCはより強い単一コピー一貫性(linearizabilityや強い一貫性)に近い概念です。最終的一貫性は弱い整合性戦略の一つです。
Q: CAPの主張は理論的に証明されているのですか?
A: はい。Brewerの経験的・直感的提案に対し、Seth Gilbert と Nancy Lynch が2002年に形式的に示しています。
A: はい。Brewerの経験的・直感的提案に対し、Seth Gilbert と Nancy Lynch が2002年に形式的に示しています。
関連キーワード: CAP定理, 整合性, 可用性, 分断耐性, Gilbert and Lynch, Brewer, eventual consistency, PACELC, 分散システム, 直列化可能性

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

