沒想到學習的進程一下中斷了半年時間。最開始是由於項目的緣由、以後是新年、而後是新冠……,固然,最重要的緣由是懶,哈哈。mongodb
今天要學習的是《24 | MongoDB開發最佳實踐》節。這節是第二章的最後一篇文章,課程的連接點這裏,是第二章課程的一個總結。安全
首先強調的一點就是,必定要選擇與你所使用的版本相兼容的驅動程序,特別是使用程序框架的時候,不然會遇到一些沒法解釋的奇葩問題。驅動的兼容列表點這裏。負載均衡
鏈接地址建議使用域名而不是IP,方便物理機出現故障時更換。框架
鏈接到複製集(建議寫上全部的複製節點)運維
mongodb://節點1,節點2,節點3.../database?[options]
鏈接到分片集(寫上mongos地址就好了)post
mongodb://mongos1,mongos2,mongos3.../database?[options]
參數 | 說明 |
---|---|
maxPoolSize | 鏈接池大小不必定非要設置,有默認值的 |
MaxWaitTime | 建議設置,慢查詢超時時,後自動殺掉 |
WriteConcern | 建議設置,用於保證數據的安全性 |
ReadConcern | 不必定非要設置,有默認值,用於保證數據的一致性 |
不用在鏈接串中寫全部節點地址,而是經過虛擬域名來進行解析,3.6版本後支持。性能
鏈接字符串寫全就好了,系統會自動處理鏈接到哪一個mongos學習
通常遊標查詢結束後,會自動關閉。若是查詢太大,沒自動關,能夠調用close()方法手工關了,若是不關,10分鐘後系統自動殺掉。設計
避免使用count,由於使用 count 的時候,有多少條記錄都會逐條遍歷一次。固然也避免使用skip/limit形式的分頁,特別是數據量大的時候;日誌
db.coll.find({x: 100}).limit(50); db.coll.count({x: 100});
那分頁怎麼辦?
沒啥好辦法!
替代方案:使用查詢條件+惟一排序條件; 例如: 第一頁:db.posts.find({}).sort({_id: 1}).limit(20); 第二頁:db.posts.find({_id: {$gt: <第一頁最後一個_id>}}).sort({_id: 1}).limit(20); 第三頁:db.posts.find({_id: {$gt: <第二頁最後一個_id>}}).sort({_id: 1}).limit(20);
好啦,今天的學習到此結束,明天開始學習第三章運維的部分,同時複習一下第二章的內容。