我在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。 (只有其他瓶颈我可以看到)唯一的其他选择是将更新命令写为“多”更新,但这并非总是可行。 –