java - jpaitemwriter 以外的将项目写入 mariadb 的更快方法
问题描述
我有一个从 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 秒……这似乎有点长。
有什么建议么?
解决方案
您可以尝试在幕后JdbcBatchItemWriter
使用 which 。JdbcTemplate#batchUpdate
这通常比 JPA 项目编写器更快,因为它不与持久上下文、一级/二级缓存等交互。
希望这可以帮助。
推荐阅读
- c++ - 如何修复循环中0位置不取值的错误
- c# - 使用鼠标位置 Unity3D 移动对象时的问题
- python - 在数据流上运行自定义模板时出现错误“无法解析文件”
- html - 如果表单无效或单击后禁用按钮
- azure-devops - 如何在 Azure DevOps 中的 YAML 阶段之间共享文件
- javascript - 有没有办法从需要 Google Apps 脚本中的标头的 API 获取数据?
- google-bigquery - 从日期时间开始按 24 小时分组
- django - 我应该将 django 登录模板的“requirements”文件夹放在哪里?
- c# - 如何绑定可枚举的列表项
- python - 如何切掉字符串中的最后两个字符然后转换为双精度字符?