当前位置: 首页 > 面试题库 >

使用Spring批处理大文件的最佳方法

凌照
2023-03-14
问题内容

我正在使用Spring批处理下载一个大文件来处理它。场景很简单:

1. Download the file via http
2. process it(validations,transformations)
3. send it into queue
  • 无需保存输入文件数据。
  • 我们可能同时运行多个(相同场景的)作业实例

我正在寻找最佳实践来处理这种情况。

我是否应该创建Tasklet以便在本地下载文件,而不是通过常规步骤开始处理它?
在这种情况下,我需要考虑一些临时文件问题(确保删除了该文件,确保不覆盖其他临时文件,等等。)

另一方面,我可以下载它并将其保留在内存中,但是我担心如果我运行许多作业,实例很快就会内存不足。

您如何建议确定这种情况?我应该完全使用tasklet吗?

谢谢。


问题答案:

如果文件很大,除非有充分的理由,否则建议将其存储到磁盘。通过将文件保存到磁盘,可以在发生错误时重新启动作业,而无需重新下载文件。

关于Taskletvs Spring Integration,我们通常建议将Spring
Integration用于这种类型的功能,因为那里已经提供了FTP功能。话虽这么说,Spring XD Tasklet对FTP功能使用了A
,因此采用这种方法也很常见。

我在SpringOne2GX上发表的Gunnar Hillert演讲是一个很好的视频,介绍了Spring Batch和Spring
Integration的集成。您可以在这里找到整个视频:https
:
//www.youtube.com/watch?v=8tiqeV07XlI。关于在Spring
Batch之前使用Spring Batch Integration for FTP的部分大约在29:37。



 类似资料:
  • 问题内容: 我有多个3 GB的制表符分隔文件。每个文件中有2000万行。所有行都必须独立处理,任何两行之间都没有关系。我的问题是,什么会更快A.使用以下命令逐行阅读: 还是B.将文件分块读取到内存中并进行处理,例如一次250 MB? 处理不是很复杂,我只是在column1到column2的值中抓取值,等等。可能需要将一些列值加在一起。 我在具有30GB内存的Linux机器上使用python 2.7

  • 上周,我决定尝试Perl6,并开始重新实现我的一个程序。我不得不说,Perl6对于对象编程来说非常容易,这对我来说是Perl5非常痛苦的一个方面。 我的程序必须读取和存储大文件,如整个基因组(高达3 Gb或更多,见下面的例子1)或制表数据。 代码的第一个版本是通过逐行迭代以Perl5的方式制作的(“基因组.fa”。对于正确的执行时间,它非常慢且不可行。 所以经过一点RTFM之后,我改变了文件上的s

  • 目前,我的应用程序的某些部分在将大量数据加载到报告表时遇到了速度问题。报告表中的数据是从多个表中提取的,并运行一些复杂的查询,但这是必需的。 除了优化代码,我的问题是,您个人如何处理需要向用户显示的大量数据,最佳实践是什么? 目前我正在处理所有的数据,然后通过javascript库生成数据表。 我知道的事情: 用户不需要一次看到所有数据 用户需要能够搜索所有数据 用户需要能够过滤数据 最好的方法真

  • 我知道匹配模式解析器,这是Spring批处理提供的。我需要关于如何构造批处理作业的帮助,以便它可以读取循环中的记录类型5和记录类型6。

  • 我试图验证输入文件是否为空或有数据。我正在使用Spring批处理通过XML bean配置,我的实际配置如下: 在我的课堂上,我有这样的东西: 但它从未进入“else”声明,它只是结束了这个过程。 有人知道是否有其他方法来验证文件是否为空吗?

  • 问题内容: 当您在Android应用中处理Firebase数据(读,写…)时,您需要获取Firebase引用才能进行数据处理。 由于Firebase引用是一棵JSON树,因此,如果您指向树的根,则可以随时访问子级,而无论深度如何。 问题:从内存和延迟角度来看,在代码中处理此引用的最佳方法是什么? 根 C1 C10 C11 C2 C21 1 /在应用程序的根目录中创建静态Firebase引用。 2