複数のパソコンで排他処理をするには?


かなパパ  2005-04-10 03:32:58  No: 14199

(1)A.EXEでDBUPDATE関数とB.EXEでDBUPDATE関数を作成します。
(2)それぞれのDBUPDATE関数では複数のデータベースのファイルを整合性を保った状態で書き込みます。
(3)A.EXE、B.EXE共に同一パソコン内でも並列起動可能、複数のパソコンでも並列起動可能としたい。
(4)上記の場合、A.EXE(DBUPDATE関数)とB.EXE(DBUPDATE関数)が同時に実行されると整合性が保てなくなるので排他処理を行いたい。
(5)DBエンジンはPervasive SQL V8です。
一台のパソコンではMutexを使用して排他できましたが、複数のパソコンでは制御できませんでした。
誰か、よい方法がありましたら教えて下さい。


HOta  2005-04-10 05:29:09  No: 14200

一般的なRDBMSなら、排他処理ができますが、
もしPervasive SQL V8に無ければ、
Updateする直前に、再度同じレコードを読み込み
前に読み込んだレコード同じであればUpdateを適用し、
違っていればエラーとするのでどうでしょうか?


kkk  2005-04-10 09:22:53  No: 14201

ネットワーク上の複数のパソコンから(特に3台以上)のアクセスを考えるとHOtaさんのやり方でもクリティカルな問題が残っていますのでやはりロック機能を用いるべきでしょう。
PervasiveSQLは使用したことがないのですがロック機能がないのかな?
もしデータベース側にその機能がなければクラシックな方法ですが、別にロックファイルを用意してそれで排他制御を行う必要があるように思えます。


kkk  2005-04-11 00:50:06  No: 14202

なにやら出来そうな記述が
http://www.agtech.co.jp/html/v8sdkmanuals/prog_gde/adotasks4.html
http://www.agtech.co.jp/support/faq/pervasive/v8/
で「ロック」で検索してみてください。
サポートに聞くのが早そうです。


かなパパ  2005-04-11 04:27:29  No: 14203

回答ありがとうございます。
私もロックファイルを用意して排他制御を行う方法を考えましたが、どう考えても一般的なコーデイングではなく、きたないやり方だと思います。
データベースの機能を使えば上記の方法で排他できますが、できればデータベースの機能を使わずに、きれいなコーデイングをしたいと考えています。
どなたか、ご存知の方よろしくお願いします。


wan  2005-04-11 05:32:38  No: 14204

> できればデータベースの機能を使わずに、きれいなコーデイングをしたいと

データベースを使っていながら排他処理だけは使わない、ってのはキレイじゃないと
思います。キレイかどうか主観の問題なので、だれもかなパパさんの美意識を満足
させることができるかどうか、自信は持てないでしょう。


kkk  2005-04-11 12:28:36  No: 14205

>私もロックファイルを用意して排他制御を行う方法を考えましたが、どう考えても一般的なコーデイングではなく、きたないやり方だと思います。
別にきたなくはないでしょう?
でもwanさんのおっしゃるようにキレイとかは主観の問題ですよね。
それはおいといて、かなパパさんはおそらくネットワーク対応Mutexのようなものを考えていらっしゃるのだと思いますがデータベース側にロック機能があるのであればそれが一番スマートですし問題もおきにくいと思いますがどうでしょう
ん?スマートさも主観の問題?


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加