楽観的ロック
Railsだと、lock_version
のやつ。
ブラウザでの見え方
ブラウザでの見え方(まあ実装次第だけど、だいたいこんな感じで実装する)
AさんがHoge更新画面を開く。
BさんもHoge更新画面をAさんが開いている間に開く。
AさんがHogeを更新。
Bさんが少し遅れてHogeを更新。
Bさんに誰かが更新してしまっていることを伝えるメッセージを出す。
このように、更新のタイミングで、おやおや!とわかるのが
楽観的ロック。
参考
悲観的ロック
いわゆるSELECT FOR UPDATE
のやつ。
トランザクションで実現。
誰もSELECT FOR UPDATE
されたやつが解放されるまで何もできなくなる。
参考
http://ruby-rails.hatenadiary.com/entry/20141210/1418207618
http://atamoco.boy.jp/kogoto/work/oracle-rakkan-lock.php
楽観的ロックと悲観的ロックの使いどころ
ブラウザが絡むと、まずブラウザにデータを表示、そのあとで編集ボタンを押すでUPDATEとなるため、「データ表示」と「編集ボタン押す」の間で、トランザクションを維持するのが、難しい。よって概ね楽観的ロックが使われる。
参考