2013-05-26 25 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都沒有。