【问题标题】:Parallel Processing using Java and Spring使用 Java 和 Spring 进行并行处理
【发布时间】:2021-02-12 15:01:07
【问题描述】:

我的 Spring 批处理作业每 3 分钟运行一次。

步骤应该是

  1. 每个用户的记录都应该并行执行。每个用户最多可以有 150k 条记录。
  2. 每个用户都可以更新和删除记录。更新记录应在删除之前运行。
  3. 更新/删除集应自行并行运行。但严格来说,所有更新都应在删除之前完成。

任何人都可以建议在多个级别实现并行性并遵循更新和删除级别的顺序的最佳方法。 我正在寻找有关 Spring Async Executor Service、Parallel Streams 和其他 Spring 库的东西。 Rx,只有当它提供一些上述指定无法提供的明显性能时。

【问题讨论】:

    标签: java spring executorservice


    【解决方案1】:

    出色的性能基于 Spring Batch 实现的设计,我们确信您会使用 Spring Batch,因为我们正在处理数百万条记录并选择删除和​​更新。

    1. 每个用户的记录都应该并行执行。每个用户最多可以有 15 万条记录。 “根据用户对选择进行分区,每个用户将作为并行步骤运行。”
    2. 每个用户都可以更新和删除记录。更新记录应该在删除之前运行。 " 创建一个复合编写器并为更新 Ist 编写器添加委托并删除第二个编写器"
    3. 更新/删除集应自行并行运行。但严格来说,所有更新都应该在删除之前完成。 “每个编写器步骤更新和删除都管理事务并确保首先执行更新”。

    请参考下面

    Spring Batch multiple process for heavy load with multiple thread under every process

    复合编写器示例

    Spring Batch - Read a byte stream, process, write to 2 different csv files convert them to Input stream and store it to ECS and then write to Database

    【讨论】:

    • 如何在复合编写器中对编写器进行排序,以便在用户级别删除之前先执行更新?如何并行运行特定的 Writer 记录而不是顺序 for 循环
    • CompositeWriter 是一个顺序执行来管理完整的事务。订购是基于添加订单。您已经在步进级别实现了并行执行,您可以根据您的系统资源进行扩展。总之,每个并行步骤是单个边界事务中的读取器、处理器和写入器的组合。这有助于回滚完整的事务。
    • 我必须从 DB 读取并写入 kafka。你能给我任何关于 KafkaWriter 的链接吗?
    • 您能否打开一个关于 KafkaWriter 的新问题并将其标记为已回答,以便特定专家对此进行回答。这个问题与并行处理和Spring批处理事务步骤有关
    猜你喜欢
    • 1970-01-01
    • 2017-01-24
    • 2023-02-15
    • 2012-01-29
    • 2018-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多