我有2个集合(A和B),每个集合有大约70,000个文档。如果我要比较A和B,95%的文件是相同的,只有5%会不同。每个文档的结构在A和B中完全相同。 A是常量集合,B是临时集合。我想将B合并到A. 如果来自B的文档存在于A - >;仅更新“dateLastSeen”字段。如果B中的文档不存在于A - >中;将此文件插入A。
...我正在使用Python驱动程序(如果这很重要)。
最有效的方法是什么? 谢谢。
答案 0 :(得分:0)
在查询方面最有效的方法是批量更新每个日期需要一次更新的所有日期,并批量插入所有需要插入的文档。
鉴于您有95%的相同文档要将A.dateLastSeen更新为B.dateLastSeen。单次更新将是:~66,500次更新。留下约3,500个插页。
将所有B和A加载到内存中 - 然后处理是一种可能性。
您可以创建批量插入列表,并在A中缺少来自B的文档时附加。
此外,由dateLastSeen
键入的批量更新字典包含要更新的文档列表。取决于任何匹配dateLastSeen
值的概率,看看这是否真的值得。
或者,简化它接受高查询成本并以1000的批量开始处理B,在A中加载等效的1000并比较并更新/批量插入。保持内存打印,总共只增加~210个额外查询来获取批量数据(从B中抽取大约70个,从A中抽取大约70个,从大约70个批量插入中抽取〜70个。)