来自
的mongodb java驱动程序文档https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-ii
它说明了以下关于java驱动程序中可用的游标。
游标将从数据库中批量获取结果,因此如果运行与大量文档匹配的查询,则不必担心每个文档都会立即加载到内存中。对于大多数查询,返回的第一批将是101个文档。但是当您遍历游标时,驱动程序将自动从服务器获取更多批次。因此,您不必担心在应用程序中管理批处理。但是你需要注意,如果你遍历整个游标(例如将它放入List中),你将最终获取所有结果并将它们放入内存中。
我觉得很困惑。首先它说,"当您迭代光标时,驱动程序将自动从服务器获取更多批次",这是有道理的,因为您不希望它炸毁您的本地内存。 然而,它遵循一个矛盾的陈述,基本上说如果你遍历整个游标,那么驱动程序会将所有记录从服务器一次性转储到本地内存中。
我无法理解这两个陈述有多么不同。迭代游标和迭代整个游标有什么区别?
我想知道游标究竟是如何工作的,以及迭代游标的最有效方法是什么,以便来自服务器的所有记录不会立即转储到本地内存中导致内存泄漏
答案 0 :(得分:0)
我认为这意味着这样:
迭代 =获取文档,处理它,获取下一个文档...
迭代整个 =获取文档,将获取的文档添加到列表中,获取下一个文档... 当所有文件都被提取时,处理列表中的所有文件