プログラマメモ2 - programmer no memo2

楽観はいた webでひきまわしの刑 2014/02/11

楽観排他制御です。

もう《後勝ち(あとがち)》でいいじゃんと思ったりしないでもない瞬間はありますが、排他大事ですね。お金の値とか、いろいろ大事な数字を厳密、そう、厳密、厳格(幻覚)にあつかわなければならないから。

じゃっ実際問題、排他にひっかかった場合、「入力したデータどうするんだよー」というのがあります。この辺、「あきらめて」最初から入力してくださいというのが現実なのかしら....

実現方法の案です。
更新時間を画面間でひきまわします。hiddenで引き回すぐらいでいいと思う。



ここで、更新時間(Timestamp型)を、画面でもたせるときに、タイムスタンプをいったん数値にしてもたせるのがいいかなと。





 これだとテストは大変じゃないブラウザをふたつ立ち上げてやればOK
が、SELECT ... FOR UPDATE使って、そのあとにUPDATEやってる場合、デバッガ使って、止めてとか、単体テストできちんとテストしとかないと、もうあとの工程でテストする機会がなくなると思われるので、テストきちんとしとかないとね。



参考

楽観ハイタ 2011/02/19

DBの楽観排他(ロック)の方法についてです。
まず「楽観的ロックとは」、ですが、とりあえず、がちがちにロックしないという感じでしょうか。
「先に更新したもの勝ち」ぐらいの理解でいいのかな。対称となる悲観的ロックは、ロックとってる間は誰もさわらせないぜぐらいの理解でよろしいか。

で、つぎに、どう実現するのか。
排他したいテーブルに楽観排他用の列を追加します。
考え方は単純に、自分が更新しようとする対象行が、更新するその瞬間に同一であることが保証できればよいわけです。
変更するまえと変更するその瞬間に楽観排他用列が変更されてないことを確認したのち、更新をかけます。
SQLならwhereで同一であることをチェックしつつ、楽観排他用列もちがう値で更新します。

楽観排他列を数値にして、更新するさいにインクリメントするというのが常道っぽいです。で、この楽観排他のための列に時間表現の型を使うってのもある。

Oracle 集合Aから集合Bを引いてその結果を得たい。 2008/01/12
2008/01/13

集合Aから集合Bを引いてその結果を得たい。


手元にOracleデータベースがないので実験していなのですが、職場の方に教えてもらったのですが、MINUSが使えそうですね。


下記のサイト勉強になります!!

RDBに苦手意識が....