当MongoDB预测数据不在内存中时读取锁定yealds?

时间:2014-03-12 08:41:47

标签: mongodb concurrency locking

  

在2.2版中更改:在MongoDB 2.2中,屈服的使用大大扩展。包括“页面错误的产量”.MongoDB跟踪内存的内容并预测在执行读取之前数据是否可用。如果MongoDB预测数据不在内存中,则读取操作会在MongoDB将数据加载到内存时产生锁定。一旦数据在内存中可用,读取将重新获取锁以完成操作。

取自"Does a read or write operation ever yield the lock?"

想象一下,写入操作获取锁定。当MongoDB从同一个集合中读取数据时,如何执行写入(更改某个集合)。如果部分读取集合未被写入更改并且部分已更改,会发生什么?

1 个答案:

答案 0 :(得分:1)

  

想象一下,写入操作获取锁定。当MongoDB从同一个集合中读取数据时,如何执行写入(更改某个集合)。

它不能,MongoDB有一个写作者贪心读/写数据库级别锁(http://docs.mongodb.org/manual/faq/concurrency/#what-type-of-locking-does-mongodb-use)。

当发生单个文档写入时,MongoDB被禁止在数据库范围内读取。

  

如果部分读取集合未被写入更改且部分已更改,会发生什么?

MongoDB对单个文档是事务性的,这意味着如果大型多次更新的一部分失败然后失败,则多次更新的生命周期内没有回滚或原子性或事务。