3

我敢肯定,这是一个非常模糊的问题,很难回答,但我将不胜感激有关该主题的任何一般性想法。

让我给你一个快速的背景。

十年前,我们曾经编写数据加载,从遗留应用程序读取输入平面文件并将它们加载到我们的 Datamart。最初,我们的加载程序是用 VB6 编写的,并在平面文件中游标,并为每条记录执行以下一般过程:

1)查看记录。如果找到,更新它 2) 否则插入新记录

然后我们最终改变了这个过程,使用 SQL Server 对临时表中的平面文件进行 DTS,然后我们将在临时表上与目标生产表执行大规模集合基础连接,从临时表中获取数据并使用它更新目标表。插入了未加入的记录。

这是流程的简化,但本质上,流程从迭代方法变为“基于集合”,不再一次执行更新 1 条记录。结果,我们获得了巨大的性能提升。

然后,我们在 DLL 中创建了我认为的一组强大的共享函数,以使用这种方法执行常见的函数/更新模式。它极大地抽象了开发,真正减少了开发时间。

然后,ETL 工具 Informatica PowerCenter 出现,mgt 希望对该工具进行标准化并重写使用 DTS 的旧 VB 负载。

我听说 PowerCenter 会迭代处理记录,但我知道它确实做了一些优化技巧,所以我很好奇 Informatica 的表现如何。

有没有人有任何使用 DTS 或 SSIS 能够做出直觉性能预测的经验,即哪个通常会表现更好?

4

1 回答 1

6

我加入了一个同时使用 Informatica PowerCenter 8.1.1 的组织。虽然我不能说一般的 Informatica 设置,但我可以说这家公司的 Informatica 效率极低。主要问题是 Informatica 在后端生成了一些非常可怕的 SQL 代码。当我观察它使用分析器所做的事情并查看文本日志时,它为需要插入/更新/删除的每一行生成单独的插入、更新和删除语句。我没有尝试修复 Informatica 实现,而是简单地将其替换为 SSIS 2008。

我在使用 Informatica 时遇到的另一个问题是管理并行化。在 DTS 和 SSIS 中,并行化任务非常简单——不定义优先约束,您的任务将并行运行。在 Informatica 中,您定义一个起点,然后定义并行运行进程的分支。除非我通过链接工作集或任务明确定义它们,否则我找不到限制并行进程数量的方法。

就我而言,SSIS 的性能大大优于 Informatica。我们使用 Informatica 的加载过程大约需要 8-12 个小时。我们使用 SSIS 和 SQL Server 代理作业的加载过程大约需要 1-2 小时。我确信如果我们适当地调整 Informatica,我们可以将负载减少到 3-4 小时,但我仍然认为它不会做得更好。

于 2010-09-12T19:50:36.287 回答