之前我们的业务也没有太多,简单的生成订单就是普通的insert操作,有一次发现,操作一个2w条的订单数量,前后花费的时间要15分钟,这个让我有点失望。2w的数据量真的不太大,为什么这么慢呢?当然系统中还有其它的操作存在,不至于这么点的数据量让mysql撑不住了。
原理其实也很简单,每insert一条记录,需要记录下log等一系列的日志操作,这些都是要消费时间的。如果批量提交的话,则会只 发送一次的请求。这就是批量提交与普通的提交的差别了。
但是要使用好批量提交操作,有几点还是要注意的。
1. 批量提交的次数,不是几十万条数量一股脑儿的提交上去了,一般是分段提交,每一段提交个1000条数据量,同一段的生成一个UUID记录;
2. 使用批量提交可以直接写事务,
connection.setAutoCommit(false); psmt.addBatch(); psmt.executeBatch(); connection.commit();
这样写,没有问题,事务里面默认会把所有batch里的操作当成一个整体去提交。
3. 如果你没有在事务中写,很可惜,批量的操作会当成普通的操作了,此时你需要在连接的
时候去加一个参数:
rewriteBatchedStatements=true
以上就是记录JDBC 批量操作的方法和注意事项。