Matsushita's Blog

分散データベースの2相コミット

2相コミット (2フェーズコミット) とは

複数のデータベースの内容を更新する時に、処理が矛盾しないように整合性を保つための手法。 具体的には、複数のデータベースを更新する前に、全てのデータベースが更新可能かどうかを確かめてから、一斉に更新を行う。

2相コミットの処理ステップ

  1. マスターのサーバーから複数のデータベースへ更新可能か否かを問い合わせる
  2. それぞれのデータベースは自身が更新可能か否かをマスターのサーバーへ返す
  3. マスターのサーバーは全てのデータベースが更新可能であることを確認した後に、一斉にデータベースの更新を行う
  4. 更新処理の途中であるデータベースが更新処理を失敗した場合、失敗したということをマスターのサーバーへ返す。
  5. 失敗を知ったサーバーは全てのデータベースへ、ロールバックの指示を出し前の状態へ戻す。

更新可能か問い合わせるフェーズと、実際に更新するフェーズがあることから2フェーズコミットと呼ばれる。