saveAll() 函数加载许多记录需要时间

问题描述 投票:0回答:1

我有一个 saveAll() 函数,它将部件保存到部件表和部件审计表中。当记录计数较低时,例如 1000 ..需要 2-3 分钟来保存和更新表,并且作业完成...但是当记录计数变为 200,000 时..作业继续运行...没有数据也在表中插入。 有什么技术/建议可以快速有效地向表中插入 200,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");
java spring spring-boot jpa java-8
1个回答
0
投票

我认为你需要检查三件事

  • 确保每次插入不会创建新事务,这会减慢插入过程。
  • 批量插入确实发生了,JPA 的批量大小足以支持 200k 插入
  • 如果索引太多,写入会很慢。请检查是否可以减少这个。
© www.soinside.com 2019 - 2024. All rights reserved.