2015-05-13 33 views
2

我有一個Python應用程序迭代遍歷MongoDB(3.0.2)集合中的每個文檔(通常介於10K和1M文檔之間),並添加新字段(可能使文檔中的字段數增加一倍/三倍) 。將多個字段添加到MongoDB集合中的所有文檔的首選方式是什麼?

我最初的想法是,我會用UPSERT修改後的文件(使用pyMongo)的全部 - 我現在質疑的是:

  • 鑑於修訂後的文件是顯著更大,我應該只將新的領域,或只是替換文件?
  • 此外,按文檔或批量對文檔中的集合執行寫入操作會更好嗎?

回答

0

這實際上是一個很好的問題,可以通過幾種不同的方法解決,具體取決於您如何管理數據。

如果您正在插入其他字段,這是否意味着您的數據在稍後的時間點附加了其他字段,唯一的變化是添加了其他字段?如果是的話,你可以set the ttl on your documents so that the old ones drop off over time。請記住,如果你這樣做,你會希望設置一個索引,通過降低_id來排序結果,以便在較老的之前選擇最近的添加。

這樣做這樣做的好處是,您不斷地寫數據,而不是尋找和更新數據,因此速度更快。

關於upserts vs bulk inserts。由於批量插入requires you to find the original document first,批量插入始終比插入更快。

  • 鑑於修訂後的文件要大得多,應該只插入新字段還是隻替換文件?
    • 您確實需要充分了解您的數據以確定哪些數據最好,但是如果僅更改數據,則只需要從該點考慮其他字段或更改,然後在舊數據中批量插入和設置一個ttl從寫操作的角度來看,這是更好的方法,而不是尋求,找到和更新。使用此方法時,您需要db.document.find_one()而不是db.document.find(),以便只返回當前記錄。
  • 此外,更好地執行一個文件的基礎上或批量寫入收集寫入?
    • 批量插入將比每個順序插入更快。
相關問題