首先请原谅我提出了一个愚蠢的问题,但我是 mongodb 的新手并且正在学习游标。我有一个问题,为什么我们需要游标隔离?手册上说“如果文档已更改,对文档的干预写操作可能会导致游标多次返回文档。”。我无法理解这一点。如果有人可以对此进行更多说明或举一些例子,我会很高兴。
最佳答案
好的,基本上 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
的写操作确实发生在你耗尽游标之前,即使它发生在另一个线程中也是如此。
希望这已经为您解决了问题。
关于mongodb - mongoDB 中的游标隔离,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21449882/