我有一个ETL,它对一堆对象执行批量更新。在本地运行非常快,将更新推送到远程服务器时,该过程要慢得多,幅度大于10。由于机密性,我无法发布任何真实代码,但是发布的内容与真实情况非常相似。
一些背景
a
CrudRepository<T, ID>
的以下方法我尝试了以下操作:
repository.saveAll(objects);
并等待完成application.properties
repository.saveAll(objects);
JPA模型与真实模型非常相似
spring.main.web-application-type=none
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=update
spring.jpa.properties.hibernate.temp.use_jdbc_metadata_defaults=false
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true
logging.level.root=INFO
更新服务
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Entity
@Table
public class Item {
@Id
@GeneratedValue
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Column
private String name;
}
如何将更新添加到线程池,然后等待线程池完成。对象在更新过程中没有ID
@Primary
@Service
public class GenericUpdateServiceImpl implements UpdateService {
@Override
public void update(GenericEntityRepository repository, List<?> items) {
repository.saveAll(items);
}
}
我希望从本地数据库到远程数据库的过渡会更长一些,但不会是原来的10倍。不使用休眠的数据库查询相对较快。在本地解析单个文件需要不到30秒,而在将文件解析到远程数据库时则需要大约10分钟