首先请原谅我问了一个愚蠢的问题,但我是 mongodb 和学习游标的新手。我有一个问题,为什么我们需要游标隔离?手册说“如果文档发生更改,对文档的干预写入操作可能会导致游标多次返回该文档。”。我无法理解这一点。如果有人可以提供更多说明或举一些例子,我会很高兴。
好的,基本上 MongoDB 直接从数据文件中批量读取 100 个(可以更改为batch_size
最大为 16MB,基本上返回的是单个 BSON 文档)。
这与写出静态结果集的 SQL 形成对比。因此,您立即就会明白,如果游标具有与其交错的操作,则如果它们在排序中发生变化,即如果您有以下查询,则它们可以返回文档:
db.c.find().sort({s:1});
Where s
是一个整数,您可以借此修改找到的具有最高值的第一个文档s
这样它就会出现在后面,您实际上可以(通过最后一批)再次获取该文档。
这当然是一个大问题。在某些情况下,您最终可能会原地踏步,永远无法完成查询。
通常这是不可能的,使用I
在 ACID 中,但是你必须明白 MongoDB 不喜欢 ACID 并且不遵循它(http://docs.mongodb.org/manual/faq/concurrency/ http://docs.mongodb.org/manual/faq/concurrency/)并使用特定的并发规则,这些规则实际上打破了游标隔离,使得写入操作更新游标s
即使它发生在另一个线程中,文档的内容也会在您耗尽光标之前发生。
希望这已经为您解决了问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)