java批量执行之分批处理

比眉伴天荒 2022-05-12 06:54 333阅读 0赞

相关:

在处理一些与数据库相关的操作的时候,通常把一些操作合并能够起到优化的效果,并且数量越大,批量执行的效率比一条一条执行的效率要快的多。

批量插入比单次插入快

比如有十条数据单条执行需要操作十次数据库,批量的话执行一次数据库的操作就可以。

对应的sql语句:

单次:INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….);

INSERT INTO table_name (列1, 列2,…) VALUES (值3, 值4,….);

批量:INSERT INTO table_name (列1, 列2,…) VALUES (值1, 值2,….),(值3, 值4,….);

大家可以用sql直接去数据库执行做一下对比,在数据库越大的时候,他们的速度对比越明显。

我原来做过sql数据导入,同样的数据不同的sql,单次插入的执行了800s,分批的50s内完成。这只是一个大概的印象,大家可以自己做尝试。

批量插入的缺陷

优点是可以一次性插入很多条数据,但是缺点也有,这个很多条数据是有限制的,不能无限大,数据库太多的话数据库直接报错,导入执行失败,我记得提示的是(这条sql执行数据大于2M,无法执行),大概这样的提示。

所以为了效率,也为了保证程序的正常执行,就需要分批的批量插入。

比如一次要插入8000条数据,数据库受不了,那就一次插入500条。

分批代码

这个代码是某个博客找的,原博客找不到了,也不贴了。不过分批的方法有很多,这只是一种。

  1. //分批处理
  2. if (CollectionUtils.isNotEmpty(allList)) {
  3. int pointsDataLimit = 500;//定义分批大小
  4. List<User> newList = new ArrayList<User>();
  5. for (int i = 0; i < allList.size(); i++) {//分批次处理
  6. newList.add(allList.get(i));
  7. if (pointsDataLimit == newList.size() || i == allList.size() - 1) {
  8. userDao.insertAllBy(newList);//批量插入
  9. newList.clear();
  10. }
  11. }
  12. }

总结:优化既要保证效率,更要注重正确性。

发表评论

表情:
评论列表 (有 0 条评论,333人围观)

还没有评论,来说两句吧...

相关阅读

    相关 List分批处理

                  当我们需要对一个特别大的list进行处理时,通常需要进行分批处理,可以自己实现按照多少条进行分批,但是自己实现比较复杂,而且不同的人写还容易出错。

    相关 JAVA LIST分批处理

    这是第N次在项目中遇到需要将数据分批处理的情况了。以前在用jdbcTemplate插入数据时,遇到过,当时花了好几分钟进行了分批处理,用LIST的SUBLIST方法进行了分批。

    相关 java批量执行分批处理

    相关: 在处理一些与数据库相关的操作的时候,通常把一些操作合并能够起到优化的效果,并且数量越大,批量执行的效率比一条一条执行的效率要快的多。 批量插入比单次插入快 比