MongoDB文件大小过大

3
我想了解为什么MongoDB使用那么多磁盘空间,或者更好的方法可能是减少它。以下只是一个例子。我有1.35GB的存储大小(包括数据大小+预分配的空间),索引大小约为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
}

注意:"data"是此统计信息中唯一使用的数据库。


http://www.mongodb.org/display/DOCS/Excessive+Disk+Space 的问题和一些解决方案。这可能会有所帮助。 - Sammaye
是的,这篇文章解释了复制操作日志,对于我的macOS X系统来说,需要130MB的空间和最多2GB的预分配空间。但是其他2GB的空间是用来做什么的呢?我的文件大小线性增长,这没问题,但始终比db.stats()中的大小高出约3倍。 - Mario Bertschler
2个回答

4
有没有可能减小文件大小?
部分情况下是可以的。如果你有一个小型/多个小型数据库,你可能想在启动数据库进程时使用 smallfiles 标志。 这样做将把预分配的文件从最大2GB减少到最大512MB,将日志文件从1GB减少到128MB。需要注意的是,如果你在大型数据库上使用此标志,则服务器需要创建许多文件,这可能会影响性能。
如果你从数据库中删除了足够的数据,可以运行 db.repairDatabase() 命令来释放未使用的磁盘空间。请记住,运行此命令会在你的数据库中创建全局块。

0
我不理解的是,在Unix系统中,MongoDB不仅预分配当前文件,还会预分配下一个文件,这可能导致总共预分配2+2=4GB...

1
你是如何解决这个问题的? - niczak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接