在我的項目中,我不得不多次更新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 program
和MongoDB 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 /秒
檢查[MONGO批量操作(http://docs.mongodb.org/manual/reference/method/ js-bulk /) – Yogesh
哪種語言和驅動程序?他們基本上都有相同的方法可用。請參閱[「批量」](http://docs.mongodb。org/manual/reference/method/Bulk /) –
非常感謝@yogesh和@Blakes七,我先用'pymongo',現在我用'mongo_c_driver'來代替,我可以用多線程來提高更新的性能。我非常想念MongoDB文檔中的'bulk'。它的工作速度比以前更快,謝謝。 –