在Mule中,我有很多要处理的记录,其中处理包括一些计算,来回到数据库等。我们可以使用这些选项处理记录集合
分配器-聚合
那么它们之间的主要区别是什么?我们什么时候应该选择其他人?
Mule批处理选项似乎没有批处理作业范围变量定义。或者,如果我想利用多线程来加强整体任务,该怎么办?或者,如果我想在处理期间修改有效负载,哪个更好?
答案 0 :(得分:5)
当你写#34;很多"我认为它对主内存来说太多了,这排除了spliter / aggregator,因为它必须收集所有记录以将它们作为列表返回。
我假设你在流或迭代器中有你的记录,否则你可能有内存问题......
那么何时使用for-each以及何时使用批处理?
最简单的解决方案,但它有一些缺点:
在循环中,您可以使用多个步骤(消息处理器)来处理记录(例如,用于提到的数据库查找)。
可能是一个缺点,可能是一个优点:循环是同步的。 (如果要处理异步,请将其包装在异步范围内。)
要做/要了解的更多内容,但更多功能:
所以看起来你最好使用批处理。
答案 1 :(得分:3)
对于Splitter和Aggregator,您负责编写拆分逻辑,然后在处理结束时将它们连接回来。当您想要使用不同的服务器异步处理记录时,它非常有用。与其他选项相比,它不太可靠,这里可以进行并行处理。
Foreach更可靠,但它使用单线程(同步)迭代处理记录,因此无法进行并行处理。默认情况下,每条记录都会创建一条消息。
批处理旨在以非常快速可靠的方式处理数百万条记录。默认情况下,16个线程将处理您的记录,并且它也是可靠的。
请浏览以下链接了解更多详情。
https://docs.mulesoft.com/mule-user-guide/v/3.8/splitter-flow-control-reference
答案 2 :(得分:0)
我一直在使用方法将数组中的记录传递给存储过程。 您可以在for循环中调用存储过程并相应地设置for循环的批量大小以避免往返。我使用过这种方法,性能很好。您可能必须创建另一个表来记录结果,并在存储过程中也具有该逻辑。
以下是包含所有详细信息的链接 https://dzone.com/articles/passing-java-arrays-in-oracle-stored-procedure-fro