6

现在我正在从事有关数据格式转换的工作。有一个大文件,比如 10GB,我目前实现的解决方案是逐行读取这个文件,转换每一行的格式,然后输出到一个输出文件。我发现转换过程是一个瓶颈。所以我试图以并发的方式做到这一点。

每一行都是一个完整的单元,与其他行无关。有些行可能会被丢弃,因为该行中的某些特定值不符合需求。

现在我有两个计划:

  1. 一个线程从输入文件中逐行读取数据,然后将行放入队列,几个线程从队列中获取行,转换格式,然后将行放入输出队列,最后一个输出线程从输出队列中读取行并写入输出文件。

  2. 几个线程当前从输入文件的不同部分读取数据,然后处理该行并通过输出队列或文件锁输出到文件。

你们能给我一些建议吗?对此,我真的非常感激。

提前致谢!

4

2 回答 2

3

我会选择第一个选项...从小块文件中读取数据通常比一次读取整个文件要慢(取决于文件缓存/缓冲/预读等)。

您可能还需要考虑一种创建输出文件的方法(从不同进程获取所有行,如果需要,可能按正确的顺序)。

于 2012-12-19T14:28:33.390 回答
1

Solution 1 makes sense.

This would also map nicely and simply to Java's Executor framework. Your main thread reads lines and submits each line to an Executor or ExecutorService.

It gets more complicated if you must keep order intact, though.

于 2012-12-19T14:37:27.863 回答