データベース: CAP定理の勉強

データベーススペシャリスト試験が迫ってきたので、用語は知っていたがしっかりとは理解していなかったCAP定理について勉強。

CAP定理とは

分散型データベースシステムに関する定理。 一貫性 (Consistency)・可用性 (Availability)・分断耐性 (Partition-tolerance) の三つの特性のうち、同時には最大二つまでしか満たすことができない 、というもの。それぞれの単語の頭文字をとってCAP定理と呼ばれる。

  • 一貫性 (Consistency)
    • データの整合性が保たれること。
    • 具体的にいうと、すべてのデータ読み込みにおいて、最新の書き込みデータもしくはエラーのどちらかを受け取ることができること。
  • 可用性 (Availability)
    • 利用したい時に利用できること。
    • 具体的にいうと、一つのサーバに障害が発生しても、他のダウンしていないサーバの機能が損なわれず、応答を返すことができること。
  • 分断耐性 (Partition-tolerance)
    • データが複数のサーバに分散されること。
    • 具体的にいうと、ネットワークが分断されてしまい、サーバ同士が通信できなくなっても、データの読み書きが動作すること。

具体例で見てみる

以下、データベーススペシャリスト試験 令和2年秋期 午前II 問1 より引用。

 図のデータベース1,2は互いのデータの複製をもつ冗長構成である。クライアントからの更新・参照要求を受けたデータベースサーバ(以下,サーバという)は直下のデータベースを更新・参照し,他方のサーバにデータ更新を通知する。通知を受けたサーバは直下のデータベースに更新を反映する。

 サーバ1,2間のネットワークが分断し,データ更新を通知できなくなったとき,CAP定理で重視する特性(C,A,P)に対するサーバの挙動のうち,適切な組合せはどれか。

CAP定理の特性C及びPを
重視する場合
CAP定理の特定A及びPを
重視する場合
一方のサーバは停止し、もう一方のサーバは動作し続ける。 両方のサーバが停止する。
一方のサーバは停止し、もう一方のサーバは動作し続ける。 両方のサーバが動作し続ける。
両方のサーバが動作し続ける。 一方のサーバは停止し、もう一方のサーバは動作し続ける。
両方のサーバが動作し続ける。 両方のサーバが停止する。

選択肢に出てくる3つのパターンについて、それぞれどの特性が満たされているか考える*1

(1) 一方のサーバは停止し、もう一方のサーバは動作し続ける。

一方のデータ読み込みに対しては最新のデータ、もう一方のデータ読み込みに対してはエラーが返るため、一貫性(C)は満たされる。サーバには障害が発生していないが、サーバの機能が使えない状態になるため、可用性(A)は満たされない。サーバ間のネットワークは分断されているが、動作し続けているサーバではデータの読み書きが動作するため、分断耐性(P)は満たされる。

よって、(1)はC及びPを満たす。

(2) 両方のサーバが動作し続ける。

データ更新の通知がされなくなるため、一方のサーバで更新されたデータが、もう一方のデータ読み込みでは受け取れない可能性がある。すなわち最新のデータが受け取れない可能性があるため、一貫性(C)は満たされない。両方のサーバは動作し続けるため、可用性(A)は満たされる。サーバ間のネットワークは分断されているが、動作し続けているサーバではデータの読み書きが動作するため、分断耐性(P)は満たされる。

よって、(2)はA及びPを満たす。

(3) 両方のサーバが停止する。

どちらのサーバもデータ読み込みに対してエラーが返るため、一貫性(C)は満たされる。サーバには障害が発生していないが、サーバの機能が使えない状態になるため、可用性(A)は満たされない。ネットワークの分断に起因してサーバが動作しなくなっているため、分断耐性(P)は満たされない。

よって、(3)はCを満たす。

以上から、イが答えとなる。

データベースシステムによる違い

一般的なリレーショナルデータベースでは、トランザクション処理でデータの整合性を保っている。しかし、ネットワークが分断した場合にはサーバ間での通信ができなくなってしまい、整合性が取れなくなってしまう。そのため、分断耐性(P)を諦め、一貫性(C)+可用性(A)を満たすものが多い*2

一方でNoSQLでは、リレーショナルデータベースとは別のユースケースを意識してか、一貫性(C)+分断耐性(P)、もしくは可用性(A)+分断耐性(P)を満たすものが多くなっている。

おまけ: 情報処理技術者試験の過去問の引用について

試験問題は著作権の対象のため、本来であれば掲載の許諾を取る必要がある。
しかし、IPAの「よくある質問」を確認すると、出典さえ明記しておけば問題文を全文掲載できるとのことで、本記事では問題文をそのまま掲載している。

www.jitec.ipa.go.jp

7.その他
試験の過去問題の使用方法(申請方法、使用料等)について教えてください。
 
 当機構で公表している過去の試験問題の使用に関し、許諾や使用料は必要ありません。(ダウンロードでのご利用も特に問題ございません。)  ただし、以下の留意点を必ず確認の上、ご使用ください。

【留意点】
著作権は放棄していません。
・教育目的など、情報処理技術者試験制度、情報処理安全確保支援士制度の意義に反しない限り、公表されている過去問題を問題集やテキストに使用される際、許諾および使用料の必要はありません。
・出典を以下のように明記してください。(年度、期、試験区分、時間区分、問番号等)
 [例]「出典:平成31年度 春期 基本情報技術者試験 午前 問1」
 また、問題の一部を改変している場合、その旨も明記してください。
・公表しているPDF以外の電子データの提供はできません。
 (PDFセキュリティの解除方法は提供できません。)

*1:情報処理技術者試験の過去問には解説がついていないため、本記事の考察は個人のもので公式のものではありません。誤りがあれば指摘いただければと思います。

*2:しかし、今回引用した問題ではこちらのパターンは扱われていなかった。。