java saveAll()函数用于加载大量记录,这需要花费时间

fnatzsnv  于 11个月前  发布在  Java
关注(0)|答案(1)|浏览(117)

我有一个saveAll()函数,它将部件保存到部件表和部件_审计表中。当记录计数较低时,比如1000...保存和更新表需要2-3分钟,作业完成...但当记录计数变为200时,000..作业继续运行.. 000条记录快速有效地放入表中。

for (int i=0; i<inParts.size(); i++) {
......
    } else {
                        try {
                            Part addedPart =  new Part();
                            PropertyUtils.copyProperties(addedPart, inPart);
                            
                            addedPart.setCreatedBy("System");
                            addedPart.setCreatedAt(new Date());
                            addUpdParts.add(addedPart);
                            added++;    
                        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
                            log.error(e.getMessage());
                        }
                    }
                }
                
                Date savd = new Date();
                
                log.info("start saving");
                partRepo.saveAll(addUpdParts);
                log.info("start deleting staging");
                partStagingRepo.deleteAll();
                
                log.info("done");

字符串

mnemlml8

mnemlml81#

我认为你需要两个检查三件事

  • 确保每次插入都不会创建一个新的事务,这将减慢插入过程。
  • 批量插入确实发生了,JPA的批量大小足够支持200k插入
  • 如果你有太多的索引,写入会很慢。请检查你是否可以减少这个。

相关问题