.Net vs SSIS:SSIS应该用于什么?

时间:2009-03-27 15:03:15

标签: .net sql-server ssis

如果我可以选择使用.Net并且可以在.Net中进行数据转换,我何时需要SSIS?是否有一项SSIS会更好的任务?透明度的额外好处值得吗?这是我更舒服的吗?确定这一点的最佳做法是什么?

14 个答案:

答案 0 :(得分:46)

好的问题。

如果数据传输量巨大?你在处理多个数据文件并需要事务(在文件系统级别和数据库级别)?你在不同的位置处理多个数据源(例如ftp,本地文件系统,数据库)?

如果上述答案是肯定的,那么请继续使用ssis。基本上.net很酷,有小型数据导入/导出工作,但当你有更复杂的东西时,ssis肯定是赢家

我看到的另一件事是 - 当ssis中的所有内容都可用时,是否值得编写.net代码。 (不要误会我 - 我喜欢编码)但是,你编码的任何东西,你需要维护: - )

答案 1 :(得分:19)

我认为项目时间/预算限制以及使用标准工具是使用SSIS的一些最重要的论据。创建SSIS包大多数时候比尝试在.NET中编写类似代码的方式更快。

但话虽如此,似乎SSIS有很多pain points,有时可能会使这个论点无效。在开发需要在许多不同客户端的不同环境中运行的解决方案时,它确实为我做了。我对项目进行评估的次数越来越多,SSIS看起来太痛苦了。正确构建的.NET解决方案更易于部署,更可靠,更灵活,更易于理解,并且还可以实现非常好的性能。

恕我直言:考虑将SSIS用于您只需部署到一个或两个内部SQL Server环境的项目。否则,.NET方法将很快变得更具吸引力。

答案 2 :(得分:7)

我想这取决于你在做什么。 SSIS非常强大,就像旧的DTS一样。如果你正在装载很多物品并期望不断变化,我会一路走SSIS。如果您只想加载少量商品而且需要很多客户,我会把它放在代码中。我更喜欢SSIS用于内部ETL过程,但是当我需要将遗留系统中的数据加载到SQL数据库时,我在客户端商店使用.Net。现在正如我之前所说,如果你有很多转换和许多不同的数据孤岛需要加载,我想你会疯狂地在.Net中这样做,我会去SSIS。如果您只有几个要加载的项目,并且它适用于单个应用程序,并且可以作为应用程序的一部分安装在不同的客户端,我会一直使用.Net。我的2美分。

答案 3 :(得分:7)

我不使用SSIS的论点是:

  • 设计绿地产品,使其具有RESTful数据源,用于项目计划和预算中内置的报告和提取,最好是OData等标准,以便其他工具可以直接插入。

    < / LI>
  • 数据Feed应该从上游系统中提取和转换,并按需提供;因此,计划任务,计划任务的配置,任务运行者VM以及运行所有这些不可靠调度内容的人员都被否定了。

  • RESTful数据源利用HTTP缓存。

  • 可以轻松地将Feed / services / API移动到弹性云。

  • SSIS要求找到具有SSIS技能的人,他们喜欢这样做几周。根据我的经验,寻找和保留SSIS开发人员既困难又昂贵,而且发现的人往往低于标准。

  • SSIS在源代码控制和协作工作方面做得不好。

  • 与微服务和传统代码库不同,SSIS不适合代码重用。

  • 与REST服务不同,SSIS不易编辑。

  • SSIS不适用于模块化设计和许多小变更的持续部署,它往往是大批量的,带有可怕的版本。

  • SSIS促进了存储过程的使用,这对SQL作为热点需求很大。赞成对可扩展的无状态中间层提出要求的设计。

  • 工具笨重且不可靠。

  • 您将受到Microsoft的SSIS路线图的支配。

  • 一旦数据进入应用程序,请考虑写入支持分析,报告和视图的表/服务;请参阅CQRS和其他应用程序架构模式。

  • 绝不使用Excel作为数据来源;培训员工。

  • 代码为王。

最终,我将SSIS视为企业IT的遗留物。我想问一下,&#34;谷歌会使用SSIS吗?&#34;问题怎么解决?在盒子外面思考。

答案 4 :(得分:4)

我在从小型项目到大型复杂ETL的SSIS方面拥有丰富的经验。没有详细说明,这是我的指导:

  • 如果您是DBA并且不熟悉.NET,或者您是熟悉SSIS的开发人员,则可以使用SSIS进行小型,简单,相当简单的提取,转换,加载(ETL) )任务。

  • SSIS非常古怪,有许多陷阱,陷阱,以及可能被认为是彻头彻尾的错误。如果你非常熟悉,这是非常强大的。

  • C#现在有TPL数据流。简单的性能测试使其领先于SSIS。 (例如http://mymemoryleaks.blogspot.cz/2013/10/ssis-vs-tpldataflow.html

  • 如果您想做一些微不足道的事情,并且您可以使用.NET技能,请使用.NET而不是SSIS。

答案 5 :(得分:2)

SSIS有许多内置的方法可以从不同的数据源进行转换,您可以将它们串联起来,使其可以非常自定义。它们内置了优化功能,使它们变得快速。

您还可以使用.NET进行自定义转换,以利用SSIS作业的速度和可重复性。

答案 6 :(得分:2)

我认为主要优势是可视化地定义整个编程结构。任何人看看SSIS包都是非常自我解释的。通过SQL与SSIS的紧密集成使您可以成为SQL的一部分,用于备份调度和巨大优势。

每个人解释说如果你正在进行大量的数据操作,那么这是一个很好的工具。如果您已经准备好SQL,并且使用VS 2008 BIDS非常容易学习,那么它是免费的

答案 7 :(得分:2)

迟到回答这个问题,但我希望它值得,

与编程语言相比,SSIS经常被误解。 SSIS是一个框架,而C#是.NET Framework上的一种语言。我在处理和处理方面有丰富的经验。使用(MSBI套件)开发大型数据仓库解决方案,并开发了大型网站(ASP.NET) - 所以我不能有偏见。

SSIS如果使用不当可能会降低性能。 SSIS包有三种转换:

  1. 阻止转换 - 只有在完成转换完成后才能传递数据,获取所有行并完成所需的计算。
  2. 半阻止转换 - 可以传递部分数据
  3. 非阻止 - 在准备好后立即对该行进行处理
  4. SSIS在非阻塞转换方面非常出色,并且在控制流和数据流方面进行了适当的设置。我已经在更大的(超过2 TB的数据仓库)上使用它,我可以保证它是最快的负载体验。您可以查看Microsoft博客中的We Loaded 1TB in 30 Minutes with SSIS, and So Can You

    我同意SSIS在处理阻塞转换时会降低性能,并且应该在需要时由T-SQL承载。

    来到C#,我接受SSIS使用.NET框架和数据提供程序来完成任务。但是C#作为一种语言更具逻辑性,必须对待它来处理业务逻辑。例如,如果我们必须根据条件运行带有不同参数的exe,您可以编写一个包,该包将考虑参数,然后在逻辑上决定需要传递哪个参数来运行exe文件。在SSIS中执行此操作将是一个漫长的过程,而我可以在C#中轻松完成这一过程,因为逻辑事物可以用语言而不是框架轻松完成。

    现在重点是解决问题陈述的更方便的方法。 SSIS是一个肯定的赢家,可以加载大量从源到目的地加载数据的记录,而C#非常适合编写逻辑。即使你喜欢C#,我也不建议你选择在大型数据仓库系统上进行ETL(Extract Transform Load)操作。

答案 8 :(得分:1)

顾名思义,SSIS是一个集成系统。在.net中,很难处理连接器以分散各种数据源(例如excel,teradata,oracle等),也难以履行优雅地关闭这些连接,进行垃圾回收,处理内存问题的责任。

因此,SSIS是开箱即用的产品的理想选择,不仅需要从两个不同的来源中提取数据,而且还需要在写入之前执行一系列查找,转换,合并,推导和计算的场​​景将其定位到目标位置(SQL服务器,平面文件或其他数据库系统)。

SSIS还具有检查点,如果该软件包由于任何原因而失败,它将从中断处重新开始(需要配置它,因为这不是默认行为)。

此外,由于SSIS的任务是可重用的,并且部署过程非常容易实现和安排,并且具有出色的事件处理能力,因此SSIS将为您节省大量时间。

答案 9 :(得分:1)

基本上,SSIS具有许多优势,例如将数据从A点到B点的传输分成较小的块并分别进行调试,能够轻松访问SQL Server表,处理XML数据,使用c#脚本进行API调用,以及将数据保存在DB上,读取远程服务器上的DB数据和FTP等。
除了一堆已经存在的BI块之外,您还可以使用自己的参数和输出创建自己的自定义任务。
希望我能够为已经存在的答案添加一些要点。

答案 10 :(得分:1)

SSIS通常用于ETL(提取转换负载)。具体的用例是对SSAS(SQL Server Analysis Services)多维数据集的预处理。并使用Data Change Capture增强提取。

它可以执行典型的自动化操作,包括FTP和电子邮件。在编程方面,使用脚本任务(C#或Visual Basic),因此SSIS所具有的功能超出了它所包含的控件...

可以对包装进行编程以使用条件控制流路径。例如,在周一至周五执行某项任务,而在周六和周日执行另一项任务。如果某些条件不满足,则拒绝执行ETL。

SSIS包可以调用其他SSIS包。这样可以使代码保持模块化,从而可以重复使用。

它可以使用各种数据源,并使用“派生列”控件执行简单的转换。这与在源服务器(例如Oracle或Hadoop,您无法通过本地SQL Server进行控制的源服务器)上进行转换相对应。

答案 11 :(得分:0)

日常任务,由SSIS Deveoper使用并且是    与.Net相比,相对简单

表格之间的数据比较。

条件拆分,数据在某些基础上阻塞数据    逻辑。

数据转换,查找,合并,unionall,相对容易使用。

文件处理(修改,验证)。

错误处理,电子邮件提醒。

容器,FOR / FOReach循环易于使用。

使用WebService任务可以轻松地在Web服务上发布数据。

检查点,数据加载的重新运行性很容易处理。

调试很简单 - 可以在conatiner lever,package上完成    水平。

如果任务不可用,也可以执行脚本编写。此外,您可以自定义自己的任务

答案 12 :(得分:0)

以前的答案中没有人说的是正确的,但我认为使用SSIS而不是编码最重要的方面是维护过程简单,也是可重用的产品。

答案 13 :(得分:0)

SSIS非常适合BI应用程序,您可以操作Stage Table上的数据,而不是将DataWarehouse表用于BI。

我可以在SAP,Oracle上连接以获取员工信息并在PowerBI,QlikView等上提供...

如果您知道使用它的地点和原因,它是一个很好的工具。使用ir因为它很酷你会遇到麻烦。