比较数百万个mongoDB记录中的更改的最佳方法

问题描述

我正在一个项目中,我存储着数百万个网站的dns记录,我需要定期监视和更新这些数据中的更改。数据存储在mongodb上,如下所示

{
  domain: "www.google.com","IP": [
         {
           "value":"216.58.198.78","first_seen":"2020-02-01 00:00:00","last_seen":"2020-02-10 00:00:00"
          },{
           "value":"216.58.198.75","first_seen":"2020-02-11 00:00:00","last_seen":"2020-02-25 00:00:00"
          },...
         ]
        
}

我运行定期扫描以获取新域和新的DNS记录,我想知道将其与存储在数据库中的数据进行比较并更新的最佳方法

我在想什么,是要执行以下操作。

  1. 数据库中检索所有记录(我认为这根本不好)
  2. 将检索到的数据存储在以域为键的python字典中
  3. 浏览最新记录
  4. 检查域是否存在于字典中,然后比较更改并对字典进行必要的更新。
  5. 如果该域不存在,请将其添加到字典中
  6. 丢弃收藏集?
  7. 执行批量写入操作以存储新值

这在性能和内存消耗上听起来很糟糕(我们正在内存中存储数百万条记录),但是我不确定其他选择(先查询然后更新)是否会更好(因为我们需要执行数百万笔交易)

如果您能提供关于实现此目标的最佳方法的见解,或将我引导到可能有帮助的研究领域,我将不胜感激。

谢谢

解决方法

通常的做法是在数据库表上添加数据字段(例如“ NeedUpdate”)。

在创建新记录时,该记录的“ NeedUpdate”将为“ ON”

更新现有记录后,“ NeedUpdate”也将设置为“ ON”

之后,您可以运行cron作业(或任何定期扫描)以“ NeedUpdate” =“ ON”处理记录(在处理之后,设置“ NeedUpdate =”“。

在这种情况下,系统只需要处理需要更新的记录即可。