2

SQL Server Integration Services (SSIS) 内には、数百万のレコードを保持できるフラット ファイルへの接続をセットアップし、そのデータを SQL DB にプッシュする機能があります。さらに、このプロセスは、Microsoft.SqlServer.Dts.Runtime 名前空間を参照して使用することにより、C# アプリから呼び出すことができます。

何百万ものレコードを含むフラット ファイルを SSIS で実行するのが最適でしょうか、それとも集合的な "あなた" は複数のワーカー スレッド (行を読み取って変数に追加するスレッド、その変数から DB に書き込むスレッド) を持つ ac# アプリを好むでしょうか? 、そしてそれらのスレッドを管理する「マザー」クラス?(開発ボックスには 2 つの CPU があります)

このデータ ( sql team blog ) を見たところ、100 万行のフラット ファイルの場合、SSIS が最速であることがわかりました。

Process                Duration (ms)
--------------------   -------------
SSIS - FastParse ON         7322 ms 
SSIS - FastParse OFF        8387 ms 
Bulk Insert                10534 ms 
OpenRowset                 10687 ms 
BCP                        14922 ms

あなたの考えは何ですか?

4

3 に答える 3

6

私は自分自身と私の経験についてしか話すことができません。これは、不要な車輪の再発明をしている可能性があるケースの 1 つであるため、私は SSIS を使用します。これは、SSIS によって既に解決されている反復的なタスクです。

私は毎日約 57 の仕事 (DTS と SSIS の組み合わせ) を管理しています。そのうちの 4 つは、5 ~ 1 億件のレコードのエクスポートを日常的に処理しています。私が管理しているデータベースには、約 20 億行あります。スクリプト タスクを使用してミリ秒単位で日付を追加し、1 日に数回ジョブを実行できるようにしました。それを約22か月続けています。それは素晴らしかったです!

SSIS ジョブもスケジュールできます。そのため、設定して忘れることができます。私は毎日すべてを監視していますが、ファイル処理部分が故障したことはありません.

カスタム C# プログラムに頼らなければならなかったのは、非常に大きなファイルを小さなチャンクに分割する必要があったときだけでした。SSIS は、その種のものに対して非常に遅いです。スクリプト タスクを使用して、1 GB のテキスト ファイルを分割するのに約 1 時間かかりました。C# カスタム プログラムは、12 分でそれを処理しました。

最終的には、使いやすいと思うものを使用してください。

于 2008-09-28T21:16:02.657 に答える
1

SSIS は非常に高速です。さらに、繰り返し発生する必要がある場合は、エージェントをセットアップして、スケジュールに従って起動することができます。それを自分で書くことは 1 つのことですが、マルチスレッド化しようとすると、最初に見えるよりもはるかに複雑になります。

10 回中 9 回は SSIS をお勧めします。

于 2008-09-28T21:13:29.903 に答える
1

この場合、複数のスレッドを使用するとパフォーマンスがどのように向上するかわかりません。大量のデータを転送する場合、通常、主なボトルネックはディスク I/O です。複数のスレッドを生成しても、この問題は解決されません。また、データベースにアクセスする複数のプロセス間でロックの競合が発生するため、状況が悪化すると推測されます。

于 2008-09-28T21:16:39.550 に答える