我需要迭代近百万条记录。当前的代码是用Dataweave编写的,带有过滤和排序逻辑。然而,我看到了一个性能问题。我正在考虑使用Java组件将这个DataWeave逻辑转换为Java,看看这样做是否会提高性能。
如何提高代码的性能?
发布于 2018-09-11 18:12:19
如果您使用Global functions或'p()' functions,Data weave会有一些性能问题。如果您的dwl中有这样的函数,请避免使用它。
由于您正在处理大量记录,如果这些记录是相同的,则可以使用scatter-gather模式并利用记录的异步处理。您可以通过配置在其中执行转换/过滤逻辑的线程池来进一步调优性能。
有关散射聚集模式的实现,您可以参考此link。您在data weave中实现的排序逻辑可以移动到自定义聚合器中,并且可以根据自定义逻辑对记录进行重新排序
如果没有帮助,可以考虑在自定义Java8组件中使用Java8对记录进行过滤和排序。
发布于 2020-10-03 18:04:32
Dataweave最擅长它所做的事情。无论您愿意通过应用程序处理多少条记录,这都无关紧要。此外,主要的约束不是dataweave,而是分配的App内存和Vcores。如果记录超过一百万条,您必须考虑暂停处理记录。此外,您必须定期以块/批的形式执行处理操作,并设置合理的时间延迟。
根据我的测试,任何运行在0.1Vvores和1个worker上的应用程序,如果直线运行15个小时或更长时间,通常都会命中Mule Health Monitor,最终导致崩溃。一个好的方法是永远不要超过系统资源使用率或CPU超过70%。
注意:强烈建议不要在复杂、重复、负载较高的执行中使用Mule Java组件。
https://stackoverflow.com/questions/52206231
复制相似问题