为什么MongoDB集合中的24 MB CSV数据变为230 MB?

时间:2015-12-24 15:42:53

标签: mongodb csv meteor

我的Meteor应用程序采用CSV文件,使用Baby Parse(服务器的Papa Parse)解析它并将数据插入MongoDB集合。

每个CSV行都作为文档插入。 24 MB CSV文件包含~90万行;因此,集合中约有900,000份文件。每个文档有5个字段,包括文档的唯一ID。

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

为什么会发生这种巨大的增长?我该如何解决这个问题?

1 个答案:

答案 0 :(得分:6)

这是因为.dataSize()返回的值包括记录padding。另请注意,如果您的文档没有@echo off SET "strPort=1972" :LOOP cls netStat -n | find ":%strPort%" ping -n 5 127.0.0.1 > nul GOTO LOOP 字段,则会添加该字段,并且每个_id字段为_id。您可能需要阅读Record Allocation Strategies

  

我该如何解决这个问题:

使用带有noPadding标志的collMod命令或带有db.createCollection()选项的noPadding方法。 但是你不应该这样做,因为正如documentation 中提到的那样:

  

仅将工作负载没有导致文档增长的更新操作的集合设置为noPadding,例如对于工作负载仅为插入的集合。

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

MongoDB 3.2使用WiredTiger Storage Engine,您需要更改默认存储引擎才能在configuration file中使用该选项或使用12-byte选项。