为什么MongoDB会占用这么多空间?

xco*_*rat 12 database large-data mongodb

我试图在mongoDB中存储一组双打和整数(大约15-20)的记录.大多数记录(99.99%)具有相同的结构.

当我将数据存储在一个非常结构化的数据存储格式的根目录中时,该文件大约为2.5GB,用于2250万条记录.但是,对于Mongo,数据库大小(来自命令show dbs)大约为21GB,而数据大小(来自db.collection.stats())大约为13GB.

这是一个巨大的开销(澄清:13GB对2.5GB,我甚至没有谈论21GB),我想这是因为它存储了两个keysvalues.所以问题是,Mongo为什么以及如何在缩小它时做得更好?

但主要问题是,这对性能有何影响?我有4个索引,它们的价格是3GB,因此如果我将数据量增加一倍并尝试在内存中保留大量工作集,那么在单个8GB机器上运行服务器会成为一个问题.

如果我应该使用SQL或其他数据库,任何猜测?或者如果有人尝试过,可能只是继续使用ROOT文件?

Lix*_*Lix 27

基本上,这是mongo准备插入数据.Mongo为数据执行存储的预定位,以防止(或最小化)磁盘上的碎片.此预先定位以mongod实例创建的文件的形式进行观察.

首先,它创建一个64MB的文件,接下来的128MB,接下来的512MB,然后一直打开,直到达到2GB的文件(预定位数据文件的最大大小).

mongo还有一些东西可能会怀疑使用更多的磁盘空间,比如日记 ......

关于mongoDB如何使用存储空间的更多信息,你可以看一下这个页面,特别是标题为什么我的数据目录中的文件比数据库中的数据大?

您可以采取一些措施来最小化所使用的空间,但这些技术(例如使用该--smallfiles选项)通常仅建议用于开发和测试用途 - 从不用于生产.

  • +1因为这是一个彻底的解释值得信任,@ xcorat没有将此标记为已接受的答案. (5认同)