CAP定理とは(全体像)
分散データベースは、データを複数のコンピュータに分けて持つ。便利だけど、3つの「あってほしい性質」を同時に全部はかなえられない、というのがCAP定理だよー。
身近にたとえると、はなれた3人で同じノートを共有する感じ。途中でネットが切れた(分断した)とき、「全員のノートをいつも同じにする(一貫性)」のと「とにかくすぐ返事する(可用性)」は、同時には成り立たないのー。
押さえるのは、3つのうち選べるのは2つまでということ。とくに分散ではネット分断(P)が避けられないので、現実にはCかAのどちらを優先するかを選ぶことになるよー。
詳しく:3つの性質とCP・APの選び方だけ覚えれば戦える
ここが記事の心臓部。まず3つの性質を見ていこーね。
CAPの3つの性質
| 文字 | 名前 | 意味 |
|---|---|---|
| C | 一貫性(Consistency) | どのコンピュータを見ても同じデータ |
| A | 可用性(Availability) | 常に応答が返ってくる |
| P | 分断耐性(Partition Tolerance) | ネットが切れても動き続ける |
ここで一番のひっかけが「3つ全部を同時に満たせる」という誤解。満たせるのは同時に2つまで。これがCAP定理だよー。
分散ではネット分断(P)は避けられないので、Pは確保したうえで、残りのCとAのどちらを優先するかを選ぶことになる。
CPとAPの選び方
| 選択 | 優先するもの | 代表 |
|---|---|---|
| CP | 一貫性(みんな同じ) | MongoDB・HBase |
| AP | 可用性(止まらない) | Cassandra・DynamoDB |
ここで2つめのひっかけが「PのPはPhysical(物理)の意味」という誤解。Pは「Partition Tolerance=分断耐性」(ネットが分断されても動く)の意味だよー。
なお、CAPを実用的に広げたPACELCという考え方もあって、分断があるときはCAP(CかA)、ふだん(分断なし)のときは「速さ(レイテンシ)か一貫性」を選ぶ、という見方をするのー。
わかりやすく言い換えると
要するに、はなれた3人のノート共有でイメージするとラクだよー。
①CAP定理 … 3つの良いこと(同じ・いつも応答・切れても動く)は、同時に2つまで
②CP … ネットが切れたら、無理に応答せず「みんな同じ」を守る(一貫性優先)
③AP … ネットが切れても、とにかく応答する(止まらないことを優先)
つまり、「3つのうち2つだけ」「分散ではCPかAPを選ぶ」、この2点が試験の急所なのー。
試験のツボ
🔴 一番出る:CAP定理(2つだけ)
①C=一貫性・A=可用性・P=分断耐性の3つ
②同時に満たせるのは2つまで(3つ全部は無理)
🔴 次に出る:CPとAPの選び方
①分散ではP(分断耐性)が避けられないので、CかAを選ぶ
②CPは一貫性優先(MongoDBなど)、APは可用性優先(Cassandraなど)
🟡 押さえると安定:Pの意味とPACELC
①PはPartition Tolerance(分断耐性)。Physical(物理)ではない
②PACELCはCAPの拡張で、ふだんは「速さか一貫性」も選ぶ
よくある間違い
①「CAPは3つの性質を同時に全部満たせる」→ ✗ 満たせるのは同時に2つまで。3つ全部は無理。
②「CAPのPはPhysical(物理)の意味である」→ ✗ PはPartition Tolerance(分断耐性)。ネットが切れても動くこと。
③「分散データベースは一貫性も可用性もいつも完全に両立する」→ ✗ 分断時はどちらかを優先する(CPかAP)。
試験での出題パターン
実際の問題でたしかめてみよう。
オリジナル問題1(CAP定理)
CAP定理に関する次の記述のうち、正しいものはどれか。
- CAPは3つの性質を常に同時に全部きっちり満たせる、という法則だとされているものである
- CAPは画面を3つに分割して表示するための決まりのことだとされているものである
- CAPは一貫性・可用性・分断耐性の3つのうち、同時に2つまでしか満たせない法則である
- CAPはデータを必ず3か所に複製するための命令のことだとされているものである
解答は 3 だよー。
CAP定理は、一貫性・可用性・分断耐性の3つのうち、同時に2つまでしか満たせないという法則なのー。はなれた3人のノート共有で、ネットが切れたら全部はかなわない感じだよー。
選択肢1の「全部満たせる」、選択肢2の「画面を3分割」、選択肢4の「3か所に複製」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | 同時に満たせるのは2つまで |
| 2 | ✗ | 画面分割の決まりではない |
| 3 | ✓ | 3つのうち2つまで |
| 4 | ✗ | 複製する命令ではない |
オリジナル問題2(CPとAP)
分散データベースのCP・APに関する次の記述のうち、正しいものはどれか。
- 分散では分断が避けられず、一貫性優先のCPか可用性優先のAPかを選ぶことになる
- 分散では常に一貫性も可用性も完全に両立でき、選ぶ必要はないものだとされている
- CPは可用性だけ、APは一貫性だけを優先する選び方のことだとされているものである
- CPもAPも画面の表示色を決めるための設定のことだとされているものである
解答は 1 だよー。
分散ではネット分断が避けられないので、一貫性優先のCP(MongoDBなど)か、可用性優先のAP(Cassandraなど)かを選ぶことになるのー。
選択肢2の「完全に両立」、選択肢3の「CPとAPが逆」、選択肢4の「表示色の設定」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✓ | 分断は避けられずCPかAPを選ぶ |
| 2 | ✗ | 分断時は両立できない |
| 3 | ✗ | CPは一貫性・APは可用性優先 |
| 4 | ✗ | 表示色の設定ではない |
オリジナル問題3(Pの意味)
CAPの「P」に関する次の記述のうち、正しいものはどれか。
- PはPhysical(物理)の意味で、機械の大きさを表すものだとされているものである
- Pは分断耐性のことで、ネットが切れても動き続けられることを表すものである
- Pは画面のピクセル数のことで、分散データベースとは無関係だとされているものである
- Pはプログラムを必ず3つに分ける決まりのことだとされているものである
解答は 2 だよー。
CAPの「P」は、分断耐性(Partition Tolerance)で、ネットが切れても動き続けられることなのー。Physical(物理)ではないので、取り違えないでねー。
選択肢1の「物理」、選択肢3の「ピクセル数」、選択肢4の「3つに分ける決まり」はどれも誤りなのー。
| 選択肢 | 判定 | 理由 |
|---|---|---|
| 1 | ✗ | Physicalではない |
| 2 | ✓ | 分断耐性・切れても動く |
| 3 | ✗ | ピクセル数ではない |
| 4 | ✗ | 3分割の決まりではない |
まとめ
押さえどころ
- 🔴 CAP定理 = 一貫性・可用性・分断耐性の3つのうち、同時に満たせるのは2つまで。
- 🔴 CPとAPの選び方 = 分散では分断(P)が避けられないので、一貫性優先のCPか可用性優先のAPを選ぶ。
- 🟡 Pの意味とPACELC = PはPartition Tolerance(分断耐性)。PACELCはふだん「速さか一貫性」も選ぶ拡張。
次に学ぶ
- NoSQL(4種類・BASE) ── 分散向けのデータベースとBASE。CAP定理と合わせて分散の理解が深まる。
- トランザクションACID ── 厳密さの4つの約束。分散では守りきれずCAPで折り合いをつける。
執筆: SikakuQuest編集部