0

データベースに保存したい大量のデータを受信して​​いるアプリケーションがあります。私の現在の戦略は、準備ができたときに各レコードで非同期呼び出し(BeginExecuteNonQuery)を実行することです。アプリケーションの残りの部分がスムーズに実行されるように、非同期呼び出しを使用しています。

私が抱えている問題は、データの量が増えるにつれて、最終的には、接続がまだ使用されている間にコマンドを実行しようとしているところに到達することです。私は2つの可能なオプションを見ることができます:

  1. 既存のコマンドが終了するまで、保留中のデータを自分でバッファリングします。
  2. 必要に応じて複数の接続を開きます。

これらのオプションのどれが最適か、または実際にもっと良い方法があるかどうかはわかりません。オプション1はおそらく私のバッファがどんどん大きくなることにつながるでしょうが、オプション2は非常に悪い形かもしれません-私にはわかりません。

どんな助けでもいただければ幸いです。

4

2 に答える 2

3

ロック戦略によっては、複数の接続を使用する価値があるかもしれませんが、「上限なし」の数ではないことは確かです。したがって、ここで使用するのに適した戦略/パターンは"スレッド プール"で、N 個の専用スレッドのそれぞれが接続を保持し、要求が来て書き込み要求を受け取り、スレッドが前に行っていたものを終了します。最高のパフォーマンスを得るためのプール内のスレッド数は、現実的な実験/プロトタイプ設定でさまざまな可能性をベンチマークすることにより、経験的に決定するのが最適です。

「バッファ」キュー (メイン スレッドが書き込み要求をキューに入れ、プール内の専用スレッドが要求を取得する場所) が特定のしきい値を超えて大きくなった場合、データを書き出す速度よりも速くデータを取得していることを意味します。より多くのリソースを取得できない限り、受信データの一部を削除する必要があります。おそらく、将来の統計分析にバイアスがかからないように、ランダム サンプリング戦略を使用することになります。作成している量と、各期間 (たとえば 1 分ごとなど) のリソース不足のためにどれだけ落とさなければならないかを数えるだけで、将来のデータ マイニング探索で「層化サンプリング」手法を使用できます。 .

于 2009-06-11T00:20:57.890 に答える
0

アレックスに感謝します-すべての接続が使用されている場合でも更新をバッファリングする必要があると仮定して、ハイブリッド方式を提案しますか?

(私は元の投稿者です。気が付かないうちに 2 つのアカウントを取得できました)

于 2009-06-11T00:25:08.773 に答える