an odd fellow

読書と写真と情報工学

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

ロックについてあんまり気にしたことがなかったけど、必要になったので調べた。

ページを開いて何か変更して更新ボタンを押すシチュエーションを考える。僕が変更を加えている間に、他の誰かがそのページで別の変更をしたのを、僕が更新ボタンを押すことで上書きしてしまうのを防ぐためにロックを考える必要がある。

楽観的ロック

フォームに諸々入力して更新ボタンを押させてから、「このページを開いたときとバージョンが違うよ」って言って保存させてくれないやつ。

これは内部的にバージョンを持っていて、保存時にそのバージョンをインクリメントする。それで保存しようとしたときにバージョンが合致しないと変更されたということなので保存させない。

悲観的ロック

そもそも誰かが触っているページを開かせない。

symfony でロックを使うとき

ここを読む

12. Transactions and Concurrency — Doctrine 2 ORM 2 documentation