• 现在来试试多线程能够多少秒钟插入千万数据

/*** @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万数据(多线程版)相关推荐

  1. java mysql 快速插入1000w条数据_教你88秒插入1000万条数据到mysql数据库表

    我用到的数据库为,mysql数据库5.7版本的 1.首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: ...

  2. mysql 插入秒_教你88秒插入1000万条数据到mysql数据库表,IG牛逼

    我用到的数据库为,mysql数据库5.7版本的首先自己准备好数据库表 其实我在插入1000万条数据的时候遇到了一些问题,现在先来解决他们,一开始我插入100万条数据时候报错,控制台的信息如下: com ...

  3. 多线程实现一分钟插入1000万条数据

    首先我们需要建立一个线程类,继承Thread类,并实现run方法 1.获取数据库连接 2.编写插入的sql语句 3.关闭自动提交  conn.setAutoCommit(false); 4.编写for ...

  4. 为何插入10万数据只需2秒

    文章目录 一.前言 二.问题 1.url后面useServerPrepStmts是什么? 2.url后面rewriteBatchedStatements是什么? 3.这两个参数对语句执行有什么影响? ...

  5. 每秒处理1000万用户请求…云上架构如何实现高性能和高可用

    关注我们获得更多精彩内容! 内容来源:2017 年 12 月 21 日,驻云科技资深架构师翟永东在"云时代企业架构的搭建"进行<云上架构如何实现高性能和高可用>演讲分享 ...

  6. MySQL十秒插入百万条数据

    mysql数据库准备 private String Driver = "com.mysql.cj.jdbc.Driver";private String url ="jd ...

  7. 【Java数据库】使用JDBC操作MySQL数据库、Batch批处理 、事务的概念

    MySQL 数据库的命令行操作 登陆操作mysql -hlocalhost –uroot –p123456 退出操作exit 数据库操作建库:create database 库名; 卸载库:drop ...

  8. Spring——DAO层、Spring JDBC、Spring事务控制

    目录 一.Spring对持久层技术支持 1.Spring支持的持久层技术 2.Spring JDBC 2.1. JDBCTemplate类 2.2.Spring JDBC CRUD操作 2.3.Spr ...

  9. SQL批处理与事务控制

    今天我想要分享的是关于数据库的批处理与事务的控制.批处理对于项目的实际应用有非常大的具体意义. 一.批处理部分 首先我们新建一个表: create table t3( id int primary k ...

最新文章

  1. 实战:基于 CNN 的验证码破解项目(附代码)
  2. 逻辑设计中需要显式地使用IBUF以及OBUF类似的原语吗?
  3. java web 读取配置文件两种方法
  4. tensorflow常见函数——clip_by_value、numpy.random.RandomState、argmax
  5. 在Map 3D显示管理器中更改当前地图的名字
  6. 只用redis不用mysql的项目_干货!带你了解为什么那么多开源项目都是用Redis!
  7. 微信小程序进度条详解 progress 自定圆形进度条
  8. cuSPARSE库:(十四)求解稀疏三角形线性系统(solution of sparse triangular linear systems)
  9. IS-IS数据包--包头结构
  10. websocket 初识
  11. unity天空盒渐变_在Unity3D中使用天空盒
  12. JAVA-时间日期格式转换
  13. oracle 安装截图,ORACLE WIN7安装过程截图
  14. kodi mysql_Kodi
  15. 人工智能:为什么很多机器学习和深度学习的论文复现不了?
  16. [附源码]java毕业设计基于的旅游信息管理系统
  17. 大连理工计算机科学与技术,学院概况-大连理工大学计算机科学与技术学院
  18. BFV同态加密方案初步学习
  19. 将IDEA上面写的代码上传到gitee仓库保姆式教程
  20. android studio写一个圆填色,数字填色秘密花园

热门文章

  1. 批量给视频添加AE粒子飘散特效
  2. 什么是等级保护2.0,北京等保2.0测评机构有哪些?
  3. 学习札记————问题札记
  4. 计算机毕业设计springboot安卓小说阅读源码
  5. 实时智能决策引擎在蚂蚁金服风险管理中的实践 1
  6. 基于毫米波的DOA估计方法浅谈
  7. 视频编解码之熵编码简介
  8. 用python的openpyxl库实现对excel工作表的自动化操作
  9. HCIA学习笔记#1
  10. 中考可以使用计算机吗,中考计算机考什么内容