【问题标题】:How to avoid duplicate record processing in multiple instance batch scripts如何避免多实例批处理脚本中的重复记录处理
【发布时间】:2021-08-27 07:56:46
【问题描述】:

我们正在尝试创建一个批处理脚本来读取数百万条记录并尝试处理它们,由于处理需要更长的时间(例如:更多 6 小时),我们计划运行多个批处理脚本实例。 如何避免多个实例选择相同的记录进行处理?

我们尝试了以下方法

使用管理器预先分配具有记录范围的实例。(例如,假设 3 个实例和 600 万条记录,每个实例将获得 200 万条记录)。

读取后在每条记录中标记instance_id。 Instances 总是选择 instance_id 中具有空值的记录

有没有其他方法可以避免重复记录处理。

【问题讨论】:

    标签: spring-batch batch-processing


    【解决方案1】:

    如果您使用 Spring Batch,您有多种选择来扩展您的工作。以下是一个非详尽的选项列表:

    • 使用多线程步骤创建作业:每个线程将处理不同的数据块
    • 使用分区步骤创建作业:每个工作步骤都分配有一个不同的分区(工作人员可以是本地线程或远程 JVM)
    • 创建不同的作业实例,其中每个作业实例都分配有不同的分区

    有关详细信息,请参阅文档中的Scaling and Parallel Processing 部分。

    【讨论】:

      【解决方案2】:

      或者,我们可以使用 DB Partitioning 策略来修复重复记录处理

      1. 修复甚至打破记录集
      2. 按关键列拆分
      3. 按视图细分
      4. 添加处理指示符
      5. 将表提取到平面文件
      6. 散列列的使用

      Spring Document reference - click here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-06-15
        • 2015-11-15
        • 2015-02-12
        • 2017-01-11
        • 1970-01-01
        • 2013-07-30
        • 1970-01-01
        相关资源
        最近更新 更多