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())));
}

跑下来的时间更久。。因为中间还有数据转换的时间, 实在是不知道怎么解决,
各位有经验的朋友还希望帮帮忙。
...全文
4174 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 >
适用人群IT从业相关人群,0~10年工作经验者课程概述【技术选型】  SpringBoot2.x+MongoDB4.x+Vue均选用能进行生产环境部署的稳定版本【开发模式】前后端分离开发,即当前端又当后端,分角色开发【课程受益】一次上手,即学即会,提供全套源代码,直接可以运行【技术介绍】MongoDB目前NoSql最流行的数据库,互联网的必备神器,目前最新的版本4.x;本课程针对4.x进行搭建和讲解;MongoDB 是一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案。 MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当功能最丰富,最像关系数据库的。MongoDB(来自于英文单词“Humongous”,文含义为“庞大”)是可以应用于各种规模的企业、各个行业以及各类应用程序的开源数据库。作为一个适用于敏捷开发的数据库,MongoDB数据模式可以随着应用程序的发展而灵活地更新。MongoDB是专为可扩展性,高性能和高可用性而设计的数据库。它可以从单服务器部署扩展到大型、复杂的多数据心架构。利用内存计算的优势,MongoDB能够提供高性能的数据读写操作。 MongoDB的本地复制和自动故障转移功能使您的应用程序具有企业级的可靠性和操作灵活性

1,798

社区成员

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

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