我有一个程序会生成大量数据,并将其放入队列中进行写入。但问题在于生成数据的速度比我当前的写入速度要快,这导致了内存占用最大并开始减缓。顺序无关紧要,因为我计划稍后解析文件。
我搜索了一下,发现了一些问题,这些问题帮助我设计了我的当前进程(但我仍然觉得它很慢)。以下是我的目前代码:
我在编程方面还是新手,所以可能会评估错误(也许是硬件问题,因为我正在使用EC2),但是否有一种非常快速的方法可以将队列结果转储到文件中?如果我的方法可行,我能否通过某种方式改进它?由于顺序无关紧要,是否更有意义将其写入多个驱动器上的多个文件?线程会使它更快吗?等等...我不确定最佳方法是什么,任何建议都将非常好。我的目标是保存队列的结果(很抱歉不能输出到/dev/null :-)),并尽可能保持应用程序的内存消耗量低(我不确定,但队列填充了15Gig,所以我假设它将是一个15Gig+文件)。
参考以下链接: Java中写入大量数据到文本文件的最快方法 (意识到我应该使用缓冲写入器) Java在Windows上并发写入文件 (让我认识到多线程写入可能不是一个好主意)
我搜索了一下,发现了一些问题,这些问题帮助我设计了我的当前进程(但我仍然觉得它很慢)。以下是我的目前代码:
//...background multi-threaded process keeps building the queue..
FileWriter writer = new FileWriter("foo.txt",true);
BufferedWriter bufferWritter = new BufferedWriter(writer);
while(!queue_of_stuff_to_write.isEmpty()) {
String data = solutions.poll().data;
bufferWritter.newLine();
bufferWritter.write(data);
}
bufferWritter.close();
我在编程方面还是新手,所以可能会评估错误(也许是硬件问题,因为我正在使用EC2),但是否有一种非常快速的方法可以将队列结果转储到文件中?如果我的方法可行,我能否通过某种方式改进它?由于顺序无关紧要,是否更有意义将其写入多个驱动器上的多个文件?线程会使它更快吗?等等...我不确定最佳方法是什么,任何建议都将非常好。我的目标是保存队列的结果(很抱歉不能输出到/dev/null :-)),并尽可能保持应用程序的内存消耗量低(我不确定,但队列填充了15Gig,所以我假设它将是一个15Gig+文件)。
参考以下链接: Java中写入大量数据到文本文件的最快方法 (意识到我应该使用缓冲写入器) Java在Windows上并发写入文件 (让我认识到多线程写入可能不是一个好主意)
dd
。或者您可以使用NIO以大块大小(例如32-256KB)进行操作。 - Peter Lawrey