我管理着一些包含超过 10 亿条记录的表。他们的 ETL 每天运行,从平面文件中读取数据并在每个文件中插入几千条记录。
现在我需要将这些相同的表也保存在另一个数据库中,当然它们需要具有相同的数据。数据将使用链接服务器传输。
最简单的方法是截断目标表,选择源插入到目标,然后重建其索引。但我不喜欢每天复制相同数据的想法。
我看到的另一个解决方案是查询源表和目标表,按日期维度区分,然后仅复制缺失日期的记录。然后我会创建一个监视器来查看每天的记录数量是否相等并突出显示不匹配的日期。
第二种解决方案是否足够好,或者是否有针对这种情况的最佳实践?
如果我必须管理它,我会查看什么(如果有的话)修改了 ETL 过程之外的表中的数据。
如果除了你的 ETL 之外没有其他东西修改数据,我会简单地更新 ETL 过程以在两个位置插入完成的数据(并且同样执行你在两个地方所做的任何索引维护)。
如果其他东西更新了这些数据,但只有一台服务器,那么事务复制可能是将数据获取到辅助服务器的最轻量级方法。即使没有在 ETL 之外修改数据,这也不是修改 ETL 过程以更新两个目标的糟糕替代方法。这听起来像是每天插入的数据的一小部分。
如果数据在两台服务器上都被修改,那么您可能需要考虑合并复制。这样做的简单性在很大程度上取决于表是否有任何标识列。