我敢肯定,这是一个非常模糊的问题,很难回答,但如果您对这个主题有任何一般性的想法,我将不胜感激。
让我给你一个快速的背景。
十年前,我们曾经编写数据加载,从遗留应用程序读取输入平面文件并将它们加载到我们的数据集市。最初,我们的加载程序是用 VB6 编写的,并通过平面文件和每个记录,执行以下一般过程:
1)查询记录。如果找到,更新它
2)否则插入新记录
然后我们最终将这个过程更改为使用 SQL Server 对临时表中的平面文件进行 DTS,然后我们将对临时表与目标生产表执行大规模集基连接,从临时表中获取数据并使用它更新目标表。未加入的记录被插入。
这是流程的简化,但本质上,流程从迭代方法转变为“基于集合”,不再一次更新 1 条记录。结果,我们获得了巨大的性能提升。
然后我们在 DLL 中创建了我认为的一组强大的共享函数,以使用这种方法执行常见的函数/更新模式。它极大地抽象了开发过程,真正缩短了开发时间。
然后,ETL 工具 Informatica PowerCenter 出现了,mgt 希望对该工具进行标准化并重写使用 DTS 的旧 VB 负载。
我听说 PowerCenter 以迭代方式处理记录,但我知道它确实做了一些优化技巧,所以我很好奇 Informatica 的表现如何。
有没有人有使用 DTS 或 SSIS 来预测肠道性能的经验,哪个通常会更好?
最佳答案
我加入了一个同时使用 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 小时,但我仍然认为它不会做得更好。
关于ssis - DTS/SSIS 与 Informatica Power Center,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3693920/