我们使用托管副本集(一个主副本和一个副本)并尝试使用Ruby驱动程序运行以下查询。使用800K文档时,这需要将近一个小时并锁定所有写入,因此数据库变得完全无法访问。
User.collection.update({}, {:$unset => {likes: 1}}, {multi: true, safe: true})
根据我们的mongo主机,此查询最终会一次更新一个文档,以便可以复制它们,这就是它花费这么长时间的原因。这听起来不错???
他建议只批量更新文档1000次,然后睡1-2次。我觉得必须有更好的方法来做到这一点,对吗?
我们在我们的暂存系统(不使用副本集)上运行此查询,整个查询在大约五分钟内完成,因此复制集(也是在更强大的机器上)似乎很奇怪慢得多。
谢谢!