2017-02-16 68 views
0

从可用MongoDB的Java驱动程序文件获取记录在MongoDB的Java驱动程序:使用光标

https://www.mongodb.com/blog/post/getting-started-with-mongodb-and-java-part-ii

它说,大约在Java驱动程序可用的光标以下。

游标将从数据库中批量提取结果,因此如果您运行的查询与大量文档匹配,则不必担心每个文档都会立即加载到内存中。对于大多数查询,返回的第一批将是101个文档。但是当您遍历游标时,驱动程序会自动从服务器获取更多批次。因此,您不必担心在应用程序中管理批处理。但是你需要知道,如果你遍历整个游标(例如把它放到一个List中),你最终将获取所有的结果并把它们放在内存中。

我觉得很混乱。首先它说,“当你迭代光标时,驱动程序会自动从服务器获取更多批次”,这是有道理的,因为你不想让它炸毁你的本地内存。 然而,它后面有一个矛盾的说法,基本上说,如果你遍历整个游标,那么驱动程序会一次性将所有记录从服务器转储到本地内存中。

我无法理解这两个陈述有多不同。迭代遍历游标并迭代整个游标有什么区别?

我想知道游标在这里工作的方式以及迭代游标的最有效方法是什么,以便服务器的所有记录不会立即转储到本地内存中导致内存泄漏。

回答

0

我想是指这样:

迭代 =取文件,并处理,获取下一个文件...

迭代整个 =读取文档,添加取出文件列出,获取下一个文件... 当所有文件被提取时处理列表中的所有文件

相关问题