我对处理大文件和内存约束的经验非常少。 请注意,我使用Java作为编程语言。
我必须找到文件大小为15GB的记录,然后将结果写入另一个文件。基本上它是一个搜索范围功能实现。我的目标是将位于我的范围内的记录写入由新行分隔的结果文件。那就是每条记录应该分开来。此类查询的数量约为400-1000。因此,每个查询都会导致写入其范围内的许多记录。
以下哪项是更快的方法?
1-一旦我开始获取查询范围记录,我就开始在文件中连续编写它们吗?
2-我将我的记录存储在一些字符串中,并为每个找到的记录追加字符串,然后最后写下它?
3-使用字符串构建器连接每个查询的结果,然后在结尾写入文件?但字符串生成器不支持新行。
4-制作我自己的数据结构?
5-制作一个记录数组列表,然后在最后迭代它以写入文件?
请告诉我哪种方法在IO和MM方面都是最快的。
答案 0 :(得分:4)
OS级写缓冲非常有效。除非您有分析器数据表明存在问题,否则请使用#1。
答案 1 :(得分:0)
2和3都听起来像是本土的缓冲实现。一种更简单,更有效的方法是做#1,但用FileOutputStream
包裹BufferedOutputStream
。
如果您正在谈论大量记录,那么数字5可能是一个坏主意,因为您实际上可能会导致交换(这只会影响性能)。
答案 2 :(得分:0)
我认为Map和Reduce最适合这个。我没有在这方面工作,但参加了一个同样的会议,这个人使用相同的例子。拆分文件,让多个程序运行相同的搜索查询 - Map,然后搜索完成后,所有答案都可以使用Reduce组合成一个