我有大约 320 万条记录的大量集合,该集合数据每月更新一次,但源数据按原样获取,这意味着我不仅获得更新的记录,还获得所有内容。在性能方面,是简单地删除集合并插入所有内容,还是对每条记录进行更新更好?还有一种好方法可以将现有记录与从源读取的记录进行比较,以检查是否有任何变化?
谢谢。
我有大约 320 万条记录的大量集合,该集合数据每月更新一次,但源数据按原样获取,这意味着我不仅获得更新的记录,还获得所有内容。在性能方面,是简单地删除集合并插入所有内容,还是对每条记录进行更新更好?还有一种好方法可以将现有记录与从源读取的记录进行比较,以检查是否有任何变化?
谢谢。
还有一种好方法可以将现有记录与从源读取的记录进行比较,以检查是否有任何变化?
您正在寻找变更检测系统:这是 ETL 系统通常描述的问题。我建议您阅读一些有关 ETL 过程的内容(Kimball 的Datawarehouse ETL Toolkit是一个很好的来源)。一般来说,检测变化是一个难题,并且涉及使用快照来计算差异。如果您确定您的收藏将始终保留在 mongo 存储中,您可以查看是否有可能弄乱 mongo 日志。此外,请考虑更改检测与数据的结构和含义非常相关:例如,如果您有仅插入的集合,则可以通过以下方式获取更改的数据_id
. 这个问题太复杂了,无法给出“做这个做那个,你会得到它”的答案;您必须分析您的数据并了解什么是更好的方法:参考文献以找到已知的解决方案并避免重新发明轮子。
在性能方面,是简单地删除集合并插入所有内容,还是对每条记录进行更新更好?
再一次,您必须知道数据的结构。如果您的集合比常量部分具有更多更改,则最好重新加载整个集合并避免跟踪更改。如果您的集合具有比整个集合小得多的变更集,则更新现有文档会导致更好的性能。
希望这可以帮助。