MongoDB 在 Java 中 如何插入大量的数据

向上的芽儿 2017-04-13 08:44:00
我这里用的是最新的mongodb,version:3.4 Java 驱动版本:3.4.
现在有需求要做大量数据的插入操作,通过Java 驱动完成插入操作。
mongo db 所在的服务器是win server 2008 的,服务器性能有限;
我这里插入了100000 条数据,每条数据是50个字段,然后通过java
驱动调用insertMany 的写法:

for(int i=0;i<documents.size();i++){
if(i > 0 && (i+1) % 10000==0){
collection.insertMany(documents.subList(i-9999, i+1));
}
}

10000 条插入一次;结果测试下来的时间是55073 毫秒。。简直慢的可以。
另外通过bulkWrite的写法也试过了;

JsonArray jsonArr = new JsonParser().parse(jsonData).getAsJsonArray();
int insert_size = jsonArr.size();
for(int i=0;i<insert_size;i++){
if(i >0 && i % 10000==0){
collection.bulkWrite(bulkInsert);
bulkInsert.clear();
}

bulkInsert.add(new InsertOneModel<Document>(
Document.parse(jsonArr.get(i).toString())));
}

跑下来的时间更久。。因为中间还有数据转换的时间, 实在是不知道怎么解决,
各位有经验的朋友还希望帮帮忙。
...全文
4171 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2017-08-22
  • 打赏
  • 举报
回复
并且就算是有了连接池也不要一条一条存,放在集合中,规定每一千条或者一万条存一次
「已注销」 2017-08-22
  • 打赏
  • 举报
回复
第一,建立数据库连接池,每次存储数据其实大多数时间都在做数据库连接, 第二,做事物的优化,你可以用HIbernate框架去配置,楼主肯定刚学Java不久,以后会学习的,java驱动是入门时学习的 @Transactional
神奇五花肉 2017-08-21
  • 打赏
  • 举报
回复
楼主解决了吗?我也遇到了同样的问题....
rucypli 2017-04-17
  • 打赏
  • 举报
回复
手动写个js试试 如果快的话 只能说不是mongodb的问题了 Uptime:1499090 Documents:10100011 > for(var i=0;i<10000;i++)db.a.insert({id:"aaaa"}); WriteResult({ "nInserted" : 1 }) Uptime:1499126 Documents:10110011 >

1,747

社区成员

发帖
与我相关
我的任务
社区描述
MongoDB相关内容讨论区
社区管理员
  • MongoDB社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧