トランザクションメモリといえば・・・から始まる横道

http://d.hatena.ne.jp/shot6/20081008#1223428034

トランザクションモリーといえば、Sunの次世代CPUで開発中のRockがハードウェアトランザクションメモリを採用という思い切った設計をしているのが非常に面白い、というのははてなにきてる人なら常識ですのであまりつっこみませんが、仕組みとしてはいわゆる楽観的ロックですよね。



システム開発をしていて楽観的ロックを採用しているところは多くなってると思います。バージョンカラムを見かけることは増えましたよね。

でも、楽観的ロックの最大の特徴であるロールバックしたあとどうするか、が記述されてないシステムが多すぎる機がします。つまり、後から更新に行った処理はすべて破棄されてしまいます。一括してcatchしてるとまるでユーザーが不正な処理を行ったかのようなエラーメッセージを表示してしまうかもしれません。

通常はもう一度トランザクションを開始してみたり、すでに更新されていますと表示してユーザーの反応を見るとかが必要なはずなのに、それらの処理が記述されていないことが割りと見受けられます。

楽観的ロックの使い方も知らないのなら悲観的(つまり上書き)のほうがいいじゃないかと。さらに言えば(システムにもよるが)ほとんどの場合バージョンカラムを破棄して完全上書きでもいいじゃないかと。

現在DBアクセスはORマッピングで隠蔽されていると思われます。SQLを直に触ることはまずないですよね。一般的なORマッピングは更新されたプロパティのみupdateが行われます。したがって完全上書きでも意外と問題は起こりにくいんですね(もう一度言うがアプリによる)。


いやー結構ありますよね。バージョンカラムを用意していながらその処理を記述していない業務系アプリ。おそらく自称SEの連中がバージョンカラムを用意すればそれですべてうまくやってくれると思って具体的な処置の記述をせずに放置してるんでしょうね。こわいこわい。