如何管理GridFS MongoDB数据库的磁盘大小?

时间:2013-04-15 02:23:16

标签: mongodb gridfs

我有一个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
}
似乎数据库本身大约是600MB。这个大小对我来说很有意义,因为它与我从mongodump获得的数据库备份大小相同。但文件大小要大得多,当我查看/var/lib/mongodb中的数据目录时,它会变得更糟:

root@deathstar:/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

root@deathstar:/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磁盘大小。这是非常低效的。

如何减小磁盘大小? OPTIMIZE TABLE中的MySQL是否有类似的命令?

我不知道GridFS是否是与常规数据库不同的野兽,但我尝试运行compact,但它对磁盘大小没有任何作用。

日记文件怎么样?我可以以某种方式减少所有日志文件的磁盘大小吗?

1 个答案:

答案 0 :(得分:1)

大文件的问题并非特定于GridFS。

Journal提供持久性,MongoDB总是在需要之前预先分配文件。我建议不要在这里更改任何内容 - 即在服务器意外崩溃的情况下继续使用日记功能来保护您的文件。

您会看到使用mongodump的小文件,因为您没有获得预分配的数据文件或日志文件。

如果您想拥有较小的数据库目录,我建议您查看mongod的--smallfiles--noprealloc选项。当分配空间和一次分配多少时,两者都会影响一个。