我正在使用spring batch和spring数据(JPA / Hibernate)开发Spring Boot应用程序。在我的一个批次中,我正在处理实体A,并且对于每个实体,我使用来自实体B的信息。实体B使用JPA存储库使用findBy方法加载到我的自定义ItemProcessor的过程函数中。
在我目前的测试场景中,我正在处理大约8000个实体类型A的条目。块大小设置为1000,尽管我也尝试了100和10000。我所看到的(使用步骤和块侦听器)是每个块,应用程序执行存储库的findBy方法所花费的时间增加。所以在第一个块中,执行该函数的平均时间是5ms。在下一个块已经10ms,在第三个约15ms,并且它随着每个块继续增加。
从我所看到的块大小的实验中,增加块大小提高了批处理作业的整体性能,而较小的块大小增加了批处理作业的运行时间。
除了我可以对实体的建模及其相互关系(包括提取)所做的任何改进之外,我想知道哪种机制在这里起主要作用。你有什么想法吗?
timeBefore = System.currentTimeMillis();
entityB= entityBRepository.findByEntityAReference(entityA.getReference());
timeAfter = System.currentTimeMillis();
log.info("Time to read from Repository: " + (timeAfter - timeBefore));
这是每个块都在减慢的代码块。存储库只是定义为接口。
public interface EntityBRepository extends JpaRepository<Domain, Long>
您是否认为这是来自Spring Batch或使用JPA,Hibernate和Spring Data的问题?
谢谢, 罗伯特