- PR -

DBへの排他制御の方法について

投稿者投稿内容
なせ
常連さん
会議室デビュー日: 2006/01/06
投稿数: 41
お住まい・勤務地: おおさか
投稿日時: 2006-05-24 14:59
いつも拝見してます。
なせです。

DBにアクセスする際、排他制御を行うことが多々あると思うのですが、
皆さんはどのように排他制御を実装されているのでしょうか?
参考までに教えていただければ幸いです。

ちなみに私のところでは
レコード内に更新日付という項目があり、
その更新日付を見て、前回見た値と異なっていれば、
更新を行わないという方法で排他制御を行っています。
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-05-24 15:09
さかもとともうします。

言葉の意味からするとこれは「排他制御」とは言わないのでは?と思いますが、如何でしょうか?(これもそうなんだということであればすいません)

http://e-words.jp/w/E68E92E4BB96E588B6E5BEA1.html

例えば画面からの更新をさせたりする場合に項目を比較して更新させるかどうか?ということでしょうか?



かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-24 15:14
楽観的ロックですね。
ステートレスなWebアプリケーションなんかでは大体がこれなんじゃないですか?

逆にバッチ処理なんかでは悲観的ロックで
対象レコードをデータベース的にロックしてから
処理を行うことが多いですね。

結局使いどころって事だと思いますが
どっとねっとふぁん
ぬし
会議室デビュー日: 2005/02/23
投稿数: 935
投稿日時: 2006-05-24 15:25
.NETでDataSet使ってたりすると、楽観的ロックは簡単に実装できるように
なってますね。
ライブラリが持ってる機能は使い倒しましょう、と(w
なせ
常連さん
会議室デビュー日: 2006/01/06
投稿数: 41
お住まい・勤務地: おおさか
投稿日時: 2006-05-24 15:56
さかもと様
引用:

例えば画面からの更新をさせたりする場合に項目を比較して更新させるかどうか?ということでしょうか?


各項目を見て、その項目が更新されていなければ更新しない。
という意味で仰っているのでしょうか。。。?
そういう意味でしたら違います。
全テーブルの項目に更新日付という列を持っています。
DB更新の際には、必ず更新日付を見に行って、
更新日付が変更されていなければ、更新。
更新日付が変更されていれば、更新しない。
という意味だったのですが、
これを排他制御だと思っていたのは私の認識違いだったのでしょうか。。。(^^;

かるあ様
引用:

楽観的ロックですね。
ステートレスなWebアプリケーションなんかでは大体がこれなんじゃないですか?

逆にバッチ処理なんかでは悲観的ロックで
対象レコードをデータベース的にロックしてから
処理を行うことが多いですね。

結局使いどころって事だと思いますが


言われてみれば、今まで作ったプログラムは
WebかWindowsアプリだけだった気がします。。
だからいつも更新日付を見て。。の排他制御?だったんですねぇ

更新日付をチェックしたすぐ後に
他のプログラムから更新されることもあるじゃんっ!
ってプログラム作りながら思ってたもので、
楽観的ロックの説明を見て納得しました^^

引用:

楽観的ロック:
自分が操作している情報は,他の人が操作する可能性が少ない.

悲観的ロック:
自分が操作している情報は,他の人も操作する可能性がある.


なせ
常連さん
会議室デビュー日: 2006/01/06
投稿数: 41
お住まい・勤務地: おおさか
投稿日時: 2006-05-24 16:07
引用:

どっとねっとふぁんさんの書き込み (2006-05-24 15:25) より:
.NETでDataSet使ってたりすると、楽観的ロックは簡単に実装できるように
なってますね。
ライブラリが持ってる機能は使い倒しましょう、と(w



なんか微妙にVSで持ってるライブラリが信用できなかったりするわけなんですが。。
たまに

if 1 = 1 then
console.writeline("hello")
return true
else
return false
end if

みたいな明らかに条件に合致してるだろ!!
ってif文でも
Falseを返してきたりするし。。。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-05-24 16:15
引用:

なせさんの書き込み (2006-05-24 16:07) より:

なんか微妙にVSで持ってるライブラリが信用できなかったりするわけなんですが。。
たまに

if 1 = 1 then
console.writeline("hello")
return true
else
return false
end if

みたいな明らかに条件に合致してるだろ!!
ってif文でも
Falseを返してきたりするし。。。


えっ(汗
さすがにそんなことは無いと思いますが、
オブジェクトの比較とかしてませんか?
さかもと
ぬし
会議室デビュー日: 2004/05/14
投稿数: 586
投稿日時: 2006-05-24 16:16
さかもとです。

やはり単に「排他制御」という意味合いではないかと思います。
なんというのでしょう「更新制御をした後の排他制御」???
つまり、更新させる際の条件ということですよね?

Aの場合は更新させるけど、Bの場合は更新不可 というような。

>みたいな明らかに条件に合致してるだろ!!
>ってif文でも
>Falseを返してきたりするし。。。

そんな・・・。

[ メッセージ編集済み 編集者: さかもと 編集日時 2006-05-24 16:17 ]

[ メッセージ編集済み 編集者: さかもと 編集日時 2006-05-24 16:19 ]

スキルアップ/キャリアアップ(JOB@IT)