1

SSISやRhino-ETL(非常に優れたライブラリ、ところで)などの外部ライブラリに依存しないC#の単純なデータフローの例を探しています。

要件:

  • 1つの任意のADO.Netデータソース
  • 1つの任意のADO.Netデータ宛先
  • データセット全体を一度にメモリにロードする必要がないため、任意の大きなデータセットを処理できます。ある種のバッファに依存する必要があります。そうしないと、RhinoETLが利用するような「yieldreturn」が利用されます。
  • 一括挿入を使用します(つまり、SqlBulkCopy)
  • 最小限の変換。ルックアップもマージ結合もありません。
  • シングルスレッドで作業できる場合は、マルチスレッドは必要ありません。

質問を述べる別の方法...RhinoETLはこれをどのように実行しますが、すべての抽象化と継承されたクラスがなく、クォーク辞書がありませんか?単純な非抽象クラスで見たいと思います。

そして、質問のさらに別の言い換え:「選択」クエリのデータフロー出力を取得し、結果全体をにロードせずに、一度に10,000または50,000レコードで宛先に一括挿入する基本的な例を探していますメモリ。使用可能なRAMを超える可能性があります。

4

2 に答える 2

1

プログラミングの知識を増やすためにetlプログラムがどのように機能するかを学びたいようです。Rhino ETLはオープンソースプロジェクトであるため、ここからソースを入手できます。

https://github.com/ayende/rhino-etl

そして彼らがそれをどのように行うかを正確に見てください。オープンソースである他のETLパッケージもあるので、それらが異なる方法で動作する方法を確認できます。たとえば、talendソースは次の場所にあります。

http://www.talend.com/resources/source-code.php

もちろん、商用目的で独自のコードを作成しようとしている場合は、他の人のソースコードを見たくないので、自分でプロセスを考え出す必要があります。

これがお役に立てば幸いです。

于 2012-01-13T14:41:45.963 に答える
1

完全な答えにはほど遠いのではないかと心配しています。

ここで概説した手法の 1 つ以上を使用して、.Net 内の任意の選択クエリの結果を「ページング」できます。

http://msdn.microsoft.com/en-us/library/ff650700.aspx

これにより、データをチャンクアップし、RAM の問題を回避できます。

または、既存の SSIS パッケージがシンプルで十分に類似している場合は、テンプレートに基づいて SSIS パッケージを自動的に生成することを検討する価値があります。たとえば、SSIS 用の EzAPI API を使用して小さな c# アプリケーションによって自動的に生成される 100 以上のパッケージを維持しています。

于 2012-01-19T11:28:49.533 に答える