Ich habe ein Programm, das viele Daten generiert und es in eine Warteschlange zum Schreiben stellt, aber das Problem ist, dass es Daten schneller generiert, als ich gerade schreibe (wodurch es zu maximalem Speicher kommt und zu verlangsamen beginnt). Reihenfolge spielt keine Rolle, da ich die Datei später analysieren möchte.Was ist der schnellste Weg, um eine große Menge an Daten aus dem Speicher in eine Datei zu schreiben?
Ich sah mich ein bisschen um und fand ein paar Fragen, die mir halfen meinen aktuellen Prozess zu entwerfen (aber ich finde es immer noch langsam). Hier ist mein Code so weit:
//...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();
ich Programmierung ziemlich neu bin, damit ich vielleicht diese falsche Beurteilung (vielleicht ein Hardware-Problem, wie ich bin mit EC2), aber ist es eine sehr schnell die Warteschlange Ergebnisse Dump in eine Datei oder wenn mein Ansatz in Ordnung ist, kann ich es irgendwie verbessern? Da die Reihenfolge keine Rolle spielt, ist es sinnvoller, in mehrere Dateien auf mehreren Laufwerken zu schreiben? Will Threading es schneller machen? Usw. Ich bin mir nicht genau sicher, ob die beste Herangehensweise und irgendwelche Vorschläge großartig wären. Mein Ziel ist es, die Ergebnisse der Warteschlange zu speichern (sorry keine Ausgabe an/dev/null :-) und Speicherverbrauch für meine App so niedrig wie möglich halten (Ich bin nicht 100% sicher, aber die Warteschlange füllt 15gig, also ich gehe davon aus, dass es eine 15gig + Datei sein wird).
Fastest way to write huge data in text file Java (realisierte soll ich gepuffert Writer) Concurrent file write in Java on Windows (mich sehen, dass vielleicht Multi-Threading schreibt war keine gute Idee)
Ich verstehe CPU-Geschwindigkeit> Festplatte Geschwindigkeit, so Schreiben wird wahrscheinlich immer zu Verarbeitung verlieren, ich versuche nur herauszufinden, wie man hd Geschwindigkeit hilft, ein wenig näher an die Handhabung. –
Viel hängt davon ab, was Ihr Flaschenhals ist. Ich vermute, wenn Sie die Bandbreite Ihrer Disk-IO (die Ihre Frage zu sein scheint) ausschöpfen können Sie auch Ihr Konto (in Bezug auf die Kosten) Max. Ich stimme zu multi-threading der Schreibvorgang wird nicht viel helfen. –
Eine grobe Berechnung ist, dass 15 GB jedes Mal $ 4 kostet. –