Große Datenmengen effizient in CSV File speichern

Ethernut

Mitglied
Hallo Forumsmitglieder,

ich hänge gerade an einem Problem beim speichern von großen Daten. Auf stackoverflow.com habe ich das hier gefunden:

http://stackoverflow.com/questions/1062113/fastest-way-to-write-huge-data-in-text-file-java

sowas ähnliches brauche ich auch. Ich muss kwasi aus einer Liste mit ungefär der gleichen Größe wie die erstellte und durchaus auch noch größer. Was ist der effizienteste Weg, so schnell wie möglich solche großen Datenmengen zu speichern? Auf meinem Rechner geht es recht schnell, aber wenn dieses Program auf einem etwas langsamenren Rechner laufen soll (und das soll es auch), dann funktioniert das nicht etwas langsamer.

Gibt es eine bessere Variante als die im stackoverflow thread? Wenn ja, wäre ich für jede Hilfe sehr dankbar.

glg Ethernut
 

Joose

Top Contributor
Ich muss kwasi aus einer Liste mit ungefär der gleichen Größe wie die erstellte und durchaus auch noch größer.

Diesen Satz bitte in einer verständlichen Variante nochmal ;)

Was ist der effizienteste Weg, so schnell wie möglich solche großen Datenmengen zu speichern? Auf meinem Rechner geht es recht schnell, aber wenn dieses Program auf einem etwas langsamenren Rechner laufen soll (und das soll es auch), dann funktioniert das nicht etwas langsamer.

Die beste Variante ist es mehrere Zeilen zu Buffern und dann immer wieder den Buffer in die Datei zu schreiben (wurde im StackOverflow Thread auch behandelt).
Dadurch verringert sich die Anzahl der Zugriffe auf die Festplatte.

EDIT: Je nachdem wie deine genaue Anforderung ist ->
Hast du deine Liste schon vollständig im Speicher oder liest du diese Liste von einem File oder einer Datenbank ein, verarbeitest die Daten etwas und schreibst die Liste dann wieder in ein neues File raus?
Threads könnten hier ebenfalls etwas Performance bringen, ein Thread liest die Daten, mehrere verarbeiten die Daten, ein weiterer schreibt die Daten gebuffered in ein File.
 

Ethernut

Mitglied
Hallo Joose,

vielen lieben Dank für Deine schnelle Antwort ;)

Diesen Satz bitte in einer verständlichen Variante nochmal ;)
Im Thread wurde eine Liste herangezogen. Zum Testen für die Idee reicht die eigentlich aus. Der Code soll aber dynamisch sein. Also auch für (deutlich) größere Listen/Arrays eingesetzt werden können.

Die beste Variante ist es mehrere Zeilen zu Buffern und dann immer wieder den Buffer in die Datei zu schreiben (wurde im StackOverflow Thread auch behandelt).
Dadurch verringert sich die Anzahl der Zugriffe auf die Festplatte.
Ok, probiere ich gleich aus. Wenn das die schnellste ist, geht eh nicht mehr ;)

EDIT: Je nachdem wie deine genaue Anforderung ist ->
Hast du deine Liste schon vollständig im Speicher oder liest du diese Liste von einem File oder einer Datenbank ein, verarbeitest die Daten etwas und schreibst die Liste dann wieder in ein neues File raus?
Threads könnten hier ebenfalls etwas Performance bringen, ein Thread liest die Daten, mehrere verarbeiten die Daten, ein weiterer schreibt die Daten gebuffered in ein File.
Um die Geschwindigkeit zu testen erstelle ich ein Array wie im Thread beschrieben. Aber tatsächlich wir der Methode ein berechnetes Array übergeben, dass es möglichste effizient speichern soll.
 

Joose

Top Contributor
Ok, probiere ich gleich aus. Wenn das die schnellste ist, geht eh nicht mehr ;)

PS: meinst Du dieses writeBuffered(records,8192); ??

Buffered Streams verwenden :)
BufferedWriter zum Beispiel

Um die Geschwindigkeit zu testen erstelle ich ein Array wie im Thread beschrieben. Aber tatsächlich wir der Methode ein berechnetes Array übergeben, dass es möglichste effizient speichern soll.

Ok, sprich es wird schon das fix fertige Array übergeben und es muss nur noch ins File geschrieben werden. Da lässt sich nichts mehr optimieren außer eben Buffered Streams zu verwenden.

Eine andere Überlegung wäre eben (wie oben schon angesprochen) der Umbau auf einen Multithreaded Workflow um ein paralleles lesen, verarbeiten und schreiben zu ermöglichen. Aber keine Ahnung ob der Aufwand den Nutzen lohnt.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
S Best Practice MVC und große Datenmengen aus einer mySQL - Datenbank Java Basics - Anfänger-Themen 24
A große errechnete datenmengen sofort in datei schreiben? Java Basics - Anfänger-Themen 6
S Arbeitsfeld in gleich große Bereiche einteilen Java Basics - Anfänger-Themen 2
G Best Practice Wie große "Tabellen" effizient durchsuchen und Daten händeln? Java Basics - Anfänger-Themen 15
C Große Zahlen vergleichen Java Basics - Anfänger-Themen 19
S 4 große Textdateien zu einer Mergen Java Basics - Anfänger-Themen 5
K Große Datenliste Java Basics - Anfänger-Themen 2
1 Extrem große Variable Java Basics - Anfänger-Themen 1
M Mergesort Aufgabe große Probleme Java Basics - Anfänger-Themen 9
P Schneller Quadratzahltest für beliebig große natürliche Zahlen Java Basics - Anfänger-Themen 2
T Scanner für große Textdatei Java Basics - Anfänger-Themen 11
N Input/Output Große Dateien schnell Speichern/auslesen Java Basics - Anfänger-Themen 16
B große jpeg verarbeiten Java Basics - Anfänger-Themen 8
K Große Gleitkommazahlen runden Java Basics - Anfänger-Themen 8
X Compiler-Fehler javac - 08 eine zu große int? Java Basics - Anfänger-Themen 11
turmaline String teilen in gleich große strings Java Basics - Anfänger-Themen 15
F Große Potenzen berechnen Java Basics - Anfänger-Themen 6
J Große .txt einlesen - Idee? Java Basics - Anfänger-Themen 16
E Datentypen Große Zahl erzeugen Java Basics - Anfänger-Themen 5
P Kleines Projekt -> Große Überlegungen Java Basics - Anfänger-Themen 2
F Große Daten und große Array Java Basics - Anfänger-Themen 21
O Performant große Dateien durchsuchen Java Basics - Anfänger-Themen 8
J Große animierte Gif preloaden und solange mit einer nicht animierten ersetzen Java Basics - Anfänger-Themen 5
Povlsen84 Datentypen Große, sortierte, schnelle Datenstruktur Java Basics - Anfänger-Themen 9
H Große Projekte mit Java - Ausführbare Datei Java Basics - Anfänger-Themen 2
K Eclipse EMF und das große HÄ? Java Basics - Anfänger-Themen 5
T .split(";") nicht gleich große arrays werden erzeu Java Basics - Anfänger-Themen 2
G String aus Zahlen multiplizieren -> unendlich große ! Java Basics - Anfänger-Themen 13
M Spielt der Debugger bei java eine große Rolle Java Basics - Anfänger-Themen 3
C große Matrizen, Performance, (Pointer?) Java Basics - Anfänger-Themen 6
L JTextArea große setzen Java Basics - Anfänger-Themen 5
S große probleme mit java Java Basics - Anfänger-Themen 6
R große Datenmenge in Datei schreiben Java Basics - Anfänger-Themen 8
M FileOutputStream und zu große Zahlen! Java Basics - Anfänger-Themen 10
J Große *.Text Datei zum verschicken in viele kleine Java Basics - Anfänger-Themen 7
B Probleme große Strings zu schreiben Java Basics - Anfänger-Themen 2
S Große Text dateien einbinden Java Basics - Anfänger-Themen 3
R große Zahlen Java Basics - Anfänger-Themen 4
R Große Zahlen Java Basics - Anfänger-Themen 3
T Große Zahlen aufgesplittet in verketteter Liste speichern Java Basics - Anfänger-Themen 4
N Große Probleme mit StingBuffer und Array Java Basics - Anfänger-Themen 2
J Umgang mit großen Datenmengen Java Basics - Anfänger-Themen 9
B Effektive Implementierung für Darstellung großer Datenmengen in Jogl Java Basics - Anfänger-Themen 5
I Datenmengen in datensätze reduzieren Java Basics - Anfänger-Themen 7
K Wie kann man diesen Code schnell und effizient interpretieren (Man hat nur 4 Minuten) Java Basics - Anfänger-Themen 3
O equals Methode möglichst effizient Java Basics - Anfänger-Themen 13
J Input/Output Tilemap effizient speichern als Textdatei Java Basics - Anfänger-Themen 7
Z Wie Datei effizient auslesen? Java Basics - Anfänger-Themen 1
G Summe der Ziffern einer Zahl EFFIZIENT berechnen? Java Basics - Anfänger-Themen 18
G Eine ArrayList effizient sortieren Java Basics - Anfänger-Themen 5
M long Datentyp effizient mit Daten füllen Java Basics - Anfänger-Themen 2
Noar Datei effizient kopieren Java Basics - Anfänger-Themen 18

Ähnliche Java Themen

Neue Themen


Oben