SQL Hacks ―データベースを自由自在に操るテクニック

SQL Hacks ―データベースを自由自在に操るテクニック

SQL Hacks ―データベースを自由自在に操るテクニック

9章「ロックとパフォーマンス」
HACK#65「悲観的ロックを使用する」
HACK#66「楽観的ロックを使用する」
これを読んだのは自分にとって大きかった。

MOVIX(シネコン)にて以下のようなやしとりがあったのを思い出した。
(さて どんなトランザクションだろうか?)


「Xスクリーンのゲゲゲの鬼太郎ですね。前のほうの席なら、E列の13から16が空いております」
「では13と14を下さい」
「はい」
(カタカタ)
「申し訳ありません、13と14は埋まってしまったようです」
「では15と16で」
「はい」
(カタカタ)
「申し訳ありません、15と16も埋まってしまったようです」


ここから考えられることは?
・同時処理の制御について考えられている(予約が上書きされない)。これは当然。
・SELECT FOR UPDATE は使っていない。
 これもパフォーマンス的には当然か。。。
 オペレータはほとんどの時間、座席SELECT結果の開いてると思われるので、いちいちSELECT FOR UPDATEすると、同じスクリーンの座席状況を 他のオペレータが触れないことになる。


…自分の知識だけなら、ここから先を技術的に考えるのは時間がかかる…
映画館の座席購入システムを作れと言われたら、5分や10分では思いつかなかったと思う。
(いま実際に作る予定があるシステムは、ネット書店で購入するときのトランザクションに近いかな?)

元の話に戻すと。
SELECT FOR UPDATEは、(この本では)「悲観的ロック」と呼んでる。
たしかに悲しくなるロックだし、なんか原始的な感じがして、使ったこと無いんですよね。

対する「楽観的ロック」というのは、「〜句を付ければよい」と言うレベルの、マニュアルに載ってそうなものではないので、この本を読まなければ しばらく知ることは無かっただろうなと思う。
と言っても、技術的には自分でも考えられるレベルのアイデアなんだけど。
「こんな方法で良いのか?なんか他に一般的な方法があるのでは…」
と思ってたのが解消されて、安心して開発できそう。