2010-10-10 68 views
0

我目前有一个需要每晚更新的3m记录表。 填充此表的数据来自大约100个API,这些API都被归一化为一个巨型表。反映两个数据集之间的记录删除/添加

问题: 如何反映正在添加的新记录以及在源处删除的记录?

事实: 我不能每天晚上截断表并重新插入。 每个API为每条记录提供一个常量ID(这样我就可以跟踪什么是什么)。 有些字段将每晚更新。

解决方案: 新记录很容易,我只是将它们添加到我的表与一个AvailableFrom日期。 更新也很容易,对于每条记录我会检查它是否存在以及数据是否已更改(性能会变差)。

删除的记录是我卡住的地方。 这些API只会转储一大堆数据,我该如何判断一条记录是否“脱落”?

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

回答

0

如果要告诉记录是否被删除,唯一的方法是检查api是否提供了它,而不知道你正在寻找什么记录,你需要跟踪iports。如果你总是做一个完整的进口:

解决方案1:

设置标志,用于在数据库中的每一行,然后做进口和更新你的每一行的标志,然后删除了并不代表一切已更新。

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

但是如果你总是做一个完整的导入,放弃之前的一切应该更快不应该?

+0

谢谢,我去了第一个解决方案。解决方案2可能更整洁(我可以创建带有统计数据的导入对象等),但是我添加了LastUpdated列。一个单独的进程然后清除旧的行。完全导入会破坏其他地方引用的表ID。 – jimi 2010-10-11 14:03:26

相关问题