MongoDB学习笔记4 - MongoDB数据导入实验(mongoimport)

昨天 比较了一下在某个特定应用中MongoDB和MySQL导入数据的性能,但是MongoDB的测试结果并不能令人满意,今天继续尝试了几种导入数据的方法,希望提升数据导入性能。

 

在昨天的实验中,是以id随机的顺序插入数据的,由于我们在id这个属性上面建立了递增索引,因此首先怀疑的是由于id无序造成后面插入的数据有可能导致前面已经插入的数据移动位置,所以第一个实验把插入顺序改成按id赠序。但结果没有什么变化,插入一百万条数据用了1422秒(比昨天按id随机顺序插入还慢了点,晕死...)。

 

进一步怀疑由于昨天的实验中建立的是unique index,导致每次调用update的时候都需要检查是否有重复索引重复。因此在第二个实验中去掉了索引unique的限制,改为inventory.create_index([('date',ASCENDING), ('id',ASCENDING)], unique=False, dropDups=False)。但仍然不起作用,插入一百万条数据还是用了1412秒。

 

索性把索引全部去掉,插入一百万条数据仍然用了1419秒。看来不是索引的问题,那么问题可能来自于一条一条插入数据,改成批量插入是否会好些呢?在后面的实验中,索引用非unique的形式inventory.create_index([('date',ASCENDING), ('id',ASCENDING)], unique=False, dropDups=False),而数据插入则从昨天调用update改为调用insert,下面是不同batch size下的测试结果

 

Batch sizeTime to insert 1mm records (sec)
1K1353
4K1334
16K1329

 

结果还是不能令人满意。结合使用MySQL的经验,MongoDB是否有一种类似于LOAD DATA INFILE的方法呢?搜了一下发现MongoDB提供了一个数据导入工具mongoimport ,实验了一下,先把需要导入的数据写入csv,然后用mongoimport导入,导入命令如下

mongoimport -d"mydb" -c"inventory" -f"date,id,views" --type=csv --file=data.csv

 

结果出奇的好,无论csv里面的id是否有序,导入一百万行数据竟然只需要不到40秒!到此导入实验可以告一段落了,性能已经完全满足我们应用的需要了,改天要好好研究一下mongoimport的实现:)

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值