Tengo un programa que genera una gran cantidad de datos y los pone en una cola para escribir, pero el problema es que genera datos más rápido de lo que estoy escribiendo actualmente (lo que hace que la memoria sea máxima y empiece a ralentizarse). El orden no importa ya que planeo analizar el archivo más tarde.¿Cuál es la forma más rápida de escribir una gran cantidad de datos de la memoria en un archivo?
Miré un poco y encontré algunas preguntas que me ayudaron a diseñar mi proceso actual (pero todavía lo encuentro lento). Aquí está mi código hasta ahora:
//...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();
estoy bastante nuevo en la programación, así que tal vez la evaluación de este mal (tal vez un problema de hardware ya que estoy usando EC2), pero hay una volcar muy rápidamente los resultados de cola en un archivo o si mi enfoque está bien, ¿puedo mejorarlo de alguna manera? Como el orden no importa, ¿tiene más sentido escribir en múltiples archivos en múltiples unidades? ¿El enhebrado lo hará más rápido?, Etc. No estoy seguro de que el mejor enfoque y cualquier sugerencia sean geniales. Mi objetivo es guardar los resultados de la cola (lo siento, no enviar a/dev/null :-) y mantener el consumo de memoria lo más bajo posible para mi aplicación (no estoy 100% seguro, pero la cola llena 15gig, por lo que estoy asumiendo que será un archivo de 15gig +).
Fastest way to write huge data in text file Java (escritor se dio cuenta de que debo usar tamponada) Concurrent file write in Java on Windows (me hizo ver que escribe tal multi-threading no fue una gran idea)
Entiendo la velocidad de la CPU> la velocidad del disco duro, por lo que la escritura probablemente siempre perderá en el procesamiento, solo estoy tratando de descubrir cómo ayudar a que la velocidad hd se acerque un poco más a su manejo. –
Mucho depende de lo que sea el cuello de su botella. Sospecho que si maximizas el ancho de banda de tu disco IO (que parece ser tu pregunta) puedes maximizar tu cuenta también (en términos de costo) Estoy de acuerdo en que la escritura múltiple no ayudará mucho. –
Un cálculo aproximado es que 15 GB le costará $ 4 cada vez. –