mongoDB中的游标隔离

时间:2014-01-30 07:03:35

标签: mongodb cursor

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

1 个答案:

答案 0 :(得分:4)

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

这与写出静态结果集的SQL形成对比。因此,您立即了解游标,如果游标与它们交错,则可以返回文档,如果它们在排序中发生变化,即如果您有此查询:

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

其中s是一个整数,您可以修改找到最高s的第一个文档,使其显示在后面,您实际上可以(通过最后一批)再次获取该文档。

这当然是个大问题。在某些情况下,您最终可能会绕圈而不是完成查询。

通常情况下,使用ACID中的I是不可能的,但是你必须明白MongoDB不喜欢ACID并且不遵循它(http://docs.mongodb.org/manual/faq/concurrency/)和使用特定的并发规则实际上破坏了游标隔离,使得在耗尽游标之前更新文档的s的写操作确实发生,即使它在另一个线程中发生也是如此。

希望这能为你解决这个问题。