2013-06-12 58 views
0

我有2個系列(A和B),每個文檔約70,000個文檔。如果我要比較A和B,95%的文件將是相同的,只有5%會有所不同。每個文檔的結構在A和B中都完全相同。 A是一個常量集合,B是一個臨時集合。我想將B合併爲A. 如果來自B的文檔存在於A - >僅更新「dateLastSeen」字段。如果B中的文檔不存在於A - >將此文檔插入到A.MongoDB合併2個非常相似的集合。現有文檔 - 更新,新文檔 - 插入

...我使用Python驅動程序(如果有的話)。

這樣做的最有效方法是什麼? 謝謝。

+0

如果他們有相同的ID也比較他們 – gustavohenke

+0

你有什麼試過?似乎你可以得到一個列表,並在內存中比較它們,並根據需要更新該字段。 – WiredPrairie

回答

0

查詢方面最有效的方法是批量更新所有需要更新的日期,然後批量插入所有需要插入的文檔。

鑑於您有95%的文件要更新A.dateLastSeen爲B.dateLastSeen。單一更新將是:〜66,500次更新。留下〜3,500個插頁。

將所有B和A加載到內存中 - 然後處理是一種可能性。

您可以創建一個批量插入列表,並隨時追加從B從A 還包含文檔更新的列表中dateLastSeen鍵控批量更新字典缺少文檔。取決於任何匹配dateLastSeen值的概率,看看這是否真的值得。

或者,簡化它一個接受高查詢開銷並開始處理B批量的1000個,在A中加載等價1000個比較更新/批量插入。保持內存打印並總共添加約210個額外的查詢以獲取批量數據(〜70批次從B獲取,〜70從A和〜70批量插入)。

+0

您選擇了哪個選項? – Ross

相關問題