我目前正在研究 SSIS 包,用于从 OLTP 系统到驻留在不同服务器上的报告数据库的表(现在有 40 个表,预计在不久的将来会增加)的连续增量数据加载。
该请求用于两个源之间的实时数据同步。
我应该继续并仅使用常规 SSIS -> Staging -> merge route 测试它,还是应该考虑实施 CDC。考虑到所涉及的表的数量,这会比普通的旧 ETL 更快吗?
我目前正在研究 SSIS 包,用于从 OLTP 系统到驻留在不同服务器上的报告数据库的表(现在有 40 个表,预计在不久的将来会增加)的连续增量数据加载。
该请求用于两个源之间的实时数据同步。
我应该继续并仅使用常规 SSIS -> Staging -> merge route 测试它,还是应该考虑实施 CDC。考虑到所涉及的表的数量,这会比普通的旧 ETL 更快吗?
您是否考虑过事务复制?据我所知,这将是管理开销较少的最佳选择。
这样您将几乎实时拥有数据库,并且可以相对容易地修改以在将来包含更多表。
https://learn.microsoft.com/en-us/sql/relational-databases/replication/transactional/transactional-replication?view=sql-server-2017
CDC 不会替换 SSIS -> Staging -> Merge 路由,它只是使 SSIS 部分更容易 - ETL 的提取。CDC 使这变得容易得多,这是它设计的用例之一。对于每次更改,您都会在更改前后获得该行的副本,您可以抓住它然后清理它。
它确实有一些在您开始之前并不明显的问题。引起我注意的两个重大变化是:
它也没有提供任何方式来对数据进行完全重新同步,它只是添加的。
我不认为我应该做一个或另一个来回答这个问题,答案(通常是这种情况)是“这取决于”。不过,这绝对值得研究。
另请注意,CDC 仅在 SQL 2016 SP1 之前的企业版中可用(当它在所有版本中可用时)。