MongoDB findAndModify在集群中是原子的吗?

时间:2017-08-31 10:03:56

标签: mongodb concurrency atomicity findandmodify

我正在实施一个使用MongoDB findAndModify来模拟资源锁的解决方案。

我的问题是,findAndModify是否在副本集上提供与在单个实例上相同的原子性?

这是一个示例PHP代码

$lock = $this->getMongoDb()->selectCollection('users')->findAndModify(
             array(
                        '_id' => new MongoId($id),
                        '$or'                       => array(
                            array('transaction.locked' => array('$ne'=>true)),
                            array('transaction.locked' => true, 'transaction.timestamp' => array('$lt' => new MongoDate(strtotime($lock_timeout))))
                        )
                ),
             array(
                        '$set' => array(
                                    'transaction.locked' => true,
                                    "transaction.timestamp" => new MongoDate(strtotime($current_time))
                                )
                )
        );

我通过检查记录是否存在而未锁定来创建锁,然后锁定记录。

如果我尝试同时多次对副本集执行此操作,那么findAndModify是否仍然可以作为同步锁定,只需允许第一次调用成功?

由于

0 个答案:

没有答案