当前位置: 首页 > 知识库问答 >
问题:

spring Batch:处理大文件

相弘方
2023-03-14

我在生产中有10个大文件,我们需要从文件中读取每一行,将逗号分隔的值转换为某个值对象,并将其发送到JMS队列,还需要插入数据库中的3个不同的表中

如果我们取10个文件,我们将有3300万行。我们使用spring batch(MultiResourceItemReader)读取earch行,并使用write将其写入db,同时将其发送到JMS。它大约需要25个小时才能完成所有。

为了提高性能,我们考虑使用spring多线程支持。开始使用5个线程。我们可以看到性能的提高,可以看到一切都在10小时内完成。

这里我有以下问题:1)如果我使用5个线程处理,我们会将大量的数据发布到JMS队列中。将队列支持巨大的数据。注意,我们有10个系统在生产中从队列中读取JMS消息。2)使用thread(5)和1 production system是很好的方法(或者)代替spring batch将数据插入到db,我可以创建一个rest服务,spring batch调用rest api将数据插入到db,并让spring api将数据插入到JmS队列(同样,如果spring batch进程文件annd使用rest将数据插入到db,每秒我将读取4或5行并调用rest api。如果使用rest API方法将我的系统支持(rest可以使用负载均衡器处理巨大的请求,而且JMS也可以处理巨大的消息)或使用spring批处理应用程序中的线程使用1个生产系统是更好的方法。

共有1个答案

龙隐水
2023-03-14

不同的JMS提供程序将有不同的限制,但通常消息传递可以在很短的时间内轻松地处理数百万行。

消息传递将比直接插入数据库更快,因为消息需要管理的数据非常少(除了JMS属性),而不是完整的RDBMS或NoSQL数据库的开销,消息传递将执行所有这些开销。

假设可以以任何顺序处理各个行,那么将所有数据发送到同一个队列并让n个使用者在后端工作是一个合理的解决方案。

更好的解决方案可能是将文件转换为单个文件,可以使用特定于平台的工具批量加载到数据库中。为了获得性能,这些工具通常禁用索引、禁止检查和其他任何会使事情变慢的操作--通常会绕过SQL本身。

 类似资料:
  • 我想用3个步骤建立一个批次。我想配置这个步骤,就像如果有100条记录,当step1读取、处理和写入一个10块时,step02,然后step03开始和结束,然后再次返回step1,读取下一个块。这在Spring批量可能吗?

  • 问题内容: 我有一个很大的xml文件,其中包含许多子元素。我希望能够运行一些xpath查询。我尝试在Java中使用vtd- xml,但有时会出现内存不足错误,因为xml太大,无法容纳到内存中。是否有替代方法来处理如此大的xml。 问题答案: 尝试http://code.google.com/p/jlibs/wiki/XMLDog 它使用sax执行xpaths,而无需创建xml文档的内存表示形式。

  • 本文向大家介绍Python文本处理之按行处理大文件的方法,包括了Python文本处理之按行处理大文件的方法的使用技巧和注意事项,需要的朋友参考一下 以行的形式读出一个文件最简单的方式是使用文件对象的readline()、readlines()和xreadlines()方法。 Python2.2+为这种频繁的操作提供了一个简化的语法——让文件对象自身在行上高效迭代(这种迭代是严格的向前的)。 为了读

  • 我们的SpringBatch作业只有一个步骤,包括ItemReader、ItemProcessor和ItemWriter。我们用不同的参数同时运行同一个作业。ItemReader是有状态的,因为它包含从中读取的输入流。 因此,我们不希望ItemReader的相同实例用于每个JobInstance(作业参数)调用。 我不太确定哪种是这种情况的最佳“范围界定”。 1) 该步骤是否应该以@JobScop

  • 问题内容: 我正在尝试处理较大的(可能多达200M)JSON文件。文件的结构基本上是对象数组。 因此,遵循以下原则: 每个对象都具有任意属性,不必与数组中的其他对象共享它们(例如,具有相同的属性)。 我想对数组中的每个对象进行处理,并且由于文件可能很大,因此无法将整个文件内容都包含在内存中,无法解码JSON并遍历PHP数组。 因此,理想情况下,我想读取文件,为每个对象获取足够的信息并进行处理。如果

  • 用Flask处理非常大的文件上传(1 GB+)的最佳方式是什么? 我的应用程序基本上接受多个文件,为它们分配一个唯一的文件号,然后根据用户选择的位置将其保存在服务器上。 我们如何运行文件上传作为一个后台任务,这样用户就不会有浏览器旋转1小时,而是可以立即进入下一页? null