1

我导入了一个 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?这是一个错误吗?还是我错过了什么?

干杯。

4

1 回答 1

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

于 2013-07-23T13:43:42.420 回答