メインコンテンツへ
データベース分散データベース(2相コミット)

2相コミットプロトコル(Two-Phase Commit)の動作に関する説明として適切なものはどれか。

ア.2相コミットではコーディネータがすべての参加サイトと同時にデータを書き込むため、ネットワーク分断が発生しても自動的に整合性が保たれる。
イ.2相コミットの第1フェーズ(Commit Phase)ではすでに全サイトにデータが書き込まれ、第2フェーズ(Prepare Phase)で確認を行う逆の順序で動作する。
ウ.2相コミットはシングルサイトのデータベースにのみ適用可能であり、複数サイトにまたがる分散トランザクションには使用できない。
エ.コーディネータが第1フェーズで全参加サイトに準備完了(Prepare)を確認し、全員OKなら第2フェーズでCommit、一つでもNGならAbortを指示することでトランザクションの原子性を保証する。正解

解説

2相コミットは「全員の賛成が必要な合議制」のようなもの。議長(コーディネータ)が「賛成しますか?(Prepare)」と全員に聞き、全員が手を挙げたら「では決定(Commit)」、一人でも反対なら「全員取消(Abort)」。全員一致でなければ決定しない厳格な議決方式です。

なぜ エ が正解か

2相コミットプロトコルの流れ:第1フェーズ(Prepare Phase):コーディネータが全参加サイトに「コミット可能か?」を確認。各サイトはYES/NOを返す。第2フェーズ(Commit/Abort Phase):全員YESならCommit指示、一つでもNOまたはタイムアウトならAbort指示。これにより「全部コミットするか全部ロールバックするか」のATOMICITYが保証されます。エが正解です。

なぜ ア は間違いか

2相コミットはネットワーク分断(パーティション)が発生すると処理がブロックされる(ブロッキングプロトコル)という弱点があります。「自動的に整合性が保たれる」は誤りです。これはCAP定理の問題です。

なぜ イ は間違いか

2相コミットの順序が逆です。正しくは第1フェーズ:Prepare(準備確認)、第2フェーズ:Commit/Abort(実行指示)です。データ書き込みは第2フェーズ(Commit)の後に行われます。

なぜ ウ は間違いか

2相コミットは分散データベースでの複数サイトにまたがるトランザクション調整のために設計されたプロトコルです。シングルサイト専用ではなく、むしろ分散環境のためのプロトコルです。

出典: AI生成問題(学習用)