最終更新日:2026年7月18日
ds design
まず結論
CAP定理とは、分散システムでネットワーク分断が起きたとき、一貫性(Consistency)と可用性(Availability)の両方を同時に完全には保証できないという原則です。
DS検定では、単に「3つから2つを選ぶ」と覚えるより、次のように判断します。
分断が起きたら、Cを優先するか、Aを優先するか
分散システムでは分断耐性Pを無視しにくいため、実際の議論は主にCPかAPかになります。
直感的な説明
複数サーバーに同じデータを保存している状況を考えます。
サーバー間の通信が切れたとき、片方のサーバーだけが更新を受け付けると、データが一時的に食い違う可能性があります。
このとき、設計には大きく2つの方向があります。
- Cを優先:正しい最新データを確認できないなら、一部の処理を拒否する
- Aを優先:多少の不一致を許してでも、各サーバーが応答を続ける
CAP定理は、通常時の性能比較ではなく、通信分断という異常時の選択を説明します。
定義・仕組み
| 要素 | 意味 |
|---|---|
| Consistency | すべてのクライアントが同じ最新データを読めること |
| Availability | 正常に動作しているノードへの各リクエストが応答を得ること |
| Partition tolerance | ノード間通信が分断されてもシステムが動作を続けること |
CP型
分断時に一貫性を優先します。
最新状態を確認できないノードでは、更新や読み取りを拒否する場合があります。
AP型
分断時に可用性を優先します。
各ノードが応答を続ける代わりに、一時的なデータ不一致を許します。通信復旧後に同期し、最終的に整合させる設計がよく使われます。
CA型
一貫性と可用性を両立しますが、ネットワーク分断を前提にしません。単一ノードや分断を考えなくてよい環境では考えられますが、大規模な分散システムではPが重要です。
どんな場面で使う?
金融・在庫管理
残高や在庫の不一致が大きな問題になるため、分断時にCを優先する設計が選ばれやすくなります。
SNS・ログ収集
一時的な表示差よりサービス継続を重視する場合、Aを優先する設計が選ばれやすくなります。
ただし、金融なら必ずCP、SNSなら必ずAPという固定ルールではありません。機能ごとに要件が異なります。
NoSQL・分散データベース
CAP定理はNoSQL専用ではありませんが、NoSQL製品の設計思想を説明する場面でよく使われます。
よくある誤解・混同
常に3つから2つを選ぶ
単純化しすぎです。重要なのは、分断が起きたときにCとAを同時に完全保証できないことです。
Availability=高速応答
異なります。CAPのAvailabilityは、各リクエストが応答を得る性質です。応答速度の速さそのものではありません。
CAPのConsistency=ACIDのConsistency
異なります。
| 用語 | 意味 |
|---|---|
| CAPのConsistency | 複数ノードから同じ最新値が見える |
| ACIDのConsistency | トランザクション前後でDBの制約・整合性が保たれる |
APは不整合を放置する
誤りです。AP型でも、通信回復後にデータを同期して最終的な整合性を目指します。
CPはシステム全体を必ず停止する
誤りです。一貫性を保証できない一部の操作やノードを利用不可にする場合があり、必ず全停止するとは限りません。
CAPとPACELC
CAPは分断時のCとAの選択を扱います。
PACELCはさらに、分断がない通常時でも、遅延(Latency)と一貫性(Consistency)のトレードオフがあると整理します。
- Pが起きたらAかC
- Else(通常時)はLかC
という考え方です。
まとめ(試験直前用)
- CAP定理は分散システムの原則
- 分断時にCとAを同時に完全保証できない
- CPは一貫性、APは可用性を優先
- Availabilityは高速性ではなく応答を返す性質
- CAPのConsistencyとACIDのConsistencyは意味が異なる
- APでも最終的な同期を目指す
- PACELCは通常時の遅延と一貫性も扱う
対応スキル項目(データエンジニアリング力シート)
- データ蓄積
- 分散技術
- 分散システム設計のトレードオフを説明できる
🔗 関連記事
- 確証バイアスとは?自分に都合のよい情報だけ集めてしまう心理【DS検定】
- データドリブンとは?勘や経験に頼らない意思決定【DS検定】
- データを読む・説明する・扱うとは?データリテラシー実践ガイド【DS検定】
- 特徴量(Feature)とは?機械学習で使う入力データを理解する【DS検定】
- 仮説思考とは?データ分析の出発点【DS検定】