jparespositry saveAll 一次可以处理的最大记录数是多少?

Posted

技术标签:

【中文标题】jparespositry saveAll 一次可以处理的最大记录数是多少?【英文标题】:What is the maximum amount of records can jparespositry saveAll can handle at a time? 【发布时间】:2020-01-02 16:44:40 【问题描述】:

在我的 spring-boot 应用程序中,我正在运行一个计划作业,该作业从一个表中获取记录并将其另存为存档,我只是遇到了一个问题,所以现在我选择保存的记录几乎是 400,000另外,当工作正在执行时,它会继续进行。 ja 可以一次处理这么多要保存的数据吗?下面是我的配置和方法。

#--Additional Settings for Batch Processing --#
spring.jpa.properties.hibernate.jdbc.batch_size=5000
spring.jpa.properties.hibernate.order_inserts=true
spring.jpa.properties.hibernate.generate_statistics=true
spring.jpa.properties.hibernate.jdbc.batch_versioned_data = true
rewriteBatchedStatements=true
cachePrepStmts=true

agentAuditTrailArchiveList 对象的大小为 400,000 以上。

private void archiveAgentAuditTrail(int archiveTimePeriod) 
    List<AgentAuditTrail> archivableAgentAuditTrails = agentAuditTrailRepository
        .fecthArchivableData(LocalDateTime.now().minusDays(archiveTimePeriod));
    List<AgentAuditTrailArchive> agentAuditTrailArchiveList = new ArrayList<>();

    archivableAgentAuditTrails
        .forEach(agentAuditTrail -> agentAuditTrailArchiveMapper(agentAuditTrailArchiveList, agentAuditTrail));
    System.out.println(" agentAuditTrailArchiveList = " + agentAuditTrailArchiveList.size());
    System.out.println("archivableAgentAuditTrails = " + archivableAgentAuditTrails.size());
    agentAuditTrailArchiveRepository.saveAll(agentAuditTrailArchiveList);

    agentAuditTrailRepository.deleteInBatch(archivableAgentAuditTrails);
    

【问题讨论】:

【参考方案1】:

假设您实际上是作为 Spring Batch 作业执行此操作,这已被处理。您只需要在批处理作业步骤配置中设置块大小,以便它一次只处理一组记录。请参阅下面的批处理步骤配置示例。

你永远不想尝试将整个工作作为一个提交来完成,除非它总是非常小。在一次提交中完成所有操作会使您面临失败条件和数据完整性问题的美誉列表。

@Bean
public Step someStepInMyProcess(FlatFileItemReader<MyDataObject> reader,
        MyProcesssor processor, ItemWriter<MyDataObject> writer) 
    return stepBuilders.get("SomeStepName")
            .<MyDataObject, MyDataObject>chunk(50)
            .reader( reader )
            .processor( processor )
            .writer(writer)
            .transactionManager(transactionManager)
            .build();

【讨论】:

以上是关于jparespositry saveAll 一次可以处理的最大记录数是多少?的主要内容,如果未能解决你的问题,请参考以下文章

MongoTemplate 一次更新多个文档而不使用 saveAll() 或循环

是否可以使用 Cakephp 中的 saveAll 一次将所有相关记录插入到 HABTM 中?

充电一次可走15460步,还能边走边充,这个机械假腿连脚趾都能动 | Science Robotics封面...

D - Milk Patterns (出现k次可重复的最长子串的长度)

CakePHP如何在一个saveAll中不知道外键的情况下创建hasMany数据?

CakePHP:用户数据 saveAll 静默失败?