【问题标题】:doing a simple SSIS-style data flow in c# without any external libraries在 C# 中做一个简单的 SSIS 风格的数据流,没有任何外部库
【发布时间】:2012-01-06 20:58:28
【问题描述】:

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

要求:

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

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

对问题的另一种表述:我正在寻找获取“选择”查询的数据流输出的基本示例,并将其一次以 10,000 或 50,000 条记录批量插入到目的地而不加载整个结果都存入内存,这可能会超出可用 RAM。

【问题讨论】:

  • 我正在考虑提供赏金(虽然我几乎买不起)......这个问题需要澄清吗?
  • 请问如果 Rhino ETL 符合您的要求,为什么不能使用它?
  • 部分作为教育过程......我很惊讶有人没有关于这类事情的博客。部分是政治性的,因为获得第三方图书馆的批准几乎是不可能的。我想摆脱 SSIS,随着项目变得越来越大,它变得越来越笨拙,因为重构 100 多个 SSIS 包变得不切实际。
  • 我应该改写一下(我错过了我的 5 分钟编辑窗口).. 我还没有找到关于它的博客。可能有一个我错过了。

标签: c# ssis rhino-etl


【解决方案1】:

您似乎想了解 etl 程序的工作原理,以增加您的编程知识。 Rhino ETL 是一个开源项目,因此您可以在此处获取源代码:

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

看看他们是如何做到的。还有其他 ETL 包是开源的,因此您可以看到它们以不同方式做事的方式。例如 talend 来源可以在以下位置找到:

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

当然,如果您尝试编写自己的代码用于商业用途,您不会希望看到其他人的源代码,因此您需要自己提出您的流程。

希望对你有帮助!

【讨论】:

  • 我正在寻找获取“选择”查询的数据流输出的基本示例,并一次将 10,000 或 50,000 条记录批量插入到目的地,而不将整个结果加载到内存,可能会超出可用 RAM。
【解决方案2】:

恐怕远非一个完整的答案。

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

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

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

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

【讨论】:

  • Web 应用分页不是我想要的。我确实想在一个 sql 查询中查询整个结果,但在数据到达时处理数据,而不是在数据全部到达后处理。 EzAPI 看起来确实是管理数百个包的有趣解决方案。我会看看那个。
  • 当我说分页时,我更多的是考虑将数据分成您随意请求的块。您可以这样做来填充网页,是的,但它对于客户端应用程序实现流式传输和限制内存使用很有用。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-21
  • 2020-02-24
  • 2014-10-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多