代码之家  ›  专栏  ›  技术社区  ›  Andrew

Spring批处理的块大小和页面大小之间的差异[重复]

  •  5
  • Andrew  · 技术社区  · 8 年前

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

    在阅读器中,我将页面大小设置为 20

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

    2 回复  |  直到 4 年前
        1
  •  9
  •   Sabir Khan    8 年前

    在当前配置下,如果您的每个读取项都指向writer(即,如果它没有在处理器中过滤掉),那么您将需要1000/20=50次数据库读取才能达到块大小,即当您实际调用writer进行写入时。

    Spring批处理将处理过的项目保存在内存中,直到您达到块大小,并且保存项目会消耗内存。

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

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

        2
  •  1
  •   hira waseem    8 年前

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

    数据库页面大小决定了一次从数据库中提取多少条记录。这更像是一个优化设置,介于你想要多大的缓冲区和司机从数据库中获取数据的行程数之间。