我应该使用SSIS或多线程C#应用程序将平面文件加载到数据库中吗?

StackOverflow https://stackoverflow.com/questions/146732

  •  02-07-2019
  •  | 
  •  

在SQL Server Integration Services(SSIS)中,可以设置与平面文件的连接,该文件可以容纳数百万条记录并将该数据推送到SQL DB。此外,可以通过引用和使用Microsoft.SqlServer.Dts.Runtime命名空间从C#应用程序调用此过程。

具有数百万条记录的平面文件最好是使用SSIS运行,还是集体“你”运行?更喜欢具有多个工作线程的c#app(一个用于读取并将该行添加到变量,一个用于从该变量写入到DB),以及一个“母亲”线程。管理这些线程的类? (开发框有两个cpu)

我已经看过这些数据( sql team blog )一个包含一百万行的平面文件,SSIS是最快的:

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

你有什么想法?

有帮助吗?

解决方案

我只能为自己和我的经历说话。我会选择SSIS,因为这是你可能不必要地重新发明轮子的情况之一。这是一项已经由SSIS解决的重复性任务。

我每天都会管理大约57个工作(DTS和SSIS的组合)。其中四个经常处理5到1亿条记录的输出。我管理的数据库大约有20亿行。我利用脚本任务将日期追加到毫秒,这样我就可以每天多次运行作业。现在大约22个月了。太棒了!

也可以安排SSIS工作。所以你可以设置并忘记它。我每天都会监控所有内容,但文件处理部分从未发生故障。

我唯一需要使用自定义C#程序的时候,就是我需要将非常大的文件拆分成更小的块。对于那种东西,SSIS很慢。使用脚本任务,一个gig文本文件需要大约一个小时才能拆分。 C#自定义程序在12分钟内处理完毕。

最后,只需使用您感觉舒适的使用方式。

其他提示

SSIS非常快。此外,如果需要重复发生,您可以设置代理按计划启动它。自己编写是一回事,尝试使其多线程变得比最初看起来要复杂得多。

我推荐SSIS 9次。

在这种情况下,我无法看到使用多个线程如何帮助提高性能。传输大量数据时,主要的瓶颈通常是磁盘I / O.产生多个线程并不能解决这个问题,我的猜测是它会使事情变得更糟,因为它会在多个进程之间引入锁定争用。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top