Help us understand the problem. What is going on with this article?

分散トランザクションってトランザクションと何が違うの??

More than 1 year has passed since last update.

業務中に分散トランザクションにハマって色々調べたので学んだ事を纏めます。

1.分散トランザクションとは

1.1.トランザクションとは

まず初めにトランザクションの定義について記述します。
トランザクションとはアプリケーションがデータベースに対してinsert、update、deleteなどの処理を実行した際の処理のグループで、コミット、もしくはロールバックが実行されるまで続きます。
1.PNG

1つのトランザクションに含まれる処理は1つでもいいし複数あっても大丈夫です。
しかし、トランザクション内の処理が1つでも失敗した場合はデータが不完全な状態なので処理を開始する前に戻したいということは多いと思います。
例えば、商品が売れた際に売り上げ管理テーブルに数値を足してと在庫管理テーブルから在庫を減らす処理をするアプリケーションの場合、
売り上げ管理テーブルへの更新は成功したが、在庫管理テーブルへの更新は失敗した場合、商品は売れているのに在庫は減っていないという状態になります。
これはおかしいので一旦売り上げ管理テーブルも更新する前に戻す必要があります。
この時に処理のグループ(=トランザクション)を売り上げ管理テーブルと在庫管理テーブルの更新に設定しておけば二つが成功してようやくコミット。片方でも失敗すればロールバックする。
という動作ができるようになります。
2.PNG

1言で纏めると(文中でも書きましたが)トランザクションとは処理のグループの事です。
グループにいくつの処理を入れるかはアプリケーションで設定できます。

1.2.分散トランザクションとは

ではいよいよ分散トランザクションとはどういうものなのかという話になります。
分散トランザクションとは、先ほどの売り上げ管理テーブルと在庫管理テーブルの例で言うと下図のようなDB構成の場合に発生するものです。

3.PNG

図を見れば違いがわかると思いますが、売り上げ管理テーブルと在庫管理テーブルが別のDBに属しています。
つまり、トランザクションが成功するにはデータベース1の売り上げ管理テーブルの更新に成功し、かつデータベース2の在庫管理テーブルの更新にも成功する必要があります。
どちらか1つでも失敗してしまえば売り上げと在庫の計算が合わなくなるので両方をロールバックする必要があります。
データベースが2つになっただけで実際の動きとしてはもとのトランザクションと同じと考えていいでしょう。

yShig
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした