2015-12-24 25 views
6

我的Meteor应用程序需要一个CSV文件,使用Baby Parse(Papa Parse for server)解析它,并将数据插入到MongoDB集合中。为什么在MongoDB集合中24 MB的CSV数据变为230 MB?

每个CSV行都作为文档插入。 24 MB CSV文件包含〜900,000行;因此,收藏中约有900,000份文件。每个文档有5个字段,包括文档的唯一标识。

当我使用dataSize()获取收藏大小时,我收到号码230172976;如果我没有弄错,这个数字是以字节为单位的;因此它是230 MB。

为什么会出现这种巨大的增长?我怎样才能解决这个问题?

+3

请提供样本行以获得透明的解释。 –

回答

6

这是因为.dataSize()的返回值包含记录padding。还请注意,如果您的文档没有_id字段,它将被添加并且每个_id字段是12-byte。您可能需要阅读Record Allocation Strategies

我怎样才能解决这个问题:

使用collMod命令与noPadding标志或db.createCollection()方法与noPadding选项。 但你不应该这样做,因为在documentation提到:

只设置noPadding为true的集合,其工作量有没有更新操作是造成文件增长,如用于收藏与工作负载的刀片-只要。

如皮特Garafano在下面的comment提到的,这是适用于仅MMAPv1 Storage Engine;这是MongoDB 3.0和所有以前版本中的默认存储引擎。

MongoDB 3.2使用WiredTiger Storage Engine,您将需要更改默认存储引擎,以便在configuration file中使用该选项或使用--storageEngine选项。

+0

请务必注意,此选项仅适用于MMAPv1。在MongoDB 3.2中,WiredTiger是默认的storageEngine。 –

相关问题