「楽観的ロック」と「悲観的ロック」の違い
スポンサーリンク
予備知識
| 用語 | 意味 |
|---|---|
| 排他制御 | ダブルブッキングしないようにすること |
| ロック | 今回は「これは今、俺が使っているからさ。他の人は触らないでね」の意味。排他制御を実現する手段のひとつ |
それぞれの用語の意味
| 用語 | 意味 |
|---|---|
| 楽観的ロック | 「ダブルブッキングしたらドンマイ!」な考えで作られているロック |
| 悲観的ロック | 「ダブルブッキングはダメ。ゼッタイ。」な考えで作られているロック |
似ているところ
どちらもロックの分類を指す用語です。
楽観的ロックの反対が悲観的ロックです。

違うところ
ダブルブッキングに対して、どれくらい本格的に備えるかが違います。
楽観的ロックは「ダブルブッキングする可能性は低いし、もしダブルブッキングしてもそこまでヤバいことにはならないよね」な考え方に沿って作られているロックです。
もしダブルブッキングしたら諦めます。

悲観的ロックは「ダブルブッキングする可能性は低くないし、もしダブルブッキングしたらヤバいよね」な考え方に沿って作られているロックです。
ダブルブッキングしないようにします。

備考
私の理解では、楽観的ロックや悲観的ロックは
設計思想
です。
必ずしも具体的なやり方を指す用語ではないと解釈しています。
例えば、SQLにおいて、select文の最後に「FOR UPDATE」を付けると悲観的ロックになります。
ただし
1.データを取得(select文を実行)
2.あれやこれやの処理
3.「1」の状態からデータが変わってないか確認するためにデータ取得(「FOR UPDATE」付きのselect文を実行=悲観的ロック)
4.データ更新(update文を実行)
のような処理をやったら、全体としては楽観的ロックです。
「多分1の処理から3の処理までの間にダブルブッキングしないでしょ!もしダブルブッキングしたらドンマイ!」と楽観的になっていますよね。
そのため、機械的に「このSQL文に『FOR UPDATE』が付いているから、この処理は悲観的ロックだな」とか考えていると、思わぬミスをする可能性があります。
ご注意ください。






