我有一个MongoDB数据库,可以用作排队系统。它跨多个服务器使用,每个服务器都运行代码的多个实例。
直到现在,我一直在使用find_one_and_delete
使下一个项目待处理,但是最近我感到不幸的是,此功能占用大量资源,并且当集合达到10万个条目时,MongoDB的运行速度大大降低,并且需要几秒钟的时间。
我希望没有办法获得一个条目,而是希望通过确保没有并发冲突来检索该集合中的X个项目。
不幸的是,据我所知,update_many不包含limit
。
到目前为止,这是我想到的:
不好,但是在我看来,它已解决了该问题,并且看起来工作正常。
我要问的是,是否有一种方法可以更快(在update_many上使用limit
)和MongoDB并发的方式?
答案 0 :(得分:2)
值得尝试将Mongodb Transactions作为并发安全机制。
collection.find().limit(X)
collection.deleteMany({ _id: { $in: [IDs] } })
有关此处交易的更多信息
答案 1 :(得分:0)
好吧,如果您知道在系统中大多数时候需要哪些键,则可以创建一个会话,直接在deleteMany中传递查询并提交事务。
这将很快,因为您现在不必遍历文档来获取木乃伊或确定要删除的记录,Mongo会为您完成。