質問: `.csv`ファイルから4000万レコードをデータベースに挿入しなければならず、以下は私が従うプロセスです。 * Windowsサービス1: + CSVを読む + レコードを検証する + 有効なレコードを`SqlBulkCopy`を使用して成功テーブル(中間テーブル)に挿入します。 * Windowsサービス2。 + 一度に成功のテーブルから10 000レコードを取得する + これら10,000人のためにforeachを実行する + 各レコードをデータベースに送り、メインテーブルに挿入します。 Windowsサービス1は約30-40分かかりますが、Windowsサービス2はタスクを完了するのに約5時間かかります(最小時間)。私はこれを行うには2つの方法がありますが、どちらがより良いと提案のために開いているかを判断することはできません。 1. 4つの個別のWindowsサービスを作成し、同時に40000のレコードを処理する 2. 仕事の腕時計を使ってwhileループを使うことができます 3. Windowsサービスからasyncプロシージャを呼び出す ここで私の最大の疑問は、トランザクションロックを使用して私の前提に従うと、テーブルや他のプロセスがそれに取り組む必要があるため、プロシージャ内でトランザクションを使用していて、非同期で動作することです。
回答: 私はあなたがこの仕事に間違ったツールを使用していると思います。 c#appsはこのトリックを行うかもしれませんが、統合サービスを使ってこれを行うもっと強力な方法があります。 私はここで推測していますが、中間のこれらのテーブルは変換またはチェックするか、あるいはインポートをバッチダウンすることですか? SSISは、ログ制限とSQL一括インポートツールを使用して、これらのすべてを実行できます。私は現在、毎晩約800万レコードの病院データの輸入を行っています。それには数時間かかるだけです。 このような大きなデータ入力をSQLが処理する方法については、