来自多个客户端的 MongoDB findAndModify

标签 mongodb

我的 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/

相关文章:

mongodb - 无法从 ReactiveMongo Play 应用访问经过身份验证的 MongoDB 集合

mongodb - Go Mongo Driver 检索无模式文档

mongodb - docker-compose 抑制 mongodb 输出

mongodb - 未在ElasticSearch中添加Mongo '_id'字段

javascript - 自定义 MongoDB 查询以返回特定的子文档

c# - 如何使用最新版本的 C# (1.8.2+) 驱动程序获取 MongoCursorEnumerator<T>?

python - Tornado "error: [Errno 24] Too many open files"错误

javascript - 使用 Mongoose 时遇到问题 'Populate'

node.js - 如何将 findAndModify 与 Node.js MongoDB 驱动程序一起使用?

mongodb - ReactiveMongoRepository/MongoRepository不返回_id字段