2015-07-13 20 views
0

在我的項目中,我不得不多次更新MongoDB中的文檔。我發現MongoDB支持用insert_many來插入很多文件使用單個命令,但我不能立即使用update_many來更新很多,它們有不同的情況。我必須逐一更新它們。MongoDB能否一次發送乘法更新命令?

使用insert_many,我可以每秒插入超過7000個文件。在相同的環境下,每秒只能更新約1500個文件。發送數千個命令的時候,看起來效率不高。

是否可以一次向MongoDB服務器發送多個更新命令?


感謝您的解釋@Blakes七,我已經重寫我的程序與Bulk和更新與「無序」進行文件操作。我的測試環境中有速度報告。

  • 1螺紋:12655 DOC/s的CPU:150 - 200%
  • 2線程:19005 DOC/s的CPU:200 - 300%
  • 3個線程:24433 DOC/s的CPU:300 - 400 %
  • 4線程:28957 DOC/s的CPU:400 - 500%
  • 5個線程:35586 DOC/s的CPU:500 - 600%
  • 6個線程:32942 DOC/s的CPU:600 +%

在我的測試環境中,運行在同一臺機器上的test programMongoDB server對多線程來說似乎並不完美。 MongoDB的CPU usage用單線程運行程序時,它在150%和200%之間。 MongoDB完全並行地執行了這些操作,似乎對具有客戶端連接的線程有限制。

無論如何,單線程對我來說已經足夠了,而且線程越少效率越高。

客戶端和服務器在不同的機器上運行的網絡環境的另一份報告:

  • 1線:14719 DOC /秒
  • 2個線程:26837 DOC /秒
  • 3個線程:34908 DOC /秒
  • 4線程:46151 DOC /秒
  • 5線程:47842 DOC /秒
  • 6線程:52522 DOC /秒
+2

檢查[MONGO批量操作(http://docs.mongodb.org/manual/reference/method/ js-bulk /) – Yogesh

+1

哪種語言和驅動程序?他們基本上都有相同的方法可用。請參閱[「批量」](http://docs.mongodb。org/manual/reference/method/Bulk /) –

+0

非常感謝@yogesh和@Blakes七,我先用'pymongo',現在我用'mongo_c_driver'來代替,我可以用多線程來提高更新的性能。我非常想念MongoDB文檔中的'bulk'。它的工作速度比以前更快,謝謝。 –

回答