分散トランザクション
「ここから ここまでワンセット」な処理だよ
複数のリソースにまたがるよ
データベースの話で よく出てくるよ
簡単に書くよ
分散トランザクション(読:ブンサントランザクション)とは
複数のコンピュータとかデータベースが出てくる「ここから ここまでワンセット」な処理(トランザクション)のこと
です。
詳しく書くよ
順番に見ていきましょう。
まずは予備知識として「トランザクション」について説明します。
「そんなの説明されなくても知ってるよ!」な人は適当に読み飛ばしてください。
トランザクションは「ここから ここまでワンセット」な処理単位です。
例えば、そうですね。
ピヨ太君がピヨ子ケーキショップにケーキを買いに行きました。
ピヨ太君はケーキを買います。
ピヨ太君のやることは
1.商品を受け取る
2.代金を払う
の2つです。
この2つはワンセットです。
どちらか片方だけでは成立しません。
商品だけ受け取ってお金を払わなければ泥棒です。
商品を受け取らずにお金だけ払ったのではピヨ太君はケーキが食べられません。
両方揃って、はじめて「ケーキを買う」という行為が成立します。
このような
「ここから ここまでワンセット」な処理単位
がトランザクションです。
小難しい言い方をすると「分割不可な一連の処理」です。
さて、ピヨ太君は無事にケーキを買えました。
ピヨ太君は自分のやった行為をデータベースに記録します。
「なんで、そんなことをするの?」なんて聞いてはいけません。
説明の都合上です。
まずは……そうですね。
ピヨ太君はピヨ太データベースに「商品を受け取った」という内容を記録しました。
次に、ピヨ太データベースに「お金を払った」という内容を記録しました。
そうすると、ピヨ太データベースには
1.商品を受け取った
2.お金を払った
の2つの内容が記録されます。
ここで ちょっと考えてみてください。
ピヨ太データベースに「お金を払った」という内容を記録するのに失敗したら、どうなるでしょう。
そうですね。
1.商品を受け取った
の内容だけが記録されます。
……が、それでは困ります。
「商品を受け取った」と「お金を払った」の2つはワンセットです。
1つだけ記録されている状況は、よろしくありません。
そこで「お金を払った」を記録するのに失敗したら「商品を受け取った」の記録も消します。
一旦なかったことにして、必要に応じて最初からやり直すのです。
これがトランザクション処理の特徴というか注意点です。
ワンセットの処理の途中で失敗したら、最初からやり直す
必要があります。
少し余談っぽい説明もありましたが、トランザクションについては何となく分かったでしょうか。
以上を踏まえて、本題に入ります。
結論を先に書くと
複数のリソース(コンピュータとかデータベースとか)が関わっているトランザクション
が「分散トランザクション」です。
普通のトランザクションは登場するコンピュータとかデータベースが1つです。
分散トランザクションでは複数のコンピュータとかデータベースが登場します。
例えば、そうですね。
ピヨ太君がピヨ太ママを連れてピヨ子ケーキショップにケーキを買いに行きました。
ピヨ太君はケーキを買います。
ピヨ太君のやることは
1.商品を受け取る
2.代金を払う
の2つです。
この2つはワンセットです。
どちらか片方だけでは成立しません。
商品だけ受け取ってお金を払わなければ泥棒です。
商品を受け取らずにお金だけ払ったのではピヨ太君はケーキが食べられません。
両方揃って、はじめて「ケーキを買う」という行為が成立します。
……と、トランザクションの説明をするときに書きました。
実は、必ずしも
1.商品を受け取る
2.代金を払う
を1人でやるとは、かぎりません。
「商品を受け取る」人と「代金を払う」人が違う場合だってあります。
実際にピヨ太君はケーキ代をピヨ太ママに払ってもらいました。
「商品を受け取る」をやったのはピヨ太君ですけどね。
「代金を払う」はピヨ太ママがやったのです。
さて、ピヨ太君は無事にケーキを買えました。
ピヨ太君は自分のやった行為とピヨ太ママがやった行為をデータベースに記録します。
まずは……そうですね。
ピヨ太君はピヨ太データベースに「商品を受け取った」という内容を記録しました。
次に、ピヨ太ママデータベースに「お金を払った」という内容を記録しました。
そうすると、ピヨ太データベースには
1.商品を受け取った
という内容が記録されます。
ピヨ太ママデータベースには
2.お金を払った
という内容が記録されます。
おっと、データベースが2つ登場しましたね。
記録した内容は
1.商品を受け取る
2.代金を払う
です。
この2つはワンセットです。
ただし、このワンセットな2つが別々の場所に記録されました。
このような、ワンセットな「トランザクション」が複数のデータベース(とか)に「分散」されるのが分散トランザクションです。
さて、ここで ちょっと考えてみてください。
ピヨ太ママデータベースに「お金を払った」という内容を記録するのに失敗したら、どうなるでしょう。
そうですね。
ピヨ太データベースに
1.商品を受け取った
の内容だけが記録されます。
……が、それでは困ります。
「商品を受け取った」と「お金を払った」の2つはワンセットです。
1つだけ記録されている状況は、よろしくありません。
そこで「お金を払った」を記録するのに失敗したら「商品を受け取った」の記録も消す必要があります。
一旦なかったことにして、必要に応じて最初からやり直すのです。
ということは、ピヨ太ママデータベースからピヨ太データベースに対して「ごめん。失敗したから、そっちでも消してよ」と伝える必要があります。
失敗したのはピヨ太ママデータベース側ですからね。
ピヨ太データベース側は上手くいった気分でいるかもしれません。
なんか面倒くさそうですね。
そうです。
面倒くさいのです。
登場人物が複数になることによって、あんなことやこんなことを考える必要が出てきます。
よって、分散トランザクションでは、普通のトランザクションよりもややこしいあれやこれやがあれやこれやします。
「あれやこれや」の具体的な内容については、他のところで勉強してください。
一言でまとめるよ
まぁ「分散トランザクション」って単語が出てきたら「複数のデータベースにまたがるトランザクション処理なんだな~」と お考えください。
おまけ
■訳してみるよ
「分散」は日本語ですね。
「transaction(トランザクション)」の意味は「処理」とか「取引」とか「売買」とかです。
何となく くっつけると
分散取引
となります。
■検索してみる?






