【问题标题】:Faster method to write items to mariadb other than jpaitemwriterjpaitemwriter 以外的将项目写入 mariadb 的更快方法
【发布时间】:2019-01-15 22:48:49
【问题描述】:

我有一个从 Oracle 数据库读取的批处理作业,使用 JPA ITEM READER 存储 JPA,并使用 JPA ITEM WRITER 写入 MariaDB。有没有办法批量插入 MariaDB 或批量执行 mongodb 有 bulkoperations.execute() 方法?

我使用提供的 JpaItemWriter 如下:

@Bean
@Transactional
public JpaItemWriter<entity.maria.class> classJpaItemWriter() {
    JpaItemWriter<entity.maria.class> writer = new JpaItemWriter<>();
    writer.setEntityManagerFactory(mariaEntityManager.getObject());

    return writer;
}

读者是:

public JpaPagingItemReader<PojoClass> classJpaReader() throws Exception {

    String jpqlQuery = "SELECT t FROM PojoClass t where rownum < 15001";
    JpaPagingItemReader<PojoClass> reader = new JpaPagingItemReader<>();
    reader.setQueryString(jpqlQuery);
    reader.setEntityManagerFactory(oracleEntityManager.getObject());
    reader.setPageSize(100000);
    reader.afterPropertiesSet();
    reader.setSaveState(true);
    return reader;
}

步骤配置为:

@Bean
public Step classStep() throws Exception {
    Step auditStep = stepBuilderFactory.get(
            "entity.oracle.PojoClass").<class, entity.maria.class>chunk(
            10000)
            .reader(classJpaReader())
            .writer(classJpaItemWriter())
            .transactionManager(mariaTransactionManager)
            .listener(auditWriterListener())
            .faultTolerant()
            .skipLimit(10000)
            .skip(Exception.class)
            .build();
    return auditStep;
}

我想做一个自定义编写器,将值批量插入 mariaDb 并希望插入/upsert 的时间减少。目前插入 15000 所需的时间是 326 秒...这似乎有点长。

有什么建议吗?

【问题讨论】:

    标签: java spring jdbc spring-batch itemwriter


    【解决方案1】:

    你可以试试JdbcBatchItemWriter,它在后台使用JdbcTemplate#batchUpdate。这通常比 JPA 项目编写器更快,因为它不与持久上下文、一级/二级缓存等交互。

    希望这会有所帮助。

    【讨论】:

    • 这是否也会像 jpaitemwriter 中的 oracleentity 管理器那样处理重复的 id?
    • 我不确定我是否理解这一点。如果插入具有重复 Id 的项目,则会出现异常,就像 JpaItemWriter 一样。
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2015-06-23
    • 1970-01-01
    • 1970-01-01
    • 2014-06-23
    • 2013-12-08
    相关资源
    最近更新 更多