【问题标题】:reflecting record deletions / additions between two datasets反映两个数据集之间的记录删除/添加
【发布时间】:2011-04-23 10:33:15
【问题描述】:

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

问题: 如何在源头体现新增记录和删除记​​录?

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

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

删除的记录是我卡住的地方。 API 只是向我转储了大量数据,我如何判断记录是否“丢失”?

我正在考虑某种交换表 - 有什么想法吗?

【问题讨论】:

    标签: mysql differential-execution


    【解决方案1】:

    如果判断一条记录是否已被删除的唯一方法是在不知道您正在寻找的确切记录的情况下检查 api 是否再次提供它,则您需要跟踪 iport。如果您总是进行完全导入:

    解决方案 1:

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

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

    但如果您总是进行完全导入,那么删除之前的所有内容应该会更快,不是吗?

    【讨论】:

    • 谢谢,我选择了第一个解决方案。解决方案 2 可能更简洁(我可以使用统计信息等创建 Import 对象),但我添加了 LastUpdated 列。然后一个单独的进程清除旧行。完全导入会破坏在别处引用的表 ID。
    猜你喜欢
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    相关资源
    最近更新 更多