2017-02-16 66 views
0

從可用MongoDB的Java驅動程序文件獲取記錄在MongoDB的Java驅動程序:使用光標

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

它說,大約在Java驅動程序可用的光標以下。

遊標將從數據庫中批量提取結果,因此如果您運行的查詢與大量文檔匹配,則不必擔心每個文檔都會立即加載到內存中。對於大多數查詢,返回的第一批將是101個文檔。但是當您遍歷遊標時,驅動程序會自動從服務器獲取更多批次。因此,您不必擔心在應用程序中管理批處理。但是你需要知道,如果你遍歷整個遊標(例如把它放到一個List中),你最終將獲取所有的結果並把它們放在內存中。

我覺得很混亂。首先它說,「當你迭代光標時,驅動程序會自動從服務器獲取更多批次」,這是有道理的,因爲你不想讓它炸燬你的本地內存。 然而,它後面有一個矛盾的說法,基本上說,如果你遍歷整個遊標,那麼驅動程序會一次性將所有記錄從服務器轉儲到本地內存中。

我無法理解這兩個陳述有多不同。迭代遍歷遊標並迭代整個遊標有什麼區別?

我想知道遊標在這裏工作的方式以及迭代遊標的最有效方法是什麼,以便服務器的所有記錄不會立即轉儲到本地內存中導致內存泄漏。

回答

0

我想是指這樣:

迭代 =取文件,並處理,獲取下一個文件...

迭代整個 =讀取文檔,添加取出文件列出,獲取下一個文件... 當所有文件被提取時處理列表中的所有文件