- - PR -
DBへの排他制御の方法について
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-05-24 14:59
いつも拝見してます。
なせです。 DBにアクセスする際、排他制御を行うことが多々あると思うのですが、 皆さんはどのように排他制御を実装されているのでしょうか? 参考までに教えていただければ幸いです。 ちなみに私のところでは レコード内に更新日付という項目があり、 その更新日付を見て、前回見た値と異なっていれば、 更新を行わないという方法で排他制御を行っています。 | ||||||||||||
|
投稿日時: 2006-05-24 15:09
さかもとともうします。
言葉の意味からするとこれは「排他制御」とは言わないのでは?と思いますが、如何でしょうか?(これもそうなんだということであればすいません) http://e-words.jp/w/E68E92E4BB96E588B6E5BEA1.html 例えば画面からの更新をさせたりする場合に項目を比較して更新させるかどうか?ということでしょうか? | ||||||||||||
|
投稿日時: 2006-05-24 15:14
楽観的ロックですね。
ステートレスなWebアプリケーションなんかでは大体がこれなんじゃないですか? 逆にバッチ処理なんかでは悲観的ロックで 対象レコードをデータベース的にロックしてから 処理を行うことが多いですね。 結局使いどころって事だと思いますが | ||||||||||||
|
投稿日時: 2006-05-24 15:25
.NETでDataSet使ってたりすると、楽観的ロックは簡単に実装できるように
なってますね。 ライブラリが持ってる機能は使い倒しましょう、と(w | ||||||||||||
|
投稿日時: 2006-05-24 15:56
さかもと様
各項目を見て、その項目が更新されていなければ更新しない。 という意味で仰っているのでしょうか。。。? そういう意味でしたら違います。 全テーブルの項目に更新日付という列を持っています。 DB更新の際には、必ず更新日付を見に行って、 更新日付が変更されていなければ、更新。 更新日付が変更されていれば、更新しない。 という意味だったのですが、 これを排他制御だと思っていたのは私の認識違いだったのでしょうか。。。(^^; かるあ様
言われてみれば、今まで作ったプログラムは WebかWindowsアプリだけだった気がします。。 だからいつも更新日付を見て。。の排他制御?だったんですねぇ 更新日付をチェックしたすぐ後に 他のプログラムから更新されることもあるじゃんっ! ってプログラム作りながら思ってたもので、 楽観的ロックの説明を見て納得しました^^
| ||||||||||||
|
投稿日時: 2006-05-24 16:07
なんか微妙にVSで持ってるライブラリが信用できなかったりするわけなんですが。。 たまに if 1 = 1 then console.writeline("hello") return true else return false end if みたいな明らかに条件に合致してるだろ!! ってif文でも Falseを返してきたりするし。。。 | ||||||||||||
|
投稿日時: 2006-05-24 16:15
えっ(汗 さすがにそんなことは無いと思いますが、 オブジェクトの比較とかしてませんか? | ||||||||||||
|
投稿日時: 2006-05-24 16:16
さかもとです。
やはり単に「排他制御」という意味合いではないかと思います。 なんというのでしょう「更新制御をした後の排他制御」??? つまり、更新させる際の条件ということですよね? Aの場合は更新させるけど、Bの場合は更新不可 というような。 >みたいな明らかに条件に合致してるだろ!! >ってif文でも >Falseを返してきたりするし。。。 そんな・・・。 [ メッセージ編集済み 編集者: さかもと 編集日時 2006-05-24 16:17 ] [ メッセージ編集済み 編集者: さかもと 編集日時 2006-05-24 16:19 ] |