反映两个数据集之间的记录删除/添加

时间:2010-10-10 11:17:07

标签: mysql differential-execution

我目前有一张300万条记录表需要每晚更新。 填充此表的数据来自~100个API,这些API都被规范化为一个巨型表。

问题: 如何反映新添加的记录,并在源头删除记录?

事实: 我不能每晚截断桌子并重新插入。 每个API为每条记录提供一个常量ID(因此我可以跟踪它是什么)。 有些字段会每晚更新。

解决方案: 新记录很简单,我只需将它们添加到具有AvailableFrom日期的表中即可。 更新也很容易,我检查每条记录是否存在以及数据是否已经改变(性能会很糟糕)。

删除的记录是我被困的地方。 API只是向我转储了一大堆数据,如何判断记录是否已“掉线”?

我正在考虑某种交换表 - 任何想法?

1 个答案:

答案 0 :(得分:0)

如果判断记录是否被删除的唯一方法是检查api是否已经发送它而不知道您正在寻找什么记录,则需要跟踪iports。如果你总是进行全面导入:

解决方案1:

为数据库中的每一行设置一个标志,然后执行导入并更新你获得的每一行的标志,然后删除所有尚未更新的行。

解决方案2: 为每个导入设置导入ID(绑定到日期?)并将其写入数据库条目。所以你知道哪一行来自哪个导入。使用最新导入的导入ID覆盖现有数据。 然后,您只能使用上次导入的数据。

但是如果你总是进行全面导入,那么放弃之前的所有内容应该更快吗?