我们开发了一个 spring 批处理应用程序,其中有两个流程。1. 前进 2. 后退。我们只使用文件读/写不涉及数据库。
Forward Scenario : 输入文件将有 22 个字段的记录。通过进行序列号生成和添加少量填充字段等操作,将 22 个字段转换为 32 个字段。根据国家代码,输出将被分成最多 3 个。每个块将有 250K 记录。(如果记录以百万为单位,将为同一国家/地区生成多个文件)。
800 万条记录耗时 36 分钟。
800 万条记录将在一个文件中。
我们正在使用我们正在使用的弹簧批处理线程 1000 个线程。
后向流:输入文件的每条记录将有 82 个字段。这82个字段要转换成86条记录。这两个字段将被添加在这两个字段之间,这两个字段取自正向流输入文件。其他字段只是简单地复制和粘贴。错误记录也要写入错误文件。错误记录只不过是前向流的实际输入记录。为了跟踪,我们将序列号和实际记录保存在一个文件中,这是在前向流本身中完成的。我们正在反向流中获取持久文件并比较序列号,如果缺少任何内容,那么我们将通过键值对写入错误记录。这个过程是在回流完成后完成的。
输入文件的最大大小为 250K。
800 万条记录需要 1 小时 8 分钟,这太糟糕了。在此流程中将有 32 个文件(每个 250K)供输入。向后没有使用线程。我不知道线程使用情况如何。我试过了,但这个过程挂了。
服务器配置:
12 个 CPU 和 64 GB Linux 服务器。
由于我们有 12 个 CPU/64GB RAM,你们能否在这方面帮助提高性能。