Spring批处理-将远程分区与远程分块相结合



试着看看我是否可以设计一个既需要分区又需要远程分块的作业。我们可以有类似于表A的东西来保存行(表A中的一列将是分区键(,对于表A中每一行,我们可以有表B,它包含表A中给定外键/分区键的许多子记录。我们需要运行一个查询,根据查询过滤表a中的分区键,对于每个分区键,处理表B中的所有子记录(这里我们在表B中有几百万条记录,因此我们需要并行处理记录,从而进行远程分块(

对于这样的事情,在春季批量工作设计中,正确的思考方式是什么?在此处输入图像描述

因此我们需要并行处理记录,因此需要远程分块

不一定。没有什么可以阻止你在分区步骤的工作人员中使用远程分块,但IMO这会使事情复杂化。

更简单的方法是使用多个作业。每个作业将处理不同的分区,并使用多线程步骤并行处理项目。换句话说,分区键在这里是一个作业参数。这种方法有以下优点:

  1. 更易于扩展:因为您在两个级别上具有并行性:

    • 使用多个JVM并行运行多个作业(在同一台机器上或不同的机器上(
    • 在每个JVM中,使用多个线程并行处理项目
  2. 更容易实现:远程分区和分块不是最容易配置的设置。运行多个作业,其中每个作业读取select * from TableA where partitionKey = ?项并使用多线程步骤(需要单行代码,添加任务执行器.taskExecutor(taskExecutor)(要容易得多。