jdbc批处理+手动事务+多线程实现81秒插入1000万数据(多线程版)
现在来试试多线程能够多少秒钟插入千万数据
/*** @Author: guandezhi* @Date: 2019/4/13 15:35*/
public class JdbcUtils {private static String url = "jdbc:mysql://localhost:3306/user?useSSL=false&rewriteBatchedStatements=true";private static String user = "root";private static String password = "root";private static ExecutorService threadPool = Executors.newFixedThreadPool(50);public static void executeBatch() {Connection conn = null;PreparedStatement ps = null;try {Class.forName("com.mysql.jdbc.Driver");conn = DriverManager.getConnection(url, user, password);String sql = "insert into user(name, mobile) values(?,?)";conn.setAutoCommit(false);ps = conn.prepareStatement(sql);for (int j = 0; j < 100000; j++) {String mobile = "13356544556";Integer randNum = 0;Random random = new Random();for (int i = 0; i < 1000; i++) {randNum = random.nextInt(10);}ps.setString(1, "官德志");ps.setString(2, mobile + String.valueOf(randNum));ps.addBatch();}ps.executeBatch();conn.commit();} catch (Exception e) {e.printStackTrace();} finally {if (conn != null) {try {conn.close();} catch (SQLException e) {e.printStackTrace();}}}}public static void main(String[] args) throws InterruptedException {long beginTime = System.currentTimeMillis();CountDownLatch latch = new CountDownLatch(100);for (int i = 0; i < 100; i++) {threadPool.execute(() -> {try {JdbcUtils.executeBatch();} catch (Exception e) {System.out.println("插入数据异常");} finally {latch.countDown();}});}latch.await();long endTime = System.currentTimeMillis();System.out.println("插入一千万数据用时:" + (endTime - beginTime) / 1000 + " 秒");threadPool.shutdown();}
}
测试一下
总结:
1.多线程确实比单线程快很多
2.此处开启多线程容易造成OOM,需要合理的设置线程大小和JVM参数。
jdbc批处理+手动事务+多线程实现81秒插入1000万数据(多线程版)相关推荐
- java mysql 快速插入1000w条数据_教你88秒插入1000万条数据到mysql数据库表
我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...
- mysql 插入秒_教你88秒插入1000万条数据到mysql数据库表,IG牛逼
我用到的数据库为,mysql数据库5.7版本的首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com ...
- 多线程实现一分钟插入1000万条数据
首先我们需要建立一个线程类,继承Thread类,并实现run方法 1.获取数据库连接 2.编写插入的sql语句 3.关闭自动提交 conn.setAutoCommit(false); 4.编写for ...
- 为何插入10万数据只需2秒
文章目录 一.前言 二.问题 1.url后面useServerPrepStmts是什么? 2.url后面rewriteBatchedStatements是什么? 3.这两个参数对语句执行有什么影响? ...
- 每秒处理1000万用户请求…云上架构如何实现高性能和高可用
关注我们获得更多精彩内容! 内容来源:2017 年 12 月 21 日,驻云科技资深架构师翟永东在"云时代企业架构的搭建"进行<云上架构如何实现高性能和高可用>演讲分享 ...
- MySQL十秒插入百万条数据
mysql数据库准备 private String Driver = "com.mysql.cj.jdbc.Driver";private String url ="jd ...
- 【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念
MySQL 数据库的命令行操作 登陆操作mysql -hlocalhost –uroot –p123456 退出操作exit 数据库操作建库:create database 库名; 卸载库:drop ...
- Spring——DAO层、Spring JDBC、Spring事务控制
目录 一.Spring对持久层技术支持 1.Spring支持的持久层技术 2.Spring JDBC 2.1. JDBCTemplate类 2.2.Spring JDBC CRUD操作 2.3.Spr ...
- SQL批处理与事务控制
今天我想要分享的是关于数据库的批处理与事务的控制.批处理对于项目的实际应用有非常大的具体意义. 一.批处理部分 首先我们新建一个表: create table t3( id int primary k ...
最新文章
- 实战:基于 CNN 的验证码破解项目(附代码)
- 逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗?
- java web 读取配置文件两种方法
- tensorflow常见函数——clip_by_value、numpy.random.RandomState、argmax
- 在Map 3D显示管理器中更改当前地图的名字
- 只用redis不用mysql的项目_干货!带你了解为什么那么多开源项目都是用Redis!
- 微信小程序进度条详解 progress 自定圆形进度条
- cuSPARSE库:(十四)求解稀疏三角形线性系统(solution of sparse triangular linear systems)
- IS-IS数据包--包头结构
- websocket 初识
- unity天空盒渐变_在Unity3D中使用天空盒
- JAVA-时间日期格式转换
- oracle 安装截图,ORACLE WIN7安装过程截图
- kodi mysql_Kodi
- 人工智能:为什么很多机器学习和深度学习的论文复现不了?
- [附源码]java毕业设计基于的旅游信息管理系统
- 大连理工计算机科学与技术,学院概况-大连理工大学计算机科学与技术学院
- BFV同态加密方案初步学习
- 将IDEA上面写的代码上传到gitee仓库保姆式教程
- android studio写一个圆填色,数字填色秘密花园