我正在实施一个使用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是否仍然可以作为同步锁定,只需允许第一次调用成功?
由于