なみひらブログ

学んだことを日々記録する。~ since 2012/06/24 ~

CAP定理

以下の書籍に「CAP定理」について書いてあったので、メモします。

7つのデータベース 7つの世界

7つのデータベース 7つの世界

CAP定理の"CAP"は以下を表しています。

  • 整合性(Consistency):書き込みはアトミックであり、後続のリクエストはその新しい値を検索できる
  • 可用性(Availability):データベースは1つのサーバーが動いている限り値を返すことができる
  • 分断耐性(Partition tolerance):通信が一時的に中断してネットワーク分断が起きてもシステムが機能する。

分散型データベースは、このなかで同時に2つしか達成できないとされています。

 分散型データベースを考えるときには、このCAP定理を考慮するといい。3つのなかでどれを諦めるかを決める必要があるからだ。最終的には、可用性か整合性のいずれかを失うことになる。分断耐性というのは、厳密にはデータベースを分散型にするかどうかというアーキテクチャの決定だ。選択肢を理解するには、CAP定理の理解が不可欠である。

整合性」と「可用性」についてはわかりにくいですが、この本には分かりやすい例が書いてありました。

 あなたはビヨンセの熱狂的ファンだ。日付は2006年9月5日。友達のビーチハウスで、ビヨンセのセカンドアルバムのリリースパーティが開かれることになった。しかし、大きな高波が桟橋を襲い、あなたは海に飲み込まれてしまう。流木にしがみついて、なんとか命は助かった。数日後、無人島にたどりついた。いっさいの通信手段がないので、システム(世界)から分断されてしまったことになる。それから、5年もの月日を過ごすことになった・・・
 2011年のある朝のこと、海から聞こえる叫び声で目が覚めた。古びた帆船の船長があなたを発見したのである!この5年間、あなたはずっと1人だった。船長は船首に身を乗り出し、どなるように言った。「ビヨンセのアルバムは何枚だっけ?」
 ここで、あなたは決断を迫られる。1つの道は、自分の知る最新の値(ただし5年前の情報)を答えることだ。質問に答えれば、あなたは問い合わせに応答できる(可用性がある)状態だということになる。もう1つの道は、質問に答えないことだ。ずっと隔離されていたので、世間と自分の答えが一致していない(整合性がない)可能性があるからだ。船長は答えを得られないが、世界の整合性は保たれる(船長は家に戻れば正しい答えを得られる)。あなたは問い合わせを受けるノードの立場として、世界のデータの整合性を保つこともできるし、自分の可用性を保つこともできる。しかし、同時に達成できない。

なんて分かりやすい例だ(´Д` )