微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Mule 4:设计:如何在 Mule 4 中处理数据[文件/数据库记录]而不会出现“内存不足”错误?

如何解决Mule 4:设计:如何在 Mule 4 中处理数据[文件/数据库记录]而不会出现“内存不足”错误?

场景: 我有一个包含 100k 条记录的数据库,这些记录在内存中的大小为 10 GB。 我的目标是

为了实现这一点,我的设计思路如下:

  • 例如,使用每天上午 9 点触发流程的调度程序组件)
  • 使用数据库选择操作获取记录
  • 使用批处理范围
  • 在批处理步骤中,在 Transform 消息中使用 reduce 函数,并以如下格式在聚合器中分离数据:
{
   "group_1" : [...],"group_2" : [...]

}

  • 在批处理的完整步骤中,使用文件组件将数据写入 NAS 驱动器中的文件

问题/疑虑:

案例 1:从数据库读取时选择它加载内存中的所有 100k 记录。 问题:如何优化此步骤,以便我仍然可以处理 100k 条记录,但不会出现内存使用量激增的情况?

案例 2:在隔离数据时,我将隔离数据存储在 reduce 运算符中的聚合器对象中,然后该对象保留在内存中,直到我将其写入文件。 问题:有没有办法在批处理聚合器步骤中分离数据并直接将数据写入文件中,并快速清除聚合器对象空间中的内存?

请将其视为 Mule 4 流程的设计问题并帮助我。感谢社区提供的帮助广告支持

解决方法

  1. 不要在内存中加载 10 万条记录。在内存中加载大量数据可能会导致内存不足错误。您没有在配置中提供详细信息,但默认情况下数据库连接器会“流式传输”记录页面,因此需要注意。使用 fetchSize 属性来调整每页读取的记录数。默认值为 10。批处理范围使用磁盘空间来缓冲数据,以避免使用 RAM 内存。它还具有一些参数来帮助调整每步处理的记录数量,例如批处理块大小和批处理聚合器大小。使用默认值不会接近 100K 记录。还要确保控制并发以限制资源使用。

请注意,即使减少所有配置,也不意味着在处理时不会出现峰值。任何处理都会消耗资源。这个想法是要有一个可预测的、可控的峰值,而不是一个可以耗尽可用资源的不受控制的峰值。

  1. 这个问题不清楚。除了聚合器大小之外,您无法控制聚合器内存,但看起来它只保留最近的聚合记录,而不是所有记录。您对此有任何疑问还是这是一个理论问题?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。