2017-04-14 43 views
1

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

  1. 批处理
  2. 的ForEach
  3. 分段聚合

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

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

回答

4

当你写“相当多”我认为这太过分了主内存,这排除了spliter /聚合器,因为它已收集所有记录,将其返回为列表。

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

因此,当使用的for-each以及何时使用批处理?

对于每个

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

  1. 它是单线程(这样可能对你的使用情况太慢)
  2. 这是“火忘记“:你不能在循环中收集任何东西,例如记录计数
  3. 没有支持处理“破”记录

在循环中,你可以有几个步骤(消息处理器)处理您的记录(例如对于所提到的数据库查询)。

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

多一点的东西做/理解,但更多的功能:

  1. 当从流调用,通常是异步的(这可以是一个缺点)。
  2. 可以是独立的(例如,用于启动的轮询)
  3. 当加载阶段生成的数据太大时,它会自动卸载到磁盘。
  4. 多线程免费(线程数可配置)
  5. 处理“损坏的记录”:批处理步骤可能只对正常/损坏的记录执行。
  6. 你在最后得到statitstics(数量的记录,成功记录等数)

所以看起来你更好的使用批次。

+1

可能值得指出“批处理”需要企业运行时。 – PeterX

2

对于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

+0

如果我想在处理过程中修改有效载荷,哪个更好? – mCeviker

+1

你可以在每种方法中做到这一点,如果你有很大的记录,并希望更快的表现,那么批次将是最好的。 –