DB

楽観的ロックと悲観的ロック

More than 3 years have passed since last update.


楽観的ロック

Railsだと、lock_versionのやつ。


ブラウザでの見え方

ブラウザでの見え方(まあ実装次第だけど、だいたいこんな感じで実装する)

AさんがHoge更新画面を開く。

BさんもHoge更新画面をAさんが開いている間に開く。

AさんがHogeを更新。

Bさんが少し遅れてHogeを更新。

Bさんに誰かが更新してしまっていることを伝えるメッセージを出す。

このように、更新のタイミングで、おやおや!とわかるのが

楽観的ロック。


参考

http://ruby-rails.hatenadiary.com/entry/20141209/1418123425


悲観的ロック

いわゆる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となるため、「データ表示」と「編集ボタン押す」の間で、トランザクションを維持するのが、難しい。よって概ね楽観的ロックが使われる。


参考

http://snjx.info/diary/snjx/041