繁体   English   中英

用Java处理大量文本文件

[英]Processing large number of text files in java

我正在开发一个必须每天读取和处理约29K文件(约500GB)的应用程序。 这些文件将采用压缩格式,并可以在ftp上使用。

我做了什么:我打算从ftp下载文件并解压缩并使用多线程处理,这大大减少了处理时间(当活动线程数固定为较小数时)。 我已经编写了一些代码,并测试了约3.5K个文件(约32GB)。 此处的详细信息: https : //stackoverflow.com/a/32247100/3737258

但是,大约29K个文件的估计处理时间似乎仍然很高。

我正在寻找的是:任何建议/解决方案都可以帮助我将大约29K文件(约500GB)的处理时间延长至3-4小时。

请注意,必须逐行读取每个文件,并且必须对每行进行一些修改(将某些信息删除并添加一些新信息)写入新文件。

您应该分析您的应用程序,查看当前的瓶颈在哪里,然后修复它。 继续进行直到您达到所需的速度或无法进一步优化为止。

例如:

  • 也许您解压缩到磁盘。 在内存中执行此操作很慢。
  • 也许有大量的垃圾收集。 看看是否可以重复使用
  • 也许网络是瓶颈。等等。

例如,您可以使用visualvm

很难为您提供解决方案,因为这可能只是您已达到硬件限制。

一些想法:

  • 您可以并行化处理读取信息所必需的过程。 在那里,您可以向一个线程(池外)提供多条读取线,这些读取线将按顺序处理这些线程
  • 使用java.nio代替java.io请参阅: Java NIO FileChannel与FileOutputstream的性能/有用性
  • 使用探查器
  • 代替分析器,只需编写日志消息并测量应用程序多个部分的持续时间
  • 优化硬件(使用SSD驱动器,具有块大小的试用版,文件系统等)

如果您对并行计算感兴趣,请尝试Apache spark,它可以完全满足您的需求。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM