MongoDB预测数据不在内存中时读取锁年数?

MongoDB预测数据不在内存中时读取锁年数?,mongodb,concurrency,locking,Mongodb,Concurrency,Locking,在版本2.2中进行了更改:在MongoDB 2.2中,屈服的使用大大扩展。包括“页面错误的收益率”。MongoDB跟踪内存内容,并在执行读取之前预测数据是否可用。如果MongoDB预测数据不在内存中,则在MongoDB将数据加载到内存时,读取操作将产生锁。一旦内存中的数据可用,读取将重新获取锁以完成操作 取自 假设写入操作获得锁。MongoDB从同一个集合读取数据时,如何执行写入(更改某个集合)。如果读集合的一部分没有被写更改,而另一部分被更改,会发生什么情况? 假设写操作获得锁。MongoDB

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

取自

假设写入操作获得锁。MongoDB从同一个集合读取数据时,如何执行写入(更改某个集合)。如果读集合的一部分没有被写更改,而另一部分被更改,会发生什么情况?

假设写操作获得锁。MongoDB从同一个集合读取数据时,如何执行写入(更改某个集合)

不能,MongoDB有一个写入程序贪婪的读/写数据库级锁()

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

如果读集合的一部分没有被写更改,而部分被更改,会发生什么情况


MongoDB对单个文档是事务性的,这意味着如果大型多更新的一部分失败,那么它就失败了,在多更新的生命周期内没有回滚、原子性或事务。

我知道写入是独占的,并且我知道操作仅对单个文档是原子的。但在文档中指出,为了提高性能,当MongoDB发现数据还没有在内存中(仅在磁盘上)时,他们使读锁产生。想想写操作获取锁时会发生什么。它是否直接在磁盘上更新数据?还是等待数据进入内存并在内存中更新(那么为什么首先要产生锁)?这是令人困惑的部分“在MongoDB将数据加载到内存时产生锁”。@despot MongoDB将文档加载到内存中,然后将其推回到磁盘,也就是说,它必须先读取,然后才能写入符合逻辑的OK。集合进入内存,writer picksup写入锁,在内存中更新它们,在磁盘上更新它们,writer放弃锁,而reader可以读取更新的集合。这样做似乎是为了优先考虑写操作。是吗?@despot确实每件事都是写优先权,尽管写有一些规则要说,“看,有很多读在等待着”: