MongoDB 2.0新功能逐個看之Compact Command
今天到了公司打開郵箱,驚喜地發現有MongoDB的新聞信,打開一看竟然是2.0更新了,哈哈,于是迫不急待地開始嘗試,因為我平時主要只維護數據庫,并不涉及開發部分,所有理解有限,大部分還是以翻譯為主。以下為官方文檔地址:http://www.mongodb.org/display/DOCS/2.0+Release+Notes?mkt_tok=3RkMMJWWfF9wsRonv6TPZKXonjHpfsX%2B6eopWKag38431UFwdcjKPmjr1YICRMt0dvycMRAVFZl5nV0IHeWb#2.0ReleaseNotes-Journalingenhancements
Compact Command整理命令
事實上我也不知道到底應該將這個命令翻譯成什么比較合適,它的作用是整理collection,將其中的內容全部抽出后重新排列整齊,有點類似系統的磁盤整理,所以我就這么叫它了。在2.0版本之前,需要進行類似的操作,要使用整理命令是以collection為單位進行操作的。使用這個命令的方法有兩種:
- db.runCommand({compact:'myCollcetionName'})
- db.mycollction.runCommand("compact")
這個命令要等完成后才會返回狀態,可以通過mongod的log文件來查看過程紀錄,或是在另一個mongo實例中通過命令db.currentOp() 遠程查看正在進行整理的collection的在內存中的狀態。需要特別注意的是,在運行這個命令時是無法進行其它操作的,所以推薦在Replica Sets中使用。同時,在Replica Sets中使用時,也有一些要注意的是:
- 對于Replica Sets中的Primary instance,直接運行這個命令會報錯,需要使用force:true作參數來強制運行,所以并不建議在Primary上運行。
- 對于Replica Sets中的Secondary instance,開始運行這個命令時,該instance會自動降為"recovery"狀態,直到命令完成。
- 在整個Replica Set中,需要在每上instance上分別進行Compact操作,這種整理的行為并不會自動同步。
官方文檔上提供的說明是進行 Compact操作帶來的明顯效果是能去掉了數據庫中所有的Padding Factor,Padding Factor是Mongo為了提高數據操作的效率而預留的一部分磁盤空間,所以說其實Compact功能并不完全適合需要經常進行數據更新的 Collection,但是對于比較穩定不常進行update操作的數據庫來說,還是可以提高查詢速度的。
另外在殺掉Compact進程時要特別注意的,Compact操作是將所有的內容從一個Collection中取出,最后再將它們在collection中重建,所以中斷這個Compact 會帶來數據丟失。此時就需要Journal來減少這種損失了。Journal在1.9+時就作為一個重點的測試功能出現了,因為考慮到它還不穩定,我沒敢在實際項目中試用它,只作了一些小測試,2.0中它已經是正式出道了,我會好好地疼愛它的= v =,以上內容基本上取自官方文檔,我會在隨后附上實際實驗。
原文鏈接:http://www.cnblogs.com/sasafly/archive/2011/09/14/2176209.html
【編輯推薦】