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