2013-04-15 78 views
0

我有一個GridFS MongoDB數據庫,我需要管理的大小。它自創建以來一直運行良好,但直到現在我才真正看到它的磁盤大小。如何管理GridFS MongoDB數據庫的磁盤大小?

db.stats()命令

> db.stats() 
{ 
    "db" : "documents", 
    "collections" : 4, 
    "objects" : 10967, 
    "avgObjSize" : 52491.573994711405, 
    "dataSize" : 575675092, 
    "storageSize" : 595255296, 
    "numExtents" : 24, 
    "indexes" : 4, 
    "indexSize" : 686784, 
    "fileSize" : 2080374784, 
    "nsSizeMB" : 16, 
    "ok" : 1 
} 

本outout來看,似乎數據庫本身大約是600MB。這個大小對我來說是有意義的,因爲它與我從mongodump得到的數據庫備份大小相同。文件大小要大得多,雖然,當我看到在數據目錄本身/var/lib/mongodb事情變得更糟糕:

[email protected]:/var/lib/mongodb# ls -la 
total 2474036 
drwxr-xr-x 5 mongodb mongodb  4096 Apr 15 09:28 . 
drwxr-xr-x 62 root root   4096 Mar 4 07:48 .. 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 13 11:48 documents 
-rw------- 1 mongodb mongodb 67108864 Apr 15 09:16 documents.0 
-rw------- 1 mongodb mongodb 134217728 Apr 13 11:48 documents.1 
-rw------- 1 mongodb mongodb 268435456 Apr 13 11:48 documents.2 
-rw------- 1 mongodb mongodb 536870912 Apr 15 09:16 documents.3 
-rw------- 1 mongodb mongodb 1073741824 Apr 13 11:50 documents.4 
-rw------- 1 mongodb mongodb 16777216 Apr 15 09:16 documents.ns 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 13 11:50 journal 
-rwxr-xr-x 1 mongodb mongodb   5 Apr 13 11:46 mongod.lock 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 15 09:28 _tmp 
-rw------- 1 mongodb mongodb 67108864 Apr 15 09:28 -v.0 
-rw------- 1 mongodb mongodb 67108864 Apr 15 09:28 v.0 
-rw------- 1 mongodb mongodb 134217728 Apr 15 09:28 -v.1 
-rw------- 1 mongodb mongodb 134217728 Apr 15 09:28 v.1 
-rw------- 1 mongodb mongodb 16777216 Apr 15 09:28 -v.ns 
-rw------- 1 mongodb mongodb 16777216 Apr 15 09:28 v.ns 

而這/var/lib/mongodb/journal

[email protected]:/var/lib/mongodb/journal# ls -la 
total 3145752 
drwxr-xr-x 2 mongodb mongodb  4096 Apr 13 11:50 . 
drwxr-xr-x 5 mongodb mongodb  4096 Apr 15 09:28 .. 
-rw------- 1 mongodb mongodb 1073741824 Apr 15 09:28 j._2 
-rw------- 1 mongodb mongodb   88 Apr 15 09:28 lsn 
-rw------- 1 mongodb mongodb 1073741824 May 5 2012 prealloc.1 
-rw------- 1 mongodb mongodb 1073741824 May 5 2012 prealloc.2 

現在,糾正我,如果我錯了,但我基本上是在600MB的數據庫上看到5.5GB的磁盤大小。這相當低效。

如何減小磁盤大小? MySQL中是否有類似的命令OPTIMIZE TABLE

我不知道GridFS是否與普通數據庫不同,但我嘗試運行compact,但它對磁盤大小沒有任何作用。

日誌文件怎麼樣?我能以某種方式減少所有日誌文件的磁盤大小嗎?

+1

這與GridFS無關。 Journal是提供持久性的,MongoDB總是在需要它們之前預先分配文件。當你mongodump時,你不會得到預分配的文件和日誌。如果你想讓小數據庫查看mongod的--smallfiles和--noprealloc選項。我不建議長期運行日記。 –

+0

Asya:'--smallfiles'和'--noprealloc'都是爲了紀念日嗎?我會嘗試前者而不是後者,因爲我仍然想要記憶。數據庫文件本身如何?如果我的日記數量減少了,我仍然在爲600MB數據庫尋找> 2GB的數據庫...... – c00kiemonster

+2

既不是 - 它們是用於數據文件的。只是在需要或提前分配文件時,以及文件是否不斷增大。沒有關閉日記只有這樣做的方式是--nojournal。 –

回答

1

大文件的問題不是特定於GridFS的。

日記是提供持久性的,MongoDB總是在需要它們之前預先分配文件。我建議不要在這裏改變任何東西 - 即繼續使用日誌來保護您的文件,以防服務器意外崩潰。

由於沒有獲得預分配的數據文件和日誌文件,因此可以看到mongodump的文件比較小。

如果你想擁有更小的數據庫目錄,我建議你查看--smallfiles--noprealloc選項來mongod。當分配空間和一次分配多少時,兩者都會影響一個。

+0

我發現不少人在使用'--smallfiles'來詢問穩定性等。在我這個相對較小的例子中,所有的工作都完全正常,磁盤使用量與廣告一樣。我根本無法注意到任何差異。 – c00kiemonster

+0

它與穩定性沒有任何關係 - 唯一的區別是性能,因爲一旦你填充了一個文件,你將需要等待下一個文件被分配(使用--noprealloc)和--smallfiles你將等待文件更頻繁。 –