2012-12-12 79 views
3

我只是想了解爲什麼MongoDB使用那麼多的磁盤空間,或者甚至更好的是可能會減少它。MongoDB文件大小太大

以下只是一個例子。我有一個storageSize爲1,35GB(包括dataSize +預分配空間),索引大小約爲0.5GB,總計大約2GB。我知道mongodb分配2GB的文件,所以你可以放鬆一些空間,但怎麼可能使用6GB的文件大小?填充設置爲1,實際上它只是一次寫入數據,從不刪除或更新。有沒有可能減小文件大小?

就我而言,MongoDB使用的空間比我的傳統SQL解決方案多6倍。我真的想使用MongoDB,但我需要找到一種減少磁盤空間的方法。謝謝!

> db.stats(1024*1024) 
{ 
    "db" : "data", 
    "collections" : 4345, 
    "objects" : 9328910, 
    "avgObjSize" : 67.95158105287756, 
    "dataSize" : 604, 
    "storageSize" : 1350, 
    "numExtents" : 6480, 
    "indexes" : 8686, 
    "indexSize" : 511, 
    "fileSize" : 6078, 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 

注:「數據」是在此使用的唯一數據庫統計

+0

http://www.mongodb.org/display/DOCS/Excessive+Disk+Space問題和一些解決方案。這可能有幫助 – Sammaye

+0

是的,這篇文章解釋了複製oplog,在我的情況下,macos x需要130MB的空間和預分配,這在最大的情況下會導致2GB的空間。但是消費其他2GB的是什麼?我的文件大小是線性增長的,沒關係,但總是比db.stats()高3倍。 –

回答

0

什麼,我不明白的是,它在UNIX系統上,MongoDB的不只是預分配當前文件,而且還可導致2 + 2 = 4GB總預分配的NEXT文件...

+0

你是如何解決這個問題的? –

4

有沒有可能減小文件大小?

好吧,部分是。如果你有一個小的/ [很小的]數據庫/ s,你可能想在啓動數據庫進程時使用smallfiles標誌。
通過這樣做,您可以將預分配的文件從最大2千兆字節減少到最大512兆字節,日誌文件從1千兆字節減少到128兆字節。需要注意的是,如果您將此標誌與大型數據庫一起使用,則服務器需要創建許多文件,這可能會影響性能。

如果您從數據庫中刪除了足夠的數據,則可以運行db.repairDatabase()命令來釋放未使用的磁盤空間。請記住,運行此命令將在您的數據庫中創建一個全局塊。