我导入的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?这是一个错误吗?或者我错过了什么?
干杯。
答案 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
来关闭此行为。