问题描述
我正在一个项目中,我存储着数百万个网站的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记录,我想知道将其与存储在数据库中的数据进行比较并更新的最佳方法。
我在想什么,是要执行以下操作。
- 从数据库中检索所有记录(我认为这根本不好)
- 将检索到的数据存储在以域为键的python字典中
- 浏览最新记录
- 检查域是否存在于字典中,然后比较更改并对字典进行必要的更新。
- 如果该域不存在,请将其添加到字典中
- 丢弃收藏集?
- 执行批量写入操作以存储新值
这在性能和内存消耗上听起来很糟糕(我们正在内存中存储数百万条记录),但是我不确定其他选择(先查询然后更新)是否会更好(因为我们需要执行数百万笔交易)
如果您能提供关于实现此目标的最佳方法的见解,或将我引导到可能有帮助的研究领域,我将不胜感激。
谢谢
解决方法
通常的做法是在数据库表上添加数据字段(例如“ NeedUpdate”)。
在创建新记录时,该记录的“ NeedUpdate”将为“ ON”
更新现有记录后,“ NeedUpdate”也将设置为“ ON”
之后,您可以运行cron作业(或任何定期扫描)以“ NeedUpdate” =“ ON”处理记录(在处理之后,设置“ NeedUpdate =”“。
在这种情况下,系统只需要处理需要更新的记录即可。