AI活用の教科書
データベース開発むずかしい3分で読了

ツーフェーズコミット

Two-Phase Commitつーふぇーずこみっと

ひとことで言うと

複数のデータベースへの更新を、全部成功か全部取り消しにそろえる2段階の手順のことです。

📖 もうちょい詳しく

何が新しいの?

データベースが1台だけなら、更新をまとめて確定したり取り消したりするのは比較的かんたんです。ところが、在庫のデータと売上のデータが別々のデータベースに分かれていると、片方だけ成功してもう片方が失敗する、という困った状態が起こりえます。ツーフェーズコミットは、こうした「複数のデータベースにまたがる更新」を、全部そろって成功か、全部そろって取り消しか、のどちらかにするための取り決めです。

どうやって動いてるの?

名前のとおり、確定までを2つの段階に分けて進めます。まず取りまとめ役(コーディネーターと呼びます)が、各データベースに「準備はできましたか?」と聞き、それぞれが「OK」か「無理です」を返します(第1段階・準備フェーズ)。全員がOKを返したときだけ、取りまとめ役が「では確定してください」と命じます(第2段階・確定フェーズ)。1つでも「無理」があれば、全員に取り消しを命じます。

何ができるの?

これによって、複数の保存先がバラバラの結果になるのを防げます。たとえば「銀行口座Aから引いて口座Bに足す」処理が別システムにまたがっていても、片方だけ反映される事故を避けやすくなります。お金や在庫など、ズレが許されないデータを複数の場所で扱うときに使われます。

🌱 身近なたとえ

引っ越しの立ち会いで例えると分かりやすいです。不動産屋さんが、貸す側と借りる側の両方に「準備はいいですか?」と確認してまわります。両方が「いいです」と答えて初めて、まとめて契約を成立させます。どちらか一人でも「まだ無理」と言えば、その日は契約を見送ります。片方だけ契約済み、ということは起こさない仕組みです。

✅ まず覚えるポイント

  • 複数のデータベースへの更新を「全部成功か、全部取り消し」にそろえる手順です。
  • 「準備フェーズ」と「確定フェーズ」の2段階で進みます。
  • 取りまとめ役(コーディネーター)が全体の進行を判断します。
  • 全員がOKのときだけ確定し、1つでもダメなら全部取り消します。
  • お金・在庫など、ズレが許されないデータで使われます。
  • 確認のやり取りが増えるため、処理は遅くなりがちです。

🧭 よくある勘違い

確定フェーズに入れば、もう失敗しないの?

準備フェーズで全員がOKを返した後でも、ネットワークの切断や取りまとめ役の停止で、確定の指示が一部に届かないことがあります。このとき相手は確定も取り消しもできず待ち続ける「宙ぶらりん」の状態になることがあります。完全に失敗しないわけではなく、失敗の確率を下げる手順だと考えると正確です。

いつでも使えば安全なんじゃないの?

ツーフェーズコミットは確認の往復が増えるぶん、処理が遅くなり、待ち時間も発生しやすくなります。そのため、Webサービスの多くでは、あえてこれを使わず、少し遅れて整合させる「結果整合性」の考え方を選ぶ場面も多いです。常に最適というわけではありません。

🧩 関連して覚えると楽な言葉

  • トランザクション: 一連の更新を「ひとまとまり」として扱う単位のことです。
  • ロールバック: 途中で失敗したとき、更新前の状態に戻すことです。
  • ACID特性: トランザクションが満たすべき4つの性質をまとめた考え方です。
  • 結果整合性: 今すぐではなく、いずれ全体がそろえばよいとする考え方です。

🏁 ひとことでまとめ

「先に全員へ準備を確認し、そろってから一斉に確定する」。これが、複数のデータベースをばらけさせないための2段階のやり方です。