Spring batch - 使用内存数据库处理大文件
Spring batch - using in-memory database for huge file processing
我正在使用 Spring 批处理来处理大量数据 (150 GB) 以生成 60 GB 的输出文件。我正在使用垂直缩放方法和 15 个线程(步骤分区方法)。
作业执行详细信息存储在内存数据库中。 CPU 利用率更高是因为它在单机上 运行 并且文件很大。但是服务器配置不错,比如 32 核处理器,我为此过程使用 10 GB 内存。
我的问题是,如果我将其移动到单独的数据库中,它会减少一些 CPU 利用率吗?此外,使用内存数据库进行生产是一个糟糕的选择/决定?
此致,
香卡
当您谈论从内存数据库移动到单独的数据库时,您只是在谈论批处理运行时表(job_instance、job_execution、step_execution、. ..),对吗?
如果是这样,我不认为 CPU 使用率会下降很多。根据您的块大小,与更新批处理运行时表相比,您的数据处理需要更多 CPU 的使用。
使用内存数据库进行生产是否是一个好的决定,取决于您的需要。需要考虑的两点:
- 您丢失了写入批处理运行表的所有信息。这可能对调试会话有帮助,或者只是为了拥有一种历史记录。但是您也可以在日志文件中 "persist" 这样的信息。
- 您将无法执行可重启的作业。如果您的工作需要几个小时才能完成,这可能是个问题。但是对于job来说,只读一个文件,写一个文件,几分钟就可以完成,这不是问题。
我正在使用 Spring 批处理来处理大量数据 (150 GB) 以生成 60 GB 的输出文件。我正在使用垂直缩放方法和 15 个线程(步骤分区方法)。
作业执行详细信息存储在内存数据库中。 CPU 利用率更高是因为它在单机上 运行 并且文件很大。但是服务器配置不错,比如 32 核处理器,我为此过程使用 10 GB 内存。
我的问题是,如果我将其移动到单独的数据库中,它会减少一些 CPU 利用率吗?此外,使用内存数据库进行生产是一个糟糕的选择/决定?
此致, 香卡
当您谈论从内存数据库移动到单独的数据库时,您只是在谈论批处理运行时表(job_instance、job_execution、step_execution、. ..),对吗?
如果是这样,我不认为 CPU 使用率会下降很多。根据您的块大小,与更新批处理运行时表相比,您的数据处理需要更多 CPU 的使用。
使用内存数据库进行生产是否是一个好的决定,取决于您的需要。需要考虑的两点:
- 您丢失了写入批处理运行表的所有信息。这可能对调试会话有帮助,或者只是为了拥有一种历史记录。但是您也可以在日志文件中 "persist" 这样的信息。
- 您将无法执行可重启的作业。如果您的工作需要几个小时才能完成,这可能是个问题。但是对于job来说,只读一个文件,写一个文件,几分钟就可以完成,这不是问题。