首页 > 解决方案 > Spring batch - 将远程分区与远程分块相结合

问题描述

试图看看我是否可以设计一个既需要分区又需要远程分块的工作。我们可以让表 A 包含行(表 A 中的列之一将是分区键),对于表 A 中的每一行,我们将拥有表 B,其中包含表中给定外键/分区键的许多子记录一个 。我们需要运行一个查询,根据查询过滤表 A 中的分区键,并且对于每个分区键,处理表 B 中的所有子记录(这里我们在表 B 中将有几百万条记录,所以我们需要记录处理的并行性,因此远程分块)

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

标签: spring-batch

解决方案


所以我们需要并行性来处理记录并因此进行远程分块

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

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

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

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


推荐阅读