块大小和页面大小之间的差异Spring Batch

时间:2017-09-27 16:06:57

标签: java spring spring-batch

我有一个弹簧批处理作业,我将块大小设置为1000,该作业中的读者是JpaPagingItemReader

在阅读器中,我将页面大小设置为20。这是否意味着读取读取的1000个项目的每个chuck必须从db 20项目中取出?

如果没有,它们之间有什么区别?

2 个答案:

答案 0 :(得分:4)

使用您当前的配置,如果您的每个读取项目都写入编写器(即,如果它没有在处理器中过滤掉),那么您将需要1000/20 = 50个数据库读取才能达到块大小,即当您实际上是打电话给作家写作。

Spring Batch将已处理的项目保存在内存中,直到达到块大小并且保留项目会占用内存。

您当前的配置是将数据保存在内存中并进行不必要的数据库调用,同时我们希望减少这两项内容。

因此,您的配置需要与您正在进行的操作相反,即将读取器页面大小增加到最小等于块大小/提交间隔或更多,以便一旦读取的数据在小的小块中处理,那么您再次访问并读取数据库。

因为你注意到当前的写作,概念上这些是不相关的概念 - 读者页面大小是为了最小化数据库调用(这个概念不是弹簧批量概念,而是读者特定的 - 如果它不是分页阅读器,这个概念没有进入图片)而块大小是关于以小的小块提交处理数据以减少内存占用量。

答案 1 :(得分:0)

是,提交间隔确定将在块中处理多少记录。

数据库页面大小决定一次从数据库中提取的记录数。它更像是一个优化设置,它是指你想要多大的缓冲区v / s,驱动程序从数据库中获取数据的行程次数。