Java Spring批处理中块大小和页面大小之间的差异

Java Spring批处理中块大小和页面大小之间的差异,java,spring,spring-batch,Java,Spring,Spring Batch,我有一个spring批处理作业,其中我将块大小设置为1000,该作业中的读取器是JpaPagingItemReader 在阅读器中,我将页面大小设置为20。这是否意味着读卡器每读取1000个项目,就必须从数据库中取出20个项目 如果不是,它们之间的区别是什么?是,提交间隔决定了一个块中要处理多少条记录 数据库页面大小决定一次从数据库中提取多少条记录。这更像是一个优化设置,介于您希望缓冲区的大小与驾驶员从数据库获取数据的行程数之间。在当前配置中,如果您的每个读取项都可以写入(即,如果它没有在处理器

我有一个spring批处理作业,其中我将块大小设置为1000,该作业中的读取器是
JpaPagingItemReader

在阅读器中,我将页面大小设置为
20
。这是否意味着读卡器每读取1000个项目,就必须从数据库中取出20个项目


如果不是,它们之间的区别是什么?

是,提交间隔决定了一个块中要处理多少条记录


数据库页面大小决定一次从数据库中提取多少条记录。这更像是一个优化设置,介于您希望缓冲区的大小与驾驶员从数据库获取数据的行程数之间。

在当前配置中,如果您的每个读取项都可以写入(即,如果它没有在处理器中过滤掉)然后,您将需要1000/20=50次数据库读取以达到块大小,即当您实际调用编写器进行写入时

Spring批处理将处理过的项目保存在内存中,直到达到块大小为止,保存项目会占用内存

您当前的配置是在内存中保存数据并进行不必要的数据库调用,而我们希望减少这两种情况

因此,您的配置需要与您正在执行的操作相反,即将读卡器页面大小增加到最小值,等于块大小/提交间隔或更大,这样,一旦读取的数据被处理成小块,您就可以再次读取数据库

所以,正如您在当前的文章中所注意到的,从概念上讲,这些都是不相关的概念-读取器页面大小是为了最小化数据库调用(这个概念不是spring批处理概念,而是特定于读取器的-如果它不是分页读取器,这个概念就不会出现在图片中)而块大小是指将处理过的数据提交到小块中,以减少内存足迹