我目前有一张300万条记录表需要每晚更新。 填充此表的数据来自~100个API,这些API都被规范化为一个巨型表。
问题: 如何反映新添加的记录,并在源头删除记录?
事实: 我不能每晚截断桌子并重新插入。 每个API为每条记录提供一个常量ID(因此我可以跟踪它是什么)。 有些字段会每晚更新。
解决方案: 新记录很简单,我只需将它们添加到具有AvailableFrom日期的表中即可。 更新也很容易,我检查每条记录是否存在以及数据是否已经改变(性能会很糟糕)。
删除的记录是我被困的地方。 API只是向我转储了一大堆数据,如何判断记录是否已“掉线”?
我正在考虑某种交换表 - 任何想法?
答案 0 :(得分:0)
如果判断记录是否被删除的唯一方法是检查api是否已经发送它而不知道您正在寻找什么记录,则需要跟踪iports。如果你总是进行全面导入:
解决方案1:
为数据库中的每一行设置一个标志,然后执行导入并更新你获得的每一行的标志,然后删除所有尚未更新的行。
解决方案2: 为每个导入设置导入ID(绑定到日期?)并将其写入数据库条目。所以你知道哪一行来自哪个导入。使用最新导入的导入ID覆盖现有数据。 然后,您只能使用上次导入的数据。
但是如果你总是进行全面导入,那么放弃之前的所有内容应该更快吗?