Mule批处理vs foreach vs拆分聚合器

Mule批处理vs foreach vs拆分聚合器,mule,batch-processing,mule-component,Mule,Batch Processing,Mule Component,在Mule中,我有很多记录要处理,其中处理包括一些计算、来回访问数据库等。。我们可以使用这些选项处理记录集合 批处理 弗雷奇 拆分聚合器 那么,它们之间的主要区别是什么?什么时候我们应该选择其中一个 例如,Mule批处理选项似乎没有批处理作业范围变量定义。或者,如果我想利用多线程来加快整个任务的进度,该怎么办?或者,如果我想在处理过程中修改有效负载,哪一个更好?对于拆分器和聚合器,您负责编写拆分逻辑,然后在处理结束时将它们重新连接起来。当您希望使用不同的服务器异步处理记录时,它非常有用。与

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

  • 批处理

  • 弗雷奇

  • 拆分聚合器

    那么,它们之间的主要区别是什么?什么时候我们应该选择其中一个


  • 例如,Mule批处理选项似乎没有批处理作业范围变量定义。或者,如果我想利用多线程来加快整个任务的进度,该怎么办?或者,如果我想在处理过程中修改有效负载,哪一个更好?

    对于拆分器和聚合器,您负责编写拆分逻辑,然后在处理结束时将它们重新连接起来。当您希望使用不同的服务器异步处理记录时,它非常有用。与其他选项相比,它的可靠性较低,这里并行处理是可能的

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

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

    请通过下面的链接了解更多详细信息

    当您编写“相当多”时,我认为这对于主内存来说太多了,这就排除了拆分器/聚合器,因为它必须收集所有记录才能将它们作为列表返回

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

    那么,何时使用每一个,何时使用批次

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

  • 它是单线程的(因此对于您的用例来说可能太慢)
  • 它是“开火并忘记”:您不能收集循环中的任何内容,例如记录计数
  • 不支持处理“损坏”记录
  • 在循环中,您可以通过几个步骤(消息处理器)来处理记录(例如,用于上述数据库查找)

    可能是缺点,也可能是优点:循环是同步的。(如果要处理异步,请将其包装在异步作用域中。)

    批处理 还有一些事情要做/要理解,但还有更多功能:

  • 从流调用时,总是异步的(这可能是一个缺点)
  • 可以是独立的(例如,内部带有用于启动的轮询)
  • 加载阶段生成的数据太大时,会自动卸载到磁盘
  • 免费多线程(可配置线程数)
  • “损坏记录”的处理:只能对完好/损坏的记录执行批处理步骤
  • 最后你会得到统计数据(记录数、成功记录数等)

  • 所以看起来您最好使用批处理。

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

    下面是包含所有详细信息的链接

    如果我想在处理过程中修改有效负载,哪一个更好?您可以在每种方法中都这样做,如果您有大量记录并且想要更快的性能,那么批处理将是最好的。可能值得指出的是,
    批处理
    需要企业运行时。您可以在For Each中调用另一个流并进行多线程处理