データベーススペシャリスト – CAP定理(ブリュワー定理)

IT業界そこそこ長いんですが、さっぱりわからないCAP定理について学んでみる。

いまの僕の脳内では帽子しかないです、やや申し訳ない。

CAP定理とは(Wikipedia Ver)

CAP定理はブリュワーの定理とも呼ばれ、分散コンピュータシステムのマシン間の情報複製に関する定理。

ウェブサービスを想定して作られた定理。

ノード間のデータ複製において、同時に次の3つの保証を提供することはできない。

一貫性 (Consistency)

すべてのデータ読み込みにおいて、最新の書き込みデータもしくはエラーのどちらかを受け取る。

可用性 (Availability)

ノード障害により生存ノードの機能性は損なわれない。

つまり、ダウンしていないノードが常に応答を返す。

単一障害点が存在しないことが必要。

分断耐性 (Partition-tolerance)

システムは任意の通信障害などによるメッセージ損失に対し、継続して動作を行う。

通信可能なサーバーが複数のグループに分断されるケース(ネットワーク分断)を指し、1つのハブに全てのサーバーがつながっている場合は、これは発生しない。

ただし、そのようなネットワーク設計は単一障害点をもつことになり、可用性が成立しない。

RDBではそもそもデータベースを分割しないので、このような障害とは無縁である。

※上記はWikipediaのCAP定理からの引用になります。

CAP定理とは(自分Ver)

3つ性質があって3つ同時には満たせないということですね。

一貫性 (Consistency)

データを読み込むとき、最新データを読み込むかエラーが返ってくるかどちらかになる性質です。

可用性 (Availability)

データテーブルに障害が発生しても、障害が発生してないデータテーブルが結果を返します。

分断耐性 (Partition-tolerance)

データベースが分割しておいてあって、ネットワーク障害があった場合も動作は継続します。

リレーショナル・データベースは分割しない単一のDBなので、分断耐性は関係ないです。

3つ同時に満たせない理由

最新のデータを返すかエラーという一貫性を担保しようとします。

障害が発生してない(古い)データテーブルからデータを取ってくる仕組みだと、矛盾することがあると思います。

たぶんそういうことと思います(たぶんかい)。

完全に理解してなくても仕事はできると思うので、雰囲気だけ理解してめげずにがんばっていこう。涙