많은 양의 데이터를 생성하고 쓰기 위해 대기열에 넣는 프로그램이 있습니다. 그러나 문제는 현재 데이터를 생성하는 것보다 빠릅니다 (메모리를 최대로하고 느려지 기 시작합니다). 나중에 파일을 구문 분석 할 계획이므로 순서는 중요하지 않습니다.메모리에서 파일로 대량의 데이터를 쓰는 가장 빠른 방법은 무엇입니까?
나는 약간 주위를 둘러 보았고 현재 프로세스를 설계하는 데 도움이되는 몇 가지 질문을 발견했다. (그러나 여전히 느리다). 여기 내 코드는 지금까지의 : 나는 어쩌면이 잘못된 (아마도 하드웨어 문제 나 EC2를 사용하고 같은)을 평가하지만,있는 매우 빠르게 큐 결과가 덤프 있도록
//...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();
내가 프로그래밍에 아주 새로운 해요 내 접근 방식이 괜찮 으면 어떻게 든 그것을 향상시킬 수 있습니까? 순서가 중요하지 않으므로 여러 드라이브의 여러 파일에 쓰기가 더 적합합니까? 스레딩이 더 빨라지는지, 등등. 최선의 접근 방법과 어떤 제안이 좋을지 확신 할 수 없습니다. 내 목표는 대기열의 결과를 저장하는 것입니다 (유감스럽게도/dev/null로 출력하지 않습니다 :-) 내 응용 프로그램에 대한 가능한 한 메모리 사용량을 낮게 유지합니다 (100 % 확신 할 수는 없지만 대기열이 15gig까지 채우므로 15gig + 파일로 가정).
Fastest way to write huge data in text file Java (실현 내가 버퍼 사용해야 작가) Concurrent file write in Java on Windows이
CPU 속도> 하드 드라이브 속도를 이해하므로 쓰기가 항상 처리되지 않을 수 있으므로 hd 속도를 처리하는 방법을 알아 내려고 노력하고 있습니다. –
많은 것은 목에 무엇이 있는지에 달려 있습니다. 나는 당신이 최대의 디스크 IO (당신의 질문으로 보입니다)의 대역폭을 최대한 활용한다면 당신은 당신의 계정을 최대한 (비용면에서) 최대화 할 수 있다고 생각합니다. 필자는 멀티 쓰레딩이 많은 도움이되지 않을 것이라고 동의합니다. –
대략적인 계산에 따르면 15GB는 매번 4 달러를 소비하게됩니다. –