本文僅限於mongodb3.0.0(wiredtiger引擎)
一.mongodb內存使用
1.熱數據
這一點是SQL和nosql之間的巨大差距,將熱數據存在內存相當於自帶cache,若wiredtigercache大小控制合理,此處內存性價比相當高。
2.索引
跟熱數據同樣
3.連接所消耗內存
這里算是與SQL基本相同的一部分
二.監控
1.wiredtigercache
2.mongodb所占用內存
3.mongodb讀取數據與IO數據
三.優化
1.熱數據
上面說此處占用內存為cache,可以通過wiredtigercache進行上限的調節,與memcache或redis做緩存時候調節相同,將命中和大小控制在合理范圍
2.索引
mongodb會將全部索引讀入內存中,所以這里優化相當重要,
建議花精力去整理索引,如果可以做到索引恰好覆蓋熱數據為最佳,
四.其他注意事項
1.杜絕依靠重啟來釋放內存,這時釋放掉的是熱數據,得不償失
2.可以禁止swap,
3.不要將mongodb與其他吃內存的服務部署到同一機器上
4.重視對mongodb內存監控,避免oom
5.重視oplog,oplog大小應定期調整,若oplog過小,對熱數據部分將是災難
6.關閉NUMA
7.安裝在x64機器上(貌似是句廢話)
8.根據wiredtigercache,索引,連接,來調整內存
9.有條件最好SSD
10.找一個懂mongodb的人解決具體問題,不要遇到問題就說mongodb不好
最后說一下個人對mongodb的看法,
1.從架構來講,可切片,有副本集,mongos,保證了高可用性和可伸縮性
2.副本集可以做讀寫分離,
3.熱數據和索引在內存,保證了高速
本人覺得mongodb是一個好東西,有不適合場景,也有適合場景,應該根據項目實際情況來使用,不能一味在不了解情況下跟風評價。