mongodb - mongoDB 中的游标隔离

标签 mongodb cursor

首先请原谅我提出了一个愚蠢的问题,但我是 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/

相关文章:

javascript - 蒙戈 : merge subdocuments and reference the parent in a field

mongodb - 使用嵌套结构的逻辑运算符查找查询?

mongodb - Mongo Shell 显示已添加文档,但 Scalatest 中断言失败

mysql - mysql 游标中使用 Group_Concat 返回错误结果

带参数的 PostgreSQL 游标

android - 如何获得计数列

mongodb - 聚合时如何不一一列出项目中的所有字段?

mongodb - 在时间戳上查询mongo

mysql - 登录身份验证的存储过程不工作 MySQL

winapi - 如何在从图标文件生成的 Windows 光标上设置热点坐标?