【问题标题】:Spring batch to process huge dataSpring批处理处理海量数据
【发布时间】:2021-02-11 07:50:53
【问题描述】:

我的数据库中有大约 1000 万个 blob 格式的文件,我需要将它们转换并保存为 pdf 格式。每个文件大小约为 0.5 - 10mb,组合文件大小约为 20 TB。我正在尝试使用弹簧批处理来实现该功能。但是我的问题是,当我运行批处理时,服务器内存可以容纳那么多数据吗?我正在尝试使用基于块的处理和线程池任务执行器。请建议这种运行作业的最佳方法是否可以在更短的时间内处理大量数据

【问题讨论】:

  • 如果你使用块,为什么所有数据都需要在内存中?
  • 如果我错了,请纠正我。最初,当我们从数据库中读取项目时,阅读器会将完整的数据保存在其内存中,对吗?
  • 不,它只会在内存中保存正在处理的块。
  • 好的,谢谢您的澄清状态。在这种情况下,项目处理器是否会在处理数据后释放内存?还是我需要做GC
  • 不,GC不会在需要时完成。

标签: spring spring-batch


【解决方案1】:

每个文件大小为 0.5 到 10 MB,您提到的方法非常适合使用块。您可以通过以下方式获得更多控制权并监控处理过程。

  1. 根据文件表中的线程池计数(基于您的系统资源)创建分区。
  2. 阅读器的每个分区步骤一次只能选择一个文件。
  3. 您可以根据并行步骤数计算内存并作为 VM 参数给出。
  4. 根据总并行步骤的内存计算配置提交块。

请参考下面的示例代码。

Spring Batch multiple process for heavy load with multiple thread under every process

【讨论】:

  • 谢谢...我想我正在按照上述步骤操作,但是我正在根据线程之间均分的记录数对数据进行分区。我在应用程序属性文件中传递块大小。
  • 如何根据内存配置块提交大小?春季批次有优惠吗?
  • 基于并行进程的数量和文件大小,您可以在启动期间计算并作为 VM 参数放置。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-11-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多