一、背景及所用的技术
1.千万级数据库,每张表大概一千万的数据量,每个小时数据20w+的数据。
2.JDBCTemplate,java,mysql
二、问题描述
用jdbcTemplate.batchUpdate(String[] sqls)
方法批量1000条执行一次,当数据量太大到达10w级别的时候,执行时间太长,无法满足10分钟内完成插入数据库的需求。
三、检查问题
使用jdbcTemplate.batchUpdate(String[] sqls)
方法会去编译加载每一条sql,浪费了很多时间。
四、查询资料
可以使用jdbcTemplate.batchUpdate(String sql, final BatchPreparedStatementSetter pss)
方法预编译sql,大大缩短批量更新的执行时间,还可以防止sql注入。
准备10w数据用于测试批量更新的执行效率,结果为执行时间小于10s,结果符合预期,可以尝试用于项目。
五、优化尝试
根据之前的测试结果尝试进行代码优化,使用jdbcTemplate.batchUpdate(String sql, final BatchPreparedStatementSetter pss)
来进行批量插入,一次插入10w数据。
jdbcTemplate.batchUpdate(sql,