提高IO性能和速度



我需要阅读&在压缩文本文件中写入大量字符串(每条字符串行90个字符长)
准备输入/输出也是一项耗时的任务,但可以忽略不计(IO时间要大得多(有轮廓))

这是我正在使用的代码:

GZIPOutputStream out = new GZIPOutputStream(new FileOutputStream(file));
out.write((stringData+NewLineConstant).getBytes());
GZIPInputStream in = new GZIPInputStream(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(in),8192);
String data = bufferedReader.readLine();

这个问题花了太多时间来完成。

这也可以在用于对数据进行排序的多个文件上完成(合并排序)。

我能做些什么来提高表演的戏剧性吗?(无硬件更改)

您有关于这些行中前一两个字符的分布的信息吗?

如果是这样的话,您可以一次性读取这个大文件,并且可以仅基于这些行的前一两个字符创建一到二十个bucket(文件)。之后,如果分布是均匀的,您可以在内存中对这些bucket进行排序(这些文件将小于1GB)。

详细情况如下:

  • 打开大文件(10GB)
  • 打开数十个要写入的bucket文件(每种类型的行1个:aa、ab…)
  • 读取大文件的行,并写入bucket文件
  • 关闭大文件
  • 关闭bucket文件
  • 对内存中的bucket文件进行排序(首先是aa,然后是ab,…),这可以并行化,并将其附加

通常,您应该增加读取缓冲区(从8K增加到几兆字节)和写入缓冲区(从不8K增加至256K-512K)。

最新更新