Java 列表操作是否在第一次调用时加载整个数据?
假设我有一个非常大的收藏,我会选择它Java 列表操作是否在第一次调用时加载整个数据?,java,mongodb,jongo,Java,Mongodb,Jongo,假设我有一个非常大的收藏,我会选择它 MongoCursor<MyClass> answer = myCollection.find().as(MyClass.class); MongoCursor-answer=myCollection.find().as(MyClass.class); Jongo/Mongo会在第一次调用时加载整个集合,还是在我迭代answer时增量加载数据?Jongo的MongoCursor在引擎盖下使用Mongo的常规DBCursor。DBCurso
MongoCursor<MyClass> answer = myCollection.find().as(MyClass.class);
MongoCursor-answer=myCollection.find().as(MyClass.class);
Jongo/Mongo会在第一次调用时加载整个集合,还是在我迭代
answer
时增量加载数据?Jongo的MongoCursor
在引擎盖下使用Mongo的常规DBCursor
。DBCursor
延迟加载元素(通常所有游标都这样做)。也就是说,您的整个集合不会加载到内存中,而是在您遍历光标时延迟加载
来自Jongo的相关来源,其中cursor
是DBCursor
public E next() {
if (!hasNext())
throw new NoSuchElementException();
DBObject dbObject = cursor.next();
return resultHandler.map(dbObject);
}
您是否关心MongoDB(服务器端)或Jongo(客户端)的内存使用情况?我关心客户端内存使用情况-我不想将整个集合加载到应用程序memoryGetCollection不加载集合,甚至Find()都不会加载。事实上,在从数据库实际加载任何内容之前,您必须开始迭代MongoCursor,即使如此,它也不会加载整个集合,而只加载可配置大小的批