Mule批处理与foreach vs splitter-aggregator

时间:2017-04-14 14:51:50

标签: mule batch-processing mule-component

在Mule中,我有很多要处理的记录,其中处理包括一些计算,来回到数据库等。我们可以使用这些选项处理记录集合

  1. 批处理
  2. 的ForEach
  3. 分配器-聚合

    那么它们之间的主要区别是什么?我们什么时候应该选择其他人?

  4. 例如,

    Mule批处理选项似乎没有批处理作业范围变量定义。或者,如果我想利用多线程来加强整体任务,该怎么办?或者,如果我想在处理期间修改有效负载,哪个更好?

3 个答案:

答案 0 :(得分:5)

当你写#34;很多"我认为它对主内存来说太多了,这排除了spliter / aggregator,因为它必须收集所有记录以将它们作为列表返回。

我假设你在流或迭代器中有你的记录,否则你可能有内存问题......

那么何时使用for-each以及何时使用批处理?

For Each

最简单的解决方案,但它有一些缺点:

  1. 它是单线程的(因此对于您的用例来说可能太慢)
  2. 这是"火灾和遗忘":你不能在循环中收集任何东西,例如:记录数
  3. 没有支持处理"破坏"记录
  4. 在循环中,您可以使用多个步骤(消息处理器)来处理记录(例如,用于提到的数据库查找)。

    可能是一个缺点,可能是一个优点:循环是同步的。 (如果要处理异步,请将其包装在异步范围内。)

    批量

    要做/要了解的更多内容,但更多功能:

    1. 从流程调用时,始终是异步的(此可能是一个缺点)。
    2. 可以是独立的(例如在内部进行投票以便开始)
    3. 当加载阶段生成的数据太大时,它会自动卸载到磁盘。
    4. 免费多线程(可配置的线程数)
    5. 处理"损坏的记录":只有好的/坏的记录才能执行批处理步骤。
    6. 最后得到统计数据(记录数,成功记录数等)
    7. 所以看起来你最好使用批处理。

答案 1 :(得分:3)

对于Splitter和Aggregator,您负责编写拆分逻辑,然后在处理结束时将它们连接回来。当您想要使用不同的服务器异步处理记录时,它非常有用。与其他选项相比,它不太可靠,这里可以进行并行处理。

Foreach更可靠,但它使用单线程(同步)迭代处理记录,因此无法进行并行处理。默认情况下,每条记录都会创建一条消息。

批处理旨在以非常快速可靠的方式处理数百万条记录。默认情况下,16个线程将处理您的记录,并且它也是可靠的。

请浏览以下链接了解更多详情。

https://docs.mulesoft.com/mule-user-guide/v/3.8/splitter-flow-control-reference

https://docs.mulesoft.com/mule-user-guide/v/3.8/foreach

答案 2 :(得分:0)

我一直在使用方法将数组中的记录传递给存储过程。 您可以在for循环中调用存储过程并相应地设置for循环的批量大小以避免往返。我使用过这种方法,性能很好。您可能必须创建另一个表来记录结果,并在存储过程中也具有该逻辑。

以下是包含所有详细信息的链接 https://dzone.com/articles/passing-java-arrays-in-oracle-stored-procedure-fro