Spring Batch-读取大型平面文件-选择横向扩展? [英] Spring Batch - Reading a large flat file - Choices to scale horizontally?

查看:29
本文介绍了Spring Batch-读取大型平面文件-选择横向扩展?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在最近一两个小时开始研究Spring Batch。并需要您的输入。

问题:读取一个/多个包含2000万数据的CSV文件,执行次要处理,将其存储在数据库中,并在最短的时间内将输出写入另一个平面文件。

最重要的:我需要做出将来横向扩展的选择。

问题:

使用远程分块或分区进行水平扩展?

由于数据在平面文件中,远程分块和分区都不是好的选择?

哪种多进程解决方案可以读取大文件,将处理分散到多个服务器,更新数据库,但最终写入/输出到单个文件?

多资源分区程序是否可以跨服务器工作?

您知道在哪里完成/演示过这样的事情的好教程吗?

您对如何尝试此操作有何想法,如1)在开始作业之前将大文件拆分为小文件2)使用项目阅读器一次读取一个文件.

推荐答案

假设"次要处理"不是处理中的瓶颈,则扩展此类作业的最佳选择是通过分区。这项工作将有两个步骤。第一种方法是将大文件拆分成较小的文件。为此,我建议使用SystemCommandTaskletshell命令操作系统拆分文件(这通常比通过JVM流式传输整个文件的性能更高)。这样做的示例如下所示:

<bean id="fileSplittingTasklet" class="org.springframework.batch.core.step.tasklet.SystemCommandTasklet" scope="step">
    <property name="command" value="split -a 5 -l 10000 #{jobParameters['inputFile']} #{jobParameters['stagingDirectory']}"/>
    <property name="timeout" value="60000"/>
    <property name="workingDirectory" value="/tmp/input_temp"/>
</bean>
第二步将是分区步骤。如果文件位于非共享位置,则可以使用本地分区。但是,如果生成的文件位于某个网络共享位置,则可以使用远程分区。在这两种情况下,您都可以使用MultiResourcePartitioner为每个文件生成StepExecution。然后,这些将通过从机执行(本地运行在线程上或远程侦听某些消息传递中间件)。

在此方法中需要注意的一点是,将不会维护原始文件中记录的处理顺序。

您可以在这里看到完整的远程分区示例:https://github.com/mminella/Spring-Batch-Talk-2.0,演讲/演示的视频可以在这里找到:https://www.youtube.com/watch?v=CYTj5YT7CZU

这篇关于Spring Batch-读取大型平面文件-选择横向扩展?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆