发表于: 2018-04-07 21:43:33
1 798
今天完成的事情:
1.回头熟悉了下JDBC,因为mybatis和jabctemplate都是加载了jdbc包,使用JDBC来连接数据库
2.数据库插入百万条数据(目前直接用JDBC写了个测试插入的)
最开始直接使用循环100W次的方法插入,耗时很久,估算下来要5个小时左右
因为100W数据的插入没有执行完,所以这一放一个执行1W的图
考虑到JDBC事务的概念,使用事务的方法加入,效率大幅度提高
从网上看到还有addBatch()批量处理这个方法,目前在不加事务的情况下,效率没得到提升,不知道是不是我代码写的有问题(同样时1W的图)
使用事务+批量的方法,效率得到提升,但目前我还没搞清,到底跟批量有没有关系,因为耗时跟我用事务的时候,耗时差不多
然后考虑分批处理能不能再次提高效率,今天只跑了1次,没有代表性
明天的计划的事情:
1.把插入数据库这边搞完(因为是直接jdbc单跑,还去掉了util工具类,要想想怎么在mybatis这种环境里跑起来,索引也还没做)
2.直接执行Main方法,去在服务器上跑通流程
遇到的问题:
1.在不加事务时使用addBatch(),executeBatch(),并没有提高插入效率,可是按我从网上查到的结果来看,应该时可以提高的。
收获:
1.原来真的没关注到JDBC还有一个专门用于大批量插入的批量操作addBatch()
statement接口的addBatch和PreparedStatement接口的addBatch不同的
statement:
void addBatch(String sql)
将给定的 SQL 命令添加到此 Statement 对象的当前命令列表中。通过调用方法 executeBatch 可以批量执行此列表中的命令。
int[] executeBatch()
将一批命令提交给数据库来执行,如果全部命令执行成功,则返回更新计数组成的数组。
PreparedStatement接口里:重写了addBatch()的方法,executeBatch()并没有重写
void addBatch() <注意:PreparedStatement的addBatch( )没有参数的>
2.addBatch()和pstmt.executeUpdate()
addBatch()把若干sql语句装载到一起,然后一次送到数据库执行,执行需要很短的时间
而pstmt.executeUpdate() 是一条一条发往数据库执行的 时间都消耗在数据库连接的传输上面
就相当于我们平时吃橘子的时候,executeUpdate()时一瓣一瓣的吃,addBatch()时直接一口都塞嘴里吃了
评论