将csv导入mongodb时大小增加

时间:2018-12-28 18:53:27

标签: mongodb

我使用Compass将csv导入到MongoDB中。 csv文件的大小为755 MB,但是在Mongo中,集合显示的大小为2.8 GB?为什么是这样? 另外,csv拥有很多散布的字段。在Mongo中,大多数行(文档)的这些字段都设置为空字符串。是否可以选择仅在不丢失值的情况下为特定文档创建字段。

1 个答案:

答案 0 :(得分:2)

加载稀疏文件可能会不必要地占用大量空间。考虑此行的14,493,120行:

foo,bar,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,zip

文件大小为797,229,120字节。因此,让我们继续使用不带--ignoreBlanks的mongoimport加载它。在MacBook上,这需要8分45秒的时间来加载,并产生490字节的平均大小文档,共计7,101,710,784个未压缩字节。 WiredTiger存储引擎将对此实现6.8倍的压缩,以生成仅1,044,369,232字节的磁盘报告和145,854,464字节的_id索引。总计为1200MB。好,比输入的797MB平面文件大一点。

使用--ignoreBlanks加载它,并且格局会发生变化。只需加载5m55即可生成63字节的平均大小文档-大约小7.7倍。未压缩的总大小为72,758,890字节,也缩小了约7.7倍。压缩率降至3.2倍,但这仍然产生286,487,020字节的磁盘代表。毫不奇怪,_id索引的大小相同(145MB),但286MB + 145MB〜= 432MB。与797MB的原始CSV相比,这一点应该很清楚:使用--ignoreBlanks将稀疏文件加载到MongoDB中会大大减少占用空间;在这种情况下,包含索引的磁盘上的磁盘空间比原始CSV文件小2倍