Mongodb中写作的原子性

时间:2014-07-18 16:11:16

标签: mongodb

Mongo文档说单文档写是原子的,但在另一个地方,它提到交错的事务可能会读取未提交的数据,并且在写入线程返回之前。

据我所知,其他交易可以读取未提交的数据,因为写入可能仍未提交给期刊。

但是如果线程没有返回,线程如何读取数据。是否适用于写入问题不是默认值的情况?

由于 安库尔

1 个答案:

答案 0 :(得分:2)

好的参考我现在可以得到一个上下文并告诉你这是什么。

  

Mongo文档说单文档写是原子的

是的

  

它提到交错的交易可能会读取未提交的

事实上,任何读取都可能获得未提交的数据。这是因为MongoDB在写入磁盘之前将写入fsync队列。

MongoDB可以在它进入磁盘之前从这个fsync队列中读取并引用该页面:

  

其他数据库系统将这些隔离语义称为未提交读取。

主要是ACID数据库。

  

但是如果线程没有返回,线程如何读取数据。

感谢MongoDBs的同步货币规则:http://docs.mongodb.org/manual/faq/concurrency/#does-a-read-or-write-operation-ever-yield-the-lock

简而言之,总结一下:写入不会在其运行期间采用独占锁定,而是可以平息(由于各种规则)读取,允许您在写入中途返回数据。

这也是为什么你有时必须小心多文档更新和应用程序读取数据的其他线程,它实际上可能得​​到一半的数据是最新的,而另一半则不是。