2013-05-26 26 views
1

的JavaDoc DBCursor说,结果是懒惰的,从数据库中获取。但是的Java DBCursor MongoDB的

public class DBApiLayer extends DB { 
    ... 
    private void init(Response res){ 
    ... 
     _cur = res.iterator() 
    ... 
    } 
    Iterator<DBObject> _cur; 
    ... 
} 

包含与查询相匹配的所有项目(并且他们将堆理解为我的理解)。并发的db.collection.update(...)不会更改这些对象。是存储在堆thread safe实施的所有对象?

请给我解释一下什么是“懒惰”和“线程安全”的意思是在这种情况下。

+0

要知道懒惰抓取:您可以访问此网站http://docs.mongodb.org/manual/core/read-operations/#cursor-behaviors。 该文档说:“对于大多数查询,第一批返回101个文档或只是足够的文档超过1兆字节。后续批量大小为4兆字节。要覆盖批处理的默认大小,请参阅batchSize()和limit() “ –

+0

你说得对。我尝试了几千条记录的小集合。我刚刚尝试了十亿条记录,并发操作改变了光标迭代的次数。谢谢 – katoquro

回答

0

“懒惰”是指下一批被请求懒惰地,如在DBCursor客户端迭代。所以如果你提前打破迭代,其余的结果不会被提取。

“线程安全的”在你提到的页面并不意味着在驱动程序的每一个类是安全的,可以同时使用我的多线程。在实践中,MongoClient,DB和DBCollection是线程安全的,而DBCursor和DBOBJECT都没有。