发表于: 2020-06-18 23:31:00

1 1592


今天做了什么

1.用jdbc+多线程往数据库插入3000W数据测试有无索引的速度。

2.往服务器安装jdk(成功),maven(未完成),mysql(未完成)。

线程类:

private PreparedStatement preparedStatement = null;
private Connection connection = null;
public void run() {
Student student = new Student();
   student.setSchool("贵航");
   student.setName("韦延伦");
   student.setType("java");
   student.setStudentNumber("6601");
   student.setSlogan("好好学习天天向上");
   student.setEnterTime("20200605");
   student.setLogLink("www.baidu.com");
   student.setBrother("辅导师兄");
   student.setQqNumber("939070310");
   long start = System.currentTimeMillis();
   String sql = "insert into student_task1" +
  "(student_name,enter_time,student_number,qq,school,study_type,log_link,slogan,brother) " +
  "values(?,?,?,?,?,?,?,?,?)";

      try {
        connection = DbUtil.getConnection();
       preparedStatement = connection.prepareStatement(sql);
       //设置为手动提交
       connection.setAutoCommit(false);
       //每次提交10万一共提交30
       for (int i = 0; i < 30; i++) {
          for (int j = 0; j < 100000; j++) {
               preparedStatement.setString(1, student.getName());
               preparedStatement.setString(2, student.getEnterTime());
               preparedStatement.setString(3, student.getStudentNumber());
               preparedStatement.setString(4, student.getQqNumber());
               preparedStatement.setString(5, student.getSchool());
               preparedStatement.setString(6, student.getType());
               preparedStatement.setString(7, student.getLogLink());
               preparedStatement.setString(8, student.getSlogan());
               preparedStatement.setString(9, student.getBrother());
               preparedStatement.addBatch();
           }
           //够十万就提交一次
           preparedStatement.executeBatch();
           //清空Batch
           preparedStatement.clearBatch();
           connection.commit();
       }
        //如果这个线程已经执行完上面的语句就中断线程
       Thread.interrupted();
       long end = System.currentTimeMillis();
       System.out.println("插入300万数据用了" + (end - start) / 1000 + "");
           } catch (Exception e) {
           e.printStackTrace();
        } finally {
               try {
           preparedStatement.close();
           connection.close();
          } catch (SQLException throwables) {
             t hrowables.printStackTrace();
       }

}

}

打开十个线程一起插入

public static void main(String[] args) {

TestInsertData t1 = new TestInsertData();
   TestInsertData t2 = new TestInsertData();
   TestInsertData t3 = new TestInsertData();
   TestInsertData t4 = new TestInsertData();
   TestInsertData t5 = new TestInsertData();
   TestInsertData t6 = new TestInsertData();
   TestInsertData t7 = new TestInsertData();
   TestInsertData t8 = new TestInsertData();
   TestInsertData t9 = new TestInsertData();
   TestInsertData t10 = new TestInsertData();
   t1.start();
   t2.start();
   t3.start();
   t4.start();
   t5.start();
   t6.start();
   t7.start();
   t8.start();
   t9.start();
   t10.start();


}

结果

无索引3000w    添加的学生姓名索引3000W

3162秒            3238秒

在有索引的情况下,做插入操作要保护索引,所以插得比较慢。


明天的计划:

1.部署远程DB,在服务器上跑一下代码。

2.写任务一的深度思考。

遇到的问题:

1.在linux下配置jdk环境不成功。

解决办法:

通过百度搜到一个详细教程

1.vim /etc/profile 

2.一定要大写G回车到最后一行.


3.小写i+回车可以在最后一行插入解压后的jdk所在的文件目录

4.把鼠标移动到光标之外按ESC键

5.      :+wq保存退出

6.source /etc/profile使配置生效

7:java -version 查看安装成功情况

2.用mybatis插入数据太慢,配合多线程还是很慢。

解决方法:通过百度搜索,使用原生jdbc+多线程插入数据更快,因为mybatis封装了太多层,要解析很多东西导致很慢。

收获

原生jdbc配合多线程插入千万级是真的比mybatis批量插入快多了。

在linux上安装jdk的方法



返回列表 返回列表
评论

    分享到