用.NET控制台应用程序(C#.NET)替换SSIS包和ETL程序?

用.NET控制台应用程序(C#.NET)替换SSIS包和ETL程序?,c#,sql-server,performance,ssis,etl,C#,Sql Server,Performance,Ssis,Etl,我想知道Stack overflow成员根据他们的经验和理解对以下场景的看法 我们得到2000-3000万条记录作为输入(输入通常是csv或xls文件,如果有帮助,可以上传到DB),我们需要处理这些记录并生成不同的文件,包括输出文件和错误文件。因此,根据某些业务逻辑,这些记录被移动到输出或错误文件中 目前,该流程使用SSIS包和一些ETL工具来执行该任务。这些PKG和ETL工具本身需要5到15分钟来处理,具体取决于输入大小 有很多输入,也有很多SSIS包和ETL程序 我们想用一些.NET应用程序

我想知道Stack overflow成员根据他们的经验和理解对以下场景的看法

我们得到2000-3000万条记录作为输入(输入通常是csv或xls文件,如果有帮助,可以上传到DB),我们需要处理这些记录并生成不同的文件,包括输出文件和错误文件。因此,根据某些业务逻辑,这些记录被移动到输出或错误文件中

目前,该流程使用SSIS包和一些ETL工具来执行该任务。这些PKG和ETL工具本身需要5到15分钟来处理,具体取决于输入大小

有很多输入,也有很多SSIS包和ETL程序

我们想用一些.NET应用程序替换那些SSIS PKG和ETL程序。 我们关心这些.net应用程序的速度和性能,因为在.net中通常I/O速度很慢


或者有没有更好的方法来处理这个问题。

我们用.NET控制台应用程序取代了最简单的SSIS包,该应用程序使用BULKINSERT导入数据。性能令人满意地快。

我个人更喜欢使用SSI,因为它易于向新用户解释软件包的功能

每次我使用C#组件/任务时,我几乎总是永远拥有这个包,我的目标是将开发的工作交给他人,这样我就可以处理新的任务

这可能是因为我在BI环境中,我们主要雇佣数据库开发人员和报表编写人员,以及我们通常在web开发方面有专长的.net人员

我真的自学了c#以获取返回XML和JSON的web服务。我发现,与尝试使用SSIS XML源代码相比,将数据转换为c#类更容易处理,而且极其复杂。但是现在我有了基础知识,我能够很快学会如何解决越来越多的问题


尽管如此,我还是喜欢SSI的信封,在必要的时候使用脚本任务和组件,速度更快,有时甚至更简单。

虽然我的回答有点晚,但我们在过去遇到了同样的问题:我们想离开SSI,用C代码完成整个ETL。但我们也希望有一些类似SSIS的数据流。我向您推荐nuget包ETLBox(),它基本上是SSI的C#替代品

例如,您必须执行以下操作才能将数据从CSV加载到数据库中:

定义一个CSV源

CSVSource sourceOrderData = new CSVSource("demodata.csv");
(可选)定义行转换:

RowTransformation<string[], Order> rowTrans = new RowTransformation<string[], Order>(
  row => new Order(row)
);    
最后启动数据流(异步)并等待加载所有数据

source.Execute();
dest.Wait();

运行批量插入不需要控制台应用程序。这就是
bcp
工具所做的。至于速度,在没有任何转换的情况下应该是一样的——SSI、大容量插入和bcp在这种情况下做相同的工作。是的,但将其放在控制台应用程序中可以使其与其他逻辑相协调。这个问题包含很多错误、谬误和神话。在.NET中的IO速度慢吗?真正地缓慢的IO是由错误的代码、错误的查询和错误的模式造成的,而不是因为它是.NET。您为什么要离开SSI?您认为您可以复制相同的功能吗?包括监控和日志记录?包括流处理?为什么您认为控制台应用程序会更好?实际要求是什么?
sourceOrderData.LinkTo(rowTrans);
rowTrans.LinkTo(dest);
source.Execute();
dest.Wait();