0

我在处理大文件和内存限制方面的经验非常少。请注意,我使用 Java 作为编程语言。

我必须找到文件大小为 15GB 的记录,然后将结果写入另一个文件。基本上它是一个搜索范围功能的实现。我的目标是将我范围内的记录写入结果文件,并用换行符分隔。也就是说,每条记录都应该放在单独的行上。此类查询的数量在 400-1000 左右。因此,每个查询都会导致写入许多位于其范围内的记录。

那么以下哪个是更快的方法?

1-一旦我开始获取查询范围记录,我就开始将它们连续写入文件?

2-我将我的记录存储在一些字符串中,并为找到的每条记录附加字符串,然后最后写它?

3- 使用字符串生成器连接每个查询的结果,然后在最后写入文件?但字符串生成器不支持换行。

4-制作我自己的数据结构?

5- 制作一个记录数组列表,然后在最后对其进行迭代以写入文件?

请让我知道哪种方法在 IO 和 MM 方面最快。

4

3 回答 3

4

操作系统级别的写缓冲非常有效。除非您有探查器数据表明存在问题,否则请选择 #1。

于 2011-11-30T07:13:30.037 回答
0

2 和 3 听起来都像是本土的缓冲实现。一个更简单、更有效的方法是做#1,但FileOutputStreamBufferedOutputStream.

如果您正在谈论大量记录,那么第 5 号可能不是一个好主意,因为您实际上可能会导致交换(这只会损害性能)。

于 2011-11-30T07:25:08.127 回答
0

我认为 Map and Reduce 最适合这个。我没有为此工作,但参加了同样的会议,那个人为此使用了相同的例子。拆分文件并让多个程序运行相同的搜索查询 - 映射,然后一旦搜索完成,所有答案都可以使用 Reduce 合并为一个

于 2011-11-30T07:54:38.230 回答