楽観的ロックと悲観的ロック
ロックについてあんまり気にしたことがなかったけど、必要になったので調べた。
ページを開いて何か変更して更新ボタンを押すシチュエーションを考える。僕が変更を加えている間に、他の誰かがそのページで別の変更をしたのを、僕が更新ボタンを押すことで上書きしてしまうのを防ぐためにロックを考える必要がある。
楽観的ロック
フォームに諸々入力して更新ボタンを押させてから、「このページを開いたときとバージョンが違うよ」って言って保存させてくれないやつ。
これは内部的にバージョンを持っていて、保存時にそのバージョンをインクリメントする。それで保存しようとしたときにバージョンが合致しないと変更されたということなので保存させない。
悲観的ロック
そもそも誰かが触っているページを開かせない。
symfony でロックを使うとき
ここを読む
12. Transactions and Concurrency — Doctrine 2 ORM 2 documentation