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

问题描述

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

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

{
   "group_1" : [...],
   "group_2" : [...]

}

问题/疑虑:

案例 1:从数据库中读取时,选择它会将所有 100k 记录加载到内存中。问题:如何优化这一步,以便我仍然可以处理 10 万条记录,但不会出现内存使用高峰?

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

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

标签: mule4

解决方案


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

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

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

推荐阅读