mongodb3.2系统性学习——5、游标 模糊查询 findAndModify函数
1首先介紹查詢結果 返回的過程:
?進行查詢的時候mongodb 并不是一次哪個返回結果集合的所有文檔,而是以多條文檔的形式分批返回查詢的結果,返回文檔到內存中。
?
好處:
- 減少了客戶端與服務器端的查詢負擔。
- 查詢的結果集合很大的時候批量返回數據,提高了效率。
注意事項
- 如果執行查詢的時候不使用 var keyword 則查詢的結果會自動迭代 20次。
- cursor 游標第一次返回101條文檔或者4兆 數據(誰先滿足)。
- 不活躍的游標會在10分鐘內自動關閉,或者客戶端主動關閉游標,如果讓游標一致有效果 可以使用? cursor.noCursorTimeout() 實例? var myCursor = db.inventory.find().noCursorTimeout(); ? 然后必須主動關閉游標 ?cursor.close() 或者迭代完畢,否則一致消耗系統資源。
- 驅動或者命令行調用find操作的時候并不會立即查詢數據,而是等到真正開始獲取數據的時候(hasnext)才發送查詢的請求。
- db.**.find().sort({age:1}).limit(2).skip(10) 執行時候跟順序無關。
- 游標對象每個方法返回都是游標,方便進行鏈式調用。
接下來比較重要的一點:游標快照
mongodb 在整個生命周期中沒有隔離性,當查詢結果集很大且在查詢的結果集上進行更新操作的時候,可能會返回多次同一個文檔。游標可能會返回那些因為體積變大而被移動到集合的末尾的文檔,因為MMAPv1 存儲引擎(3.2版本的存儲引擎已經變為:WiredTiger), 解決方法是對查詢進行快照,db.**.find().snapshot(); 使用快照之后查詢會在_id索引上執行遍歷的操作,保證每一個文檔只被返回一次,保證結果的一致性。但是會使查詢變慢。
下面介紹一下 mongodb 的存儲引擎:
?mmapv1存儲引擎的分配策略:如果一個文檔更新操作查過了文檔在磁盤的預先分配的空間,mongodb 會在磁盤上分配一塊更大的空間,缺點是:如果集合中有很多索引的話 會花費較多的時間,3.0版本修改了默認的分配策略改為:2的N次方分配策略。有利于減少系統的碎片數量
減少移動的頻次,提高了寫效率。
?
轉載于:https://www.cnblogs.com/timelesszhuang/p/5205447.html
總結
以上是生活随笔為你收集整理的mongodb3.2系统性学习——5、游标 模糊查询 findAndModify函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PHP——分页显示数据库内容
- 下一篇: OC第二节 继承、初始化⽅法、便利构造器