1

我正在寻找一个 C# 中简单数据流的示例,而不依赖于 SSIS 或外部库,例如 Rhino-ETL(这是一个非常好的库,顺便说一句)。

要求:

  • 一个任意 ADO .Net 数据源
  • 一个任意 ADO .Net 数据目标
  • 不需要一次将整个数据集加载到内存中,因此它可以处理任意大的数据集。它需要依赖某种缓冲区,或者像 Rhino ETL 那样利用的“收益回报”。
  • 使用批量插入(即 SqlBulkCopy)
  • 最小的转变。没有查找,没有合并连接。
  • 如果单线程可以完成这项工作,则不需要多线程。

说明问题的另一种方式...... Rhino ETL 如何做到这一点,但没有所有的抽象和继承的类,也没有 quacking 字典?我想在一个简单的非抽象类中看到它。

对问题的另一种表述:我正在寻找一个基本示例,即获取“选择”查询的数据流输出,并一次将 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

恐怕远不是一个完整的答案。

您可以使用此处概述的一种或多种技术在 .Net 中“分页”任意选择查询的结果。

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

这应该允许您将数据分块并避免 RAM 问题。

或者 - 如果您现有的 SSIS 包足够简单/相似,那么看看基于模板自动生成 SSIS 包可能是值得的。例如,我正在维护 100 多个包,这些包是由一个小型 c# 应用程序使用 EzAPI API for SSIS 自动生成的。

于 2012-01-19T11:28:49.533 回答