4

一部の Sql Server および Oracle データベースに接続するために ADO.Net を使用しており、いくつかのクエリを同時に実行したいと考えています。

Sql Server には SqlClient 名前空間のクラスを使用し、Oracle には ODP.Net を使用します。Sql Server の場合、MARS オプションを接続文字列に追加し、SqlCommand で非同期 API を呼び出しました。ODP.Net は非同期 API を提供しないため、並行 Oracle コマンドに個別のスレッドを提供する必要があります。

私の質問は、接続オブジェクトをどのように処理すればよいですか? 各データベース インスタンスごとに 1 つの DbConnection を作成し、単一の接続に対してコマンドを非同期的に実行する必要がありますか、それとも同時実行コマンドのそれぞれに個別の接続オブジェクトを与える必要がありますか? 共有接続オブジェクトは、同時に実行される複数のコマンドの競合ポイントになりますか?

いくつかの比較テストを書きますが、非同期データベース コマンドの経験がある人からの連絡をお待ちしています。前もって感謝します!

4

1 に答える 1

6

しばらく前にこの問題に直面し、並行コマンドごとに個別の接続オブジェクトを処理することにしました。データベースを多用するアプリケーションでした (各ページで約 40 のクエリが実行されました)。接続の作成が原因で、これが非常に遅いことがわかりました。

そのため、実行されるすべてのコマンドで使用される単一の接続 (シングルトン) に変更しました。これにより問題が修正され、アプリケーションの応答が速くなったことを嬉しく思います. しかし、アプリケーションが成長し始め、トランザクションの必要性が急務になりましたが、私たちのモデルではこれが不可能であるという問題に直面しました。ミックスを使用して終了しました。接続にトランザクションが必要な場合は常に新しいトランザクションを作成し、トランザクションが必要ない場合は、シングルトンで作成されたトランザクションを再利用しました。

私が今行うことは、単一の接続を使用し、呼び出されたストアド プロシージャ内でトランザクション パターンを使用することです。アプリケーション サーバーでトランザクションを処理する必要がなくなります。

お役に立てば幸いです。

于 2012-04-20T05:01:42.567 に答える