MONGODB 讀書筆記

wei-xh發表於2014-01-26
1. MONGODB不支援truncate操作,如果想快速刪除一個集合的資料,只能drop後重建集合、索引。
2. 如果想改變oplog的大小現在還比較複雜,官方完全能做一個命令介面,一個操作就可以實現。    
3. MONGODB提供了資料預熱方法,還不錯。搜尋MONGODB TOUCH瞭解這一內容。(db.runCommand({"touch" : "bc", "data" : true, "index" : true}) )
4. 如果RS裡的一個節點啟動的時候發現自身的OPLOG裡沒有任何內容,那麼這個節點會做全量同步,必須保證到OPLOG裡有一個記錄(正常情況下總會有)。
5. MONGODB的初始化同步可能會極大的干擾到同步源上的正常的WORKING SET。可以考慮用備份來恢復。
6. 叢集成員越多,選舉的過程可能會越長。特別是網路擁堵,伺服器LOAD過大的情況下。
7. RS的仲裁者角色相對於正常的備份節點來說並不會加速選舉的過程。他就是一個RS的選舉角色,在伺服器資源不夠的情況下,可以用它來打破平均數的情況,來滿足最大數的原則。
8. MONGODB的預分配資料檔案過程稍顯複雜,MONGODB官方可以考慮做一個簡單的介面,一步實現。
9. MONGODB中的RS回滾機制個人認為還不錯,提供了一個回滾檔案,由使用者決定來下一步操作。
10. MONGODB的選舉過程必須遵循大多數原則。一個備選節點如果遭遇任何一個否決票,選舉都會取消,重新選舉。
11. 主節點DOWN後,如果有一個存活的備份節點優先順序較高,那麼它一定會被選為主節點:如果資料不夠新,會開始從其他節點複製,直到它到最新。
12. 先資料修改,後OPLOG,主備節點都是如此。這意味著延遲備份節點會延遲一段時間的OPLOG。?而不是先接受OPLOG然後等待複製。?
13. 如果想避免丟資料,避免回滾,可以透過RS的大多數方案來解決,透過getlasterror的w的 majority設定來規避。(個人認為不能完全避免,因為大多數操作不是一個原子操作)。
14. MONGO裡有ORACLE裡pctfree的東西,不過是個動態調整的東西,不可控。如果能大概確認一個文件的長度,可以在初始建立時候預分配一個虛擬欄位把位先佔了,後面更新時候移除這個欄位。
15. MONGODB裡對於隨機值插入操作,列上索引分裂方式是5:5方式。有時候會發現隨機插入列上的索引過大。不過ORACLE也是這樣做的。
16. MONGODB執行情況下,echo 3到> /proc/sys/vm/drop_caches不會釋放MONGODB的記憶體,必須關閉MONGO才可以。
17. journal的出現讓mongodb的 repair和mongdb.lock不再有用。
18. mongostat裡的idx miss%代表是索引的entry有多少沒命中,不是代表有多少沒走索引執行計劃。
19.mongodb的複製可以做到併發多執行緒,不過是集合級別的(如果你的DB裡只有一個集合,那麼只能呵呵了,只能還是單執行緒複製,與MYSQL 5.6的多執行緒複製一樣)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22034023/viewspace-1075504/,如需轉載,請註明出處,否則將追究法律責任。