アプリ版:「スタンプのみでお礼する」機能のリリースについて

アクセスなのですが「トランザクション処理」と「排他制御」は同じ意味ですか?

A 回答 (1件)

違います。



http://codezine.jp/article/detail/6702
http://codezine.jp/article/detail/6764


確かにトランザクション制御をしっかりやっていればデータ更新自体に不整合が生じることはありません。

が、例えばA処理が終わらないとB処理ができないという場面にも出くわします。
A処理が5時間かかるようなものだった時、B処理を5時間前に実行してしまったら、ひたすら待つのか(デッドロック)、もしくはエラーにしてB処理はキャンセルするのかという選択が必要になります。

他に、B処理で呼び出した際は更新されてなかったが、B処理で情報が画面に呼び出された後にA処理で更新が行われており、その後にB処理で更新が行われる。
この場合、A処理の結果が無駄になる可能性があります。
呼び出してから更新するまでロックしてトランザクションを離さないという方法も取れますが、
それはつまり誰かがいじってる時は他の人は呼び出しすらできないということもあります。
また、ほったらかしにしたことなどによってロックされたままDBとのコネクションが外れてしまい、
デッドロックを発生させ、解消させる方法がDBの再起動しかなくなるなどという恐れもあります。

これらを正確に『システムとして』不整合のないものとするには、排他制御の実装方法を考える必要があります。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!