国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

MongoCursor簡單總結(jié)

fjcgreat / 1881人閱讀

摘要:要不要顯式關(guān)閉查詢數(shù)據(jù)實現(xiàn)一實現(xiàn)二實現(xiàn)二更方便簡潔但是沒有顯式關(guān)閉有沒問題呢一些結(jié)論如果已被遍歷完會自動關(guān)閉無需顯式關(guān)閉所以實現(xiàn)二沒有問題如果只是遍歷了部分?jǐn)?shù)據(jù)需要顯式關(guān)閉在遍歷過程中同時處理其他業(yè)務(wù)邏輯需要在中關(guān)閉避免中間報了異常沒有迭代

cursor要不要顯式關(guān)閉

Mongo查詢數(shù)據(jù)實現(xiàn)一

MongoCursor cursor = collection.find().limit(limit).iterator();
List documentList = new ArrayList<>();
try {
    while (cursor.hasNext()) {
        T document = cursor.next();
        documentList.add(document);
    }
} finally {
    cursor.close();
}
return documentList;

實現(xiàn)二

return newArrayList(collection.find().limit(limit));

實現(xiàn)二更方便簡潔 但是沒有顯式關(guān)閉cursor有沒問題呢?

一些結(jié)論

如果cursor已被遍歷完(exhausted) 會自動關(guān)閉 無需顯式關(guān)閉 所以實現(xiàn)二 沒有問題

By default, the server will automatically close the cursor after 10
minutes of inactivity, or if client has exhausted the cursor.

https://docs.mongodb.com/manu...

如果只是遍歷了部分?jǐn)?shù)據(jù) 需要顯式關(guān)閉

MongoCursor mongoCursor = coll.find().sort(ascending("_id")).iterator();
Document doc1 = mongoCursor.next();
// ...
mongoCursor.close();

在遍歷過程中 同時處理其他業(yè)務(wù)邏輯 需要try catch在finally中關(guān)閉 避免中間報了異常 沒有迭代完 導(dǎo)致cursor泄露

cursor泄露的危害

Leaving a "cursor" open is like leaving an open connection that never gets re-used. These things are not free. In fact the standard connection cost is 1MB (approx). So if you are leaving a lot of "partially iterated" cursors hanging around there is a general overhead in terms of an active connection and it"s memory usage.
https://stackoverflow.com/que...
一次性查詢出來 VS 逐個迭代

一次性查詢出來放到list中

return newArrayList(collection.find().limit(500))

直接將500個對象放到內(nèi)存中了

逐個迭代

MongoCursor cursor = collection.find().limit(500).iterator();
try {
    while (cursor.hasNext()) {
        T document = cursor.next();
        // business logic here ...
        documentList.add(document);
    }
} finally {
    cursor.close();
}

Mongo底層是分批查詢的 先是查出101個對象 再接著查出剩下的399個對象 相比一次性查出內(nèi)存中最多有399個對象

find() and aggregate() operations have an initial batch size of 101
documents by default. Subsequent getMore operations issued against the
resulting cursor have no default batch size, so they are limited only
by the 16 megabyte message size.

如果覺得399個對象還是大了 可以顯式指定每批查詢多少 如可以指定每批查100個 如下所示

MongoCursor mongoCursor = coll.find().limit(500).batchSize(100).iterator();

但是這會增加網(wǎng)絡(luò)交互次數(shù) 本來默認(rèn)查兩次 現(xiàn)在變成了查5次了

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/19248.html

相關(guān)文章

  • MongoCursor簡單總結(jié)

    摘要:要不要顯式關(guān)閉查詢數(shù)據(jù)實現(xiàn)一實現(xiàn)二實現(xiàn)二更方便簡潔但是沒有顯式關(guān)閉有沒問題呢一些結(jié)論如果已被遍歷完會自動關(guān)閉無需顯式關(guān)閉所以實現(xiàn)二沒有問題如果只是遍歷了部分?jǐn)?shù)據(jù)需要顯式關(guān)閉在遍歷過程中同時處理其他業(yè)務(wù)邏輯需要在中關(guān)閉避免中間報了異常沒有迭代 cursor要不要顯式關(guān)閉 Mongo查詢數(shù)據(jù)實現(xiàn)一 MongoCursor cursor = collection.find().limit(l...

    Sourcelink 評論0 收藏0
  • MongoDB最簡單的入門教程之三 使用Java代碼往MongoDB里插入數(shù)據(jù)

    摘要:前兩篇教程我們介紹了如何搭建的本地環(huán)境最簡單的入門教程之一環(huán)境搭建以及如何用讀取里的記錄最簡單的入門教程之二使用訪問這篇教程我們會介紹如何使用代碼來連接。代碼如下和教程二相比,上述代碼的方法里還展示了如何用代碼給數(shù)據(jù)庫里增加記錄。 前兩篇教程我們介紹了如何搭建MongoDB的本地環(huán)境: MongoDB最簡單的入門教程之一 環(huán)境搭建 以及如何用nodejs讀取MongoDB里的記錄: M...

    Kylin_Mountain 評論0 收藏0
  • MongoDB最簡單的入門教程之三 使用Java代碼往MongoDB里插入數(shù)據(jù)

    摘要:前兩篇教程我們介紹了如何搭建的本地環(huán)境最簡單的入門教程之一環(huán)境搭建以及如何用讀取里的記錄最簡單的入門教程之二使用訪問這篇教程我們會介紹如何使用代碼來連接。代碼如下和教程二相比,上述代碼的方法里還展示了如何用代碼給數(shù)據(jù)庫里增加記錄。 前兩篇教程我們介紹了如何搭建MongoDB的本地環(huán)境: MongoDB最簡單的入門教程之一 環(huán)境搭建 以及如何用nodejs讀取MongoDB里的記錄: M...

    Hegel_Gu 評論0 收藏0
  • MongoDB最簡單的入門教程之三 使用Java代碼往MongoDB里插入數(shù)據(jù)

    摘要:前兩篇教程我們介紹了如何搭建的本地環(huán)境最簡單的入門教程之一環(huán)境搭建以及如何用讀取里的記錄最簡單的入門教程之二使用訪問這篇教程我們會介紹如何使用代碼來連接。代碼如下和教程二相比,上述代碼的方法里還展示了如何用代碼給數(shù)據(jù)庫里增加記錄。 前兩篇教程我們介紹了如何搭建MongoDB的本地環(huán)境: MongoDB最簡單的入門教程之一 環(huán)境搭建 以及如何用nodejs讀取MongoDB里的記錄: M...

    whatsns 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<