2011-06-29 6 views
0

データベーステーブル内にイベントを格納するasp.net Webサイトがあります。その後、私はこれらのイベントを読み取り、適切なアクションを実行するWindowsサービスアプリケーションを持っています。現在、2つのプロセスが同じテーブルから同時にレコードを挿入したり削除したりすることが可能です。これら2つのプロセスを分離するにはどうすればよいですか?

このようなシステムを開発するためのより良いパターンは、2つが同じテーブルで同時に動作しないようにするためです。

+0

...私に聞こえます? – abatishchev

+0

@abatishchev私はmysqlを使用します – Roman

答えて

1

私はパターンについてはわかりませんが、私はWCFサービスを行い、両方でそのデータにアクセスできるようにします。次に、テーブルの内容を変更(または読み込み)するすべてのメソッド間で共通のロックオブジェクトを共有します。

+0

同じマシン上のWCFサービスにasp.net app呼び出しWebサービスメソッドを持たせることができますか?またはWCFマシンは別のサーバーになければなりませんか? – Roman

+0

同じマシンに置くことができます。それはちょうど別のポートにあります。 –

0

このシナリオでは、データを同時に更新できないパターンを使用します。

私はいつも特別な列をテーブルに追加します。通常は、 'LastModified'のタイプは 'timestamp'です。行を追加または挿入するときは、常にこの列を設定します。

レコードを更新するときは、ストアドプロシージャがデータベースに格納されている値で渡している値をチェックしていることを確認します。これらが異なる場合、別のユーザーまたはプロセスがこの行を変更したため、同時実行エラーが発生します。

これは、呼び出しプロセスまで有効にすることも、サービスで処理することもできます。

0

これは他の何よりもアーキテクチャ上の問題である可能性があります。

なぜレコードを削除するプロセスが2つ必要ですか?

通常、同じテーブル内のCRUDデータには2つの異なるプロセスが必要ありません。あなたができることの1つは、データベース/テーブルをサービスで包み込み、データを扱う必要のあるすべてのプロセスがそのサービスを利用できるようにすることです。このサービスは、コールのシリアライズを処理することができます。いずれにしても、DBを直接操作するプロセスは1つしかありません。

あなたが最初の場所でレコードを削除する必要があるだろう、なぜ私は思ってしまうアーキテクチャのイベント・ソーシングタイプ、にいるようさらに、それはあなたがどのようなDBMSを使用してください

+0

私はイベントを調達していますが、私はそのタイプの建築家ではありません。この問題はこのタイプのデザインに適しています。両方のプロセスがレコードを削除するわけでもありません。 1人だけが行います。応答していただきありがとうございます。 – Roman

関連する問題