MongoDB 使用經驗小結

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

1. Database數量多了之后,mongod的啟動會需要很長的時間,期間進程絕大多數時間處于R(Running or runnable)和D(Uninterruptible sleep) 狀態。這段時間mongod是在做init,會讀取所有Database的namespace文件的header,檢查pdfile version。

2. listDatabases指令(show dbs;)會首先取得所有Database名稱,然后依次打開所有Database的namespace,檢查Database是否為空。是一個非常消耗IO的操作,Database數量多了之后,也會非常慢,應該盡量避免執行listDatabases指令。注:mongodump導出全部Databases和Replica Set(或者Master/Slave)中從庫初始同步時會發送listDatabases指令,這兩個操作應該盡量避免。

3. dbStats 也是一個非常耗資源的操作,要盡量少做。具體它是怎么實現的,為何如此耗資源,由于本人C++水平有限暫時沒有研究出來。

4. 上面說過了,在Replica Set中直接添加一個新的空節點,新節點的initialSync會使它的source產生非常大的IO消耗,嚴重影響性能。因此,添加新節點時要使用 initialSync指定一個不提供線上服務的節點為source。如果沒有提前配置一個hidden的節點,可以直接停掉某個secondary(當然,前提是剩下的節點能夠撐得住線上服務的壓力),然后將此secondary的文件直接復制一份來創建一個新的節點。這個方法也適用于做冷備。具體步驟我會另寫一篇BLOG來介紹。

5. 前幾天和同事交流時得知他們仍然在用Master/Slave方式來做主從,其實現在MongoDB的Replica Set已經非常穩定了,它完全自動的failover是非常爽的,大家可以直接使用Replica Set,拋棄M/S了,正在使用M/S方式的也建議升級到Replica Set.

轉自:http://www.elmerzhang.com/2011/05/mongodb-experience/

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