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

为什么MongoDB占用这么多空间?,mongodb,large-data,database,Mongodb,Large Data,Database,我试图在mongoDB中存储一组双精度和整数(大约15-20)的记录。大多数记录(99.99%)具有相同的结构 当我以一种非常结构化的数据存储格式存储数据时,对于2250万条记录,文件大约为2.5GB。但是,对于Mongo,数据库大小(来自命令show dbs)约为21GB,而数据大小(来自db.collection.stats())约为13GB 这是一个巨大的开销(澄清:13GB对2.5GB,我甚至不是说21GB),我想这是因为它同时存储键和值。所以问题是,为什么和如何Mongo在使其更小方面

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

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

这是一个巨大的开销(澄清:13GB对2.5GB,我甚至不是说21GB),我想这是因为它同时存储
键和
值。所以问题是,为什么和如何Mongo在使其更小方面做得更好

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


有人猜测我应该使用SQL还是其他数据库吗?或者,如果有人尝试过根文件,也可以继续使用它们?

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

首先,它创建一个64MB的文件、一个128MB的文件、一个512MB的文件,然后继续创建,直到达到2GB的文件(预定位数据文件的最大大小)

mongo还做了一些可能会占用更多磁盘空间的事情,比如

有关mongoDB如何使用存储空间的更多信息,您可以查看标题为


您可以做一些事情来尽量减少所使用的空间,但是这些技术(例如使用)通常只建议用于开发和测试,而不建议用于生产。

问题:您应该使用SQL还是MongoDB

回答:视情况而定

问问题的更好方法:您应该使用关系数据库还是文档数据库

回答

  • 如果您的数据是高度结构化的(每一行都有相同的字段),或者您严重依赖外键,并且在使用这些相关记录的操作上需要强大的事务完整性。。。使用关系数据库
  • 如果您的记录是异构的(每个文档有不同的字段),或者具有可变长度的字段(数组),或者具有嵌入的文档(分层的)。。。使用文档数据库

我当前的软件项目使用这两种方法。使用正确的工具完成工作

+1因为这是一个值得称赞的透彻解释,@xcorat没有将其标记为已接受的答案。感谢您的回答,但它没有具体回答问题。这种开销不是由于预分配或日志造成的,而是因为数据是如何存储的!我提到数据大小约为13GB,仍然比根文件大6倍!新的mongoDB版本内置了压缩引擎,在压缩类似数据方面做得非常好。因此,考虑这个问题的主要部分只适用于以前的版本。这个问题可以根据你的情况而不同。1.如果您是Mongo的新手,您最需要的答案很可能是lix未接受的答案。2.实际的问题是关于压缩。因此,如果您使用的是旧的mongo,或者某种程度上没有压缩功能,请看一下mongo压缩引擎。