【发布时间】:2012-04-18 20:05:20
【问题描述】:
我每天从源中获取 600,000 行,我需要将它们转储到 SQL Server 目标中,这将是一个增量负载。
现在,由于目标表的大小可能每天都在增加,这将是增量负载的最佳方法。我脑子里没有几个选择:
-
查找任务
-
合并加入
-
SCD
等等。
请建议我在增量负载中表现良好的最佳选择。
【问题讨论】:
标签: sql-server-2008 ssis
我每天从源中获取 600,000 行,我需要将它们转储到 SQL Server 目标中,这将是一个增量负载。
现在,由于目标表的大小可能每天都在增加,这将是增量负载的最佳方法。我脑子里没有几个选择:
查找任务
合并加入
SCD
等等。
请建议我在增量负载中表现良好的最佳选择。
【问题讨论】:
标签: sql-server-2008 ssis
观看 Andy Leonard 出色的 Stairway to Integration Services 系列或 Todd McDermid 的视频,了解如何使用免费的 SSIS Dimension Merge SCD component 两者都将解决如何正确地做到这一点,比我在此框中所能列举的要好得多。
【讨论】:
合并连接是一个巨大的性能问题,因为它需要预先对所有记录进行排序,不应该用于此。
我们每天处理数以百万计的记录文件,通常将它们放在临时表中,并与更改数据跟踪表中的数据进行哈希比较,以查看数据是否与 prod 上的数据不同,然后仅加载新的一个或一个不同的。因为我们在生产数据库之外进行比较,所以我们对 prod 的影响很小,因为我们只处理它实际需要的 247 条记录,而不是检查数百万条记录。事实上,对于我们最繁忙的服务器,所有这些处理都发生在单独的服务器上,除了最后一步进入 prod。
【讨论】:
如果您只需要插入它们,那实际上并不重要。 如果您需要检查,如果存在,则更新其他插入,我建议创建一个 oleDbSource,您可以在其中查询 600.000 行,并通过现有数据源上的查找任务检查它们是否存在。由于现有数据源是(或趋于)巨大的,因此请注意配置缓存模式的方式。我会使用部分缓存,并根据您正在查找的 ID 排序一些内存限制(根据缓存的工作方式,这个细节非常重要)
【讨论】: