2011-08-02 9 views
0

私たちは、車両に発生した障害のXMLファイルを認識するWebサービスを持っています。 Webサービスは、EF 3.5を使用して、これらのファイルをハイパー正規化データベースにロードします。通常、XMLファイルは10〜20秒で処理されます。Entity Framework 3.5で並行処理をロックするためのテーブルをロックする

  1. 異なるXMLファイルを同時に送信する車両は、問題ではありません。 EFのデフォルトのオプティミスティック並行性により、これらのファイルをすべて同じデータに格納することができます。

  2. 同じ車両が複数のファイルを同時に送信する:これは、システムが同じデータまたは類似のデータを同時にデータベースに書き込もうとするため、問題を引き起こします。そして、これはまれなことではありません。

私たちは、私はロックテーブルを導入し、これを解決するには、ポイント2

のためのソリューションを必要としていました。基本的には、私はDBへの書き込みを開始し、私が完了したレコードを削除すると、このテーブルに連結された車両idとフォルトタイムスタンプ(同じフォルトのために車両が送信した複数のファイルについて同じです)を挿入します。ただし、両方のファイルが同時にこの行をデータベースに挿入しようとすると、多くの場合があります。このような場合、一方のファイルは成功し、もう一方のファイルは重複したキー例外をスローし、Webサービスの呼び出し元に送られます。

このようなシナリオを処理するには、どのような方法が最適ですか? 1つのファイルに対して多くのテーブルが関わっているので、dbから何かをロールバックしたくないです。

答えて

1

あなたはどんなソリューションを期待していますか?ロックテーブルを使ったあなたの現在のアプローチは、まさに必要なものです。重複のために例外が発生した場合は、後でもう一度試してみるか、クライアントに型付きのフォールトを戻して、後でファイルをアップロードさせることができます。両方のソリューションは醜いですが、それはあなたのアプリケーションが現在提供しているものです。

より良い解決策は、現在のWebサービスを、Webサービスコールがジョブをキューに追加し、バックグラウンドプロセスによってこれらのジョブを処理し、同じ自動車の2つのファイルが同時に処理されないようにする別のソリューションを置き換えることです。これにより、ピーク時のスループットを大幅に改善することができます。欠点は、オンラインではないためファイルが処理されたという通知を実装する必要があることです。

+0

私たちはメッセージキューと一緒に行くことができないので、@Ladislavのようにロックテーブルだけが言及されていれば、最良の選択肢と思います。 – Yasir

関連する問題