磁盘上的数据库大小增加为CSV文件的倍数我mongoimport?

时间:2013-07-23 13:38:20

标签: mongodb csv import

我导入的CSV文件总大小为230M,文件大小为3069055行和13列。

我用来导入的命令是:

mongoimport -d taq -c mycollection --type csv --file myfile.csv --headerline

在我执行此导入之前,taq数据库为空。导入完成后(耗时4分钟),我检查了mongodb用户目录中数据库文件的大小。这就是我所看到的:

-rw------- 1 mongod mongod  64M Jul 23 14:13 taq.0  
-rw------- 1 mongod mongod 128M Jul 23 14:10 taq.1 
-rw------- 1 mongod mongod 256M Jul 23 14:11 taq.2
-rw------- 1 mongod mongod 512M Jul 23 14:13 taq.3 
-rw------- 1 mongod mongod 1.0G Jul 23 14:13 taq.4 
-rw------- 1 mongod mongod 2.0G Jul 23 14:13 taq.5
-rw------- 1 mongod mongod  16M Jul 23 14:13 taq.ns

已创建六个taq文件,编号从0到5.这些文件的总大小为多GB。为什么这样,我导入的CSV文件只有230M?这是一个错误吗?或者我错过了什么?

干杯。

1 个答案:

答案 0 :(得分:0)

MongoDB以完全不同的格式存储数据,称为BSON,这将占用更多的磁盘空间。不仅需要为每个字段存储值,还必须在每个文档(行)中再次存储列名。如果您有大的列名,这肯定会将MongoDB中的大小增加到CSV文件的8到10倍。如果可能的话,你可以考虑缩短你的字段名称,如果这对你来说太过分了。

MongoDB还为您预分配数据文件。例如,当它开始向taq.2添加数据时,它将创建taq.3,同样当它开始写入taq.4时,它会创建tag.5。因此,在您的情况下,假设您的230MB文件将创建1.9GB的数据,MongoDB已经分配了2.0G大小的taq.5。在启动--noprealloc时,可以通过在命令行上指定mongod来关闭此行为。