我在mongo集合中有數以萬計的行,並且需要更新所有這些行。 我寫了一個蒙戈外殼(JS)這樣的腳本:更新大量數據的最快方法
db.Test.find().forEach(function(row) {
// change data and db.Test.save()
});
其中(我猜)應該會更快然後例如通過任何語言驅動程序更新由於蒙戈Web服務器和蒙戈服務器本身,只是因爲這樣的事實,即駕駛者之間可能存在的延遲「東西在上面」,並且是「東西在地下室」。
即使它可以更新大約2 100 rec./sec四核2.27GHz處理器與4GB RAM。
據我所知mongoimport可以處理周圍40K rec./sec(在同一臺機器上),我不認爲提到的速度是什麼,「快」。
有沒有更快的方法?
這裏是mongostat:http://pastebin.com/raw.php?i=Z92Abh2L這裏是iostat:已http://pastebin.com/chaJF3L3什麼是真正的 「高鎖%」? –
在'mongostat'上,你鎖定的%'很低,只有大約17%。所以這不是數據庫寫入鎖定。通常我運行'iostat -xkd 1'來獲得IO使用的1秒間隔(用法顯示爲kB/s)。一個好的服務器驅動器應該是> 50 MB/s,所以看看是否阻止。這一步是'頂部'。如果你不是最大化IO並且你沒有最大化Mongo的寫入鎖定,那麼檢查CPU。 (只有其他瓶頸我可以看到)唯一的其他選擇是將更新命令寫爲「多」更新,但這並非總是可行。 –