MongoDB小經驗

openkk 12年前發布 | 25K 次閱讀 MongoDB NoSQL數據庫

第一條:劃分 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

 本文由用戶 openkk 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!