gpt4 book ai didi

dataweave - 骡子 4 : Memory Management : how to manage variables having huge data for example 300 Mb?

转载 作者:行者123 更新时间:2023-12-04 10:00:36 24 4
gpt4 key购买 nike

我正在开发一个 mule 应用程序,它从数据库中获取数十万条记录,使用 dataweave 绘制 map 以更改传入记录的结构,并将数据插入 Salesforce。我遵循的步骤是:

  • 一次从 db 中获取所有记录(> 100k)并将其存储在 mule 变量“vars.fetchedRecords”中
  • 对每个组件使用一个来批量处理这些“fetchRecords”,比如 10k
  • 在每个内部,我使用的是 Dataweave 转换器,其中我使用 var 来保存新的映射对象列表

  • 如何优化这个过程?在变量中保存这么多记录会影响应用程序的性能吗?有没有更好的方法呢?

    最佳答案

    看起来没有必要在内存中保留记录。你只需要处理它们。对?

    其中一种方法是使用水印。标记您在数据库中所做的事情,稍后再处理其余部分。 Mule 内置了 capabailiteis 来处理水印。
    https://docs.mulesoft.com/connectors/object-store/object-store-to-watermark

    更简单的方法(仍然分步处理记录)是找出一些顺序(比如时间),按照这个顺序处理某个子集(比如一年),然后根据你已经转移到的数据开始下一步目的地。这是更好的方法,因为如果过程失败,您可以稍后根据已经传输的数据继续它。这样的分页进程也可以随时间、服务器、多线程分布。

    节省内存的最好方法不是使用变量,而是使用有效载荷。默认情况下,Mule 的有效载荷是一个流,因此它实际上并不重要数据有多大——它会自动流经流处理的针耳。尽量避免在变量/内存中存储即使是流的一小部分。最终这个存储会溢出。

    关于dataweave - 骡子 4 : Memory Management : how to manage variables having huge data for example 300 Mb?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61841257/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com