我的 MongoDB 集合用作作业队列,有 3 台 C++ 机器从这个集合中读取数据。问题是这三个人不能执行相同的工作。所有作业只需完成一次。
我通过使用“isDone:False”在集合中搜索所有记录来获取所有未完成的作业,然后更新此文档“isDone:True”。但是,如果两台机器同时找到相同的文件,它们将同时进行相同的工作。我怎样才能避免这种情况?
编辑:我的问题是 - findAndModify 真的能解决这个问题吗? (看完A way to ensure exclusive reads in MongoDb's findAndModify?)
最佳答案
是的,findAndModify解决了。
引用:MongoDB findAndModify from multiple clients “…… 注意:此命令在受影响的数据库上获得写锁,并将阻止其他操作直到完成;然而,写锁通常是短暂的并且等同于其他类似的 update() 操作。 ……”
引用:http://docs.mongodb.org/manual/reference/method/db.collection.update/#db.collection.update “…… 对于未分片的集合,您可以使用 $isolated 隔离运算符覆盖此行为,它隔离更新操作并在更新期间阻止其他写操作。请参见隔离运算符。 ……”
引用:http://docs.mongodb.org/manual/reference/operator/isolated/
问候, 莫西
关于来自多个客户端的 MongoDB findAndModify,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15988230/