MongoDB小經驗
第一條:劃分 shard ,使用 replSet, 保證服務不會全部失效 , 存儲容災很關鍵。
第二條:大表要分表,劃分ReplSet之后,表還是只存在于一個shard中。小表看需要。
第三條:良好的鍵值設計,字段名稱要短,不要用傳統的數據庫方式思考。一切能key-value的就不要考慮條件查詢神馬。索引再好也是比較,能定位到就不要比較,可以通過限制一些功能的方式來滿足。
第三條:關于寫可靠性問題。盡量不要開啟獲取寫結果,MongoDB是鎖庫寫,同步獲取結果會對全庫的其他操作有影響。
第四條:索引很好,但還是要減少它的使用,不要為了一些低頻度非關鍵功能設計額外索引。海量數據下,索引占用空間也是非常可觀的,更主要的是它占的是內存空間。這本身會造成熱點數據的減少。
第五條:MongoDB總連接數的控制,Linux下一個連接大約堆棧開10M空間,這里如果連接數很多的話,建議把堆棧大小設小。
第六條:MongoDB能嵌套的地方盡量不要整引用,完全杜絕跨庫引用。簡單是數據可靠高效的前提。海量背景下,簡單就會意味著高效、可靠。
第七條:MongoDB java client端每個應用服務器一個Mongo實例就足夠,其內置了連接池,只需要對其進行配置即可滿足并發場景支持,單機一般不超過100,其實多實例場景50-70綽綽有余。池化的思想到哪都不會錯,只要不用錯。
第八條:讀寫配置可分開,老版本slaveOk就可以,新版本的話有個ReadPreference.SECONDARY,配置后即可簡單的讀寫分流了。
第九條:數據庫統計數據很重要,MongoDB支持的非常好,java client端通過mongo實例獲得全庫的數據描述,也可以獲得某個collection的數據描述,時時關注比le it alone要好很多。
第十條: 不要怕手工方案麻煩,演練好預案,任何未經嚴格驗證+線上復雜場景的自動化方案都是不靠譜的,多做容災,異常備案比神馬都好。
轉載請著名作者與出處。franciscolv http://shuofenglxy.iteye.com/admin/blogs/1330539