【发布时间】:2021-02-04 20:23:39
【问题描述】:
场景: 我有一个数据库,其中包含 100k 记录,其内存大小为 10 GB。 我的目标是
- 获取这些记录,
- 根据特定条件分离数据
- 然后为每组数据生成csv文件
- 将这些 CSV 文件写入 NAS(可通过同一网络访问的存储驱动器)
为了实现这一点,我的设计思路如下:
- 例如,使用每天上午 9 点触发流程的调度程序组件)
- 使用数据库选择操作来获取记录
- 使用批处理范围
- 在批处理步骤中,在 Transform 消息中使用 reduce 函数,并以如下格式分离聚合器中的数据:
{
"group_1" : [...],
"group_2" : [...]
}
- 在批处理的完整步骤中,使用文件组件将数据写入 NAS 驱动器中的文件中
问题/疑虑:
案例 1:从数据库中读取时,选择它会将所有 100k 记录加载到内存中。 问题:如何优化这一步,以便我仍然可以处理 10 万条记录,但不会出现内存使用高峰?
案例 2:在分离数据时,我将隔离数据存储在 reduce 运算符中的聚合器对象中,然后该对象保留在内存中,直到我将其写入文件。 问题:有没有一种方法可以在批处理聚合器步骤中分离数据并直接将数据写入文件中,并快速清理聚合器对象空间中的内存?
请将其视为 Mule 4 流程的设计问题并帮助我。感谢社区的帮助广告支持。
【问题讨论】:
标签: mule4