我的 MongoDB 集合用作作业队列,有 3 个 C++ 机器从该集合中读取数据。问题是这三个人不能执行相同的工作。所有作业只需完成一次。
我通过在集合中搜索带有“isDone:False”的所有记录来获取所有未完成的作业,然后更新此文档“isDone:True”。但是如果两台机器同时找到相同的文档,它们就会执行相同的工作。我怎样才能避免这种情况?
编辑:我的问题是 - findAndModify 真的解决了这个问题吗?
(看完之后确保 MongoDb findAndModify 中独占读取的方法? https://stackoverflow.com/questions/15505176/a-way-to-ensure-exclusive-reads-in-mongodbs-findandmodify)
是的,findAndModify解决了它。
Ref: 来自多个客户端的 MongoDB findAndModify https://stackoverflow.com/questions/15988230/mongodb-findandmodify-from-multiple-clients“……
注意:此命令会获取受影响数据库的写锁,并会阻止其他操作,直到完成为止;然而,通常写锁是短暂的并且等同于其他类似的 update() 操作。
……”
Ref: http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update“……
对于未分片的集合,您可以使用 $isolated 隔离运算符覆盖此行为,该运算符隔离更新操作并在更新期间阻止其他写入操作。请参阅隔离运算符。
……”
Ref: http://docs.mongodb.org/manual/reference/operator/isolated/ http://docs.mongodb.org/manual/reference/operator/isolated/
问候,
莫阿西
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)