骡子批处理与foreach vs splitter-aggregator

mcv*_*vkr 2 mule batch-processing mule-component

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

  1. 批量处理
  2. 的ForEach
  3. 分离器的聚合

    那么它们之间的主要区别是什么?什么时候我们应该更喜欢别人?

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

小智 6

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

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

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

每个人

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

  1. 它是单线程的(因此对于您的用例可能太慢)
  2. 这是"火与忘记":你不能在循环中收集任何东西,例如记录计数
  3. 没有处理"破损"记录的支持

在循环中,您可以有几个步骤(消息处理器)来处理您的记录(例如,用于提到的数据库查找).

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

批量

还有更多要做/要理解的东西,但更多功能:

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

所以看起来你最好使用批处理.

  • 可能值得指出的是,"批处理"需要企业版运行时. (2认同)