2014-01-30 50 views
3

首先请原谅我问一个愚蠢的问题,但我是mongodb和学习游标的新手。我有一个问题,为什么我们需要光标隔离?手册说:“对文档进行间插写操作可能会导致游标在文档发生更改时多次返回文档。”我无法理解这一点。如果有人能够提供更多的信息或举一些例子,我会很高兴。mongoDB光标隔离

回答

3

好的,基本上MongoDB直接从100个批次中读取数据文件(可以用batch_size更改为最大16MB,基本上返回的是单个BSON文件)。

这与写出静态结果集的SQL相反。所以,你马上明白,游标,如果他们有业务交错,如果他们中的排序,即改变他们可以返回文档,如果你有这个疑问:

db.c.find().sort({s:1}); 

s是一个整数,因此你修改的头文件发现具有最高的s,以便它出现在后面,实际上(按最后一批)再次获取该文档。

这当然是一个巨大的问题。在某些情况下,您可能最终会绕圈转圈,从未完成查询。

通常情况下,这是不可能用在酸中I但你必须明白,MongoDB的不喜欢酸和不遵守它(http://docs.mongodb.org/manual/faq/concurrency/),并使用实际上以这种方式打破光标隔离特定的并发规则更新文档的s的写入操作确实发生在耗尽游标之前,即使它发生在另一个线程中。

希望能够为您解决这个问题。