0

我有一个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 TABLEin类似的命令MySQL

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

日志文件呢?我可以以某种方式减小所有日志文件的磁盘大小吗?

4

1 回答 1

1

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

日志可以提供持久性,MongoDB 总是在需要文件之前预先分配文件。我建议不要在此处更改任何内容 - 即继续使用日志来保护您的文件,以防服务器意外崩溃。

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

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

于 2013-04-23T05:31:31.257 回答