Wie kann ich große Datenmengen von einer Datenbank nach XML speichern (Speicherproblem)?

8

Zuerst hatte ich ein Problem damit, die Daten von der Datenbank zu bekommen, es hat zu viel Speicher gekostet und ist fehlgeschlagen. Ich habe -Xmx1500M eingestellt und benutze Scrolling ResultSet, so dass man sich darum gekümmert hat. Jetzt muss ich aus den Daten ein XML machen, aber ich kann es nicht in eine Datei schreiben. Im Moment mache ich es so:

%Vor%

und es funktioniert; Ich bekomme 12 100 MB Dateien. Nun, was ich tun möchte, ist, all diese Daten in einer Datei zu haben (die ich dann komprimiere), aber wenn ich nur den if Teil entferne, geht mir der Speicher aus. Ich überlegte, ob ich versuchen sollte, in eine Datei zu schreiben, sie zu schließen und dann zu öffnen, aber das würde mich nicht sehr interessieren, da ich die Datei in den Speicher laden müsste, wenn ich sie öffne.

    
Andrija 24.05.2010, 07:01
quelle

4 Antworten

3

Warum nicht alle Daten in eine Datei schreiben und die Datei mit der Option "append" öffnen? Sie müssen nicht alle Daten in der Datei einlesen, wenn Sie nur darauf schreiben wollen.

Dies könnte jedoch eine bessere Lösung sein:

%Vor%

Der BufferedOutputStream puffert die Daten vor dem Drucken und Sie können die Puffergröße im Konstruktor angeben, wenn der Standardwert nicht Ihren Anforderungen entspricht. Details finden Sie in der Java-API: Ссылка .

    
Daniel Abrahamsson 24.05.2010, 07:12
quelle
3

Sie sammeln die komplette Datei im Speicher: Sie sollten die Daten direkt in die Datei schreiben.

Darüber hinaus sollten Sie eine geeignete XML-API verwenden, anstatt XML als Textdatei zu erstellen. Ein kurzes Tutorial ist hier verfügbar.

    
quelle
1

Ich habe diesen Anwendungsfall noch nie gesehen, aber ich bin mir ziemlich sicher, dass vtd-xml XMLs mit einer Größe von mehr als 1 GB unterstützt. Es lohnt sich, @ Ссылка

zu besuchen

Sie können auch alle folgenden Artikelserien @ Ссылка verfolgen "Ausgabe großer XML-Dokumente"

    
Aravind R. Yarram 24.05.2010 08:12
quelle
0

Ok, also wird der Code neu geschrieben und ich werde die ganze Operation einschließen:

%Vor%

Aber generateXML-Teil braucht immer noch viel Speicher (wenn ich richtig rate, dauert es Stück für Stück so viel wie es kann) und ich sehe nicht, wie ich es optimieren könnte (verwenden Sie eine alternative Möglichkeit, die writer.print-Funktion)?

    
Andrija 25.05.2010 09:10
quelle

Tags und Links