# Größe eines JDOM-Dokuments



## Kumarunster (20. Jul 2005)

Hallo an Alle!
Hat schon jemand die Erfahrung mit den großen XML-Dateien gehabt?
Wie groß kann denn ein JDOM-Dokument wirklich werden?

Diese Frage hat folgenden Hintergrund:

Ich arbeite an einem DB-gestützten Programm, welches XML-Dateien produzieren soll.
Diese XML-Dateien dürfen um die 50MB (!) groß werden.

Nun habe ich einen Test gemacht. In der DB waren 1 000 000 Datensätze vorhanden. Daraus habe ich die XML-Datei mit JDOM erstellt. Alle 5 000 Sätze habe ich die Datei gespeichert. Nun, gekommen ist das Testprogramm nur bis 40 000. (Letzte Speicherung). Dann kam "OutofMemory-Error". Ich habe auf meinem Rechner 1 GB Arbeitsspeicher. Die XML-Datei ist 10MB groß geworden.


Gibt es die Möglichkeit, dass JDOM seinen Baum im Speicher in die Auslagerungsdatei swappt?

Ich würde gerne bei JDOM bleiben, weil viele andere Teilprojekte bei uns JDOM einsetzen und nicht zuletzt brauche ich die XPath-Unterstützung...


----------



## Bleiglanz (20. Jul 2005)

vergiss es!

40.000 records => 10MB (BTW: wenn du das zippst, sinds nur noch ein paar hundert kilobytes)

was glaubst du wohl wie gross das 1000000 Datensätze-File werden wird? wohl so um die 250 MB, so eine datei ist etwas unhandlich...

und im speicher wird das noch VIEL mehr wenn du (J)-DOM einsetzt!!

das mit dem swappen kannst du auch vergessen, oder willst du tagelang warten?

=> verwende eine xml datenbank zusammen mit XQuery oder eine normales RDBMS mit xml-funktionalität (Oracle, DB2, usw.)

Problem dürfte XPath sein, das funktioniert eigentlich nur, wenn der vollständige dom-baum im speicher ist... , aber wenn ihr das eh aus einer Datenbank holt, dann wär der Zugriff über SQL "direkt an der Quelle" wohl einfacher; wozu erst in XML und dann nochmal abfragen??


----------



## Guest (20. Jul 2005)

Du warst aber schnell!
Danke!

mit den 1 000 000 Sätzen war es nur ein Test, um zu sehen, wie weit ich komme
Tatsächlich können aber bis zu 100 000 Sätze in der Realität vorkommen.
Bin halt bis 40 000 gekommen...

Als RDBMS verwenden wir DB2, Oracle und MS-SQL-Server.

Die Struktur der Tabellen, aus denen ich die XMLs erzeuge ist etwas andere als die, die in dem XML-Dok ist.

Beim Erstellen benutze ich eine leere XML-Vorlage, in der dann die bestimmten Elemente mit XPath selektiert werden. An diese Elemente werden dann die neu erzeugten Elemente mit den Daten aus der DB drangehängt.

Am Ende der Erstellung muss die Datei gegen ein XML-Schema validiert werden.

Wie gesagt, die XML-Datei darf 50 MB groß werden!

Die Laufzeit bei der Erstellung der großen Datei ist erstmal unwichtig. Es kann auch tagelang laufen, ist kein Problem. Die Datei wird sowieso nur 2 Mal im Jahr erstellt... Deswegen auch die Frage mit dem swap. Geht das nicht grundsätzlich?
Oder gibt es irgendeine Möglcihkeit?


----------



## Kumarunster (20. Jul 2005)

hab vergessen mein Nik hinzuschreiben, tut mir leid  :?


----------



## Bleiglanz (20. Jul 2005)

kannst du nicht aus den Datenbanken die entsprechenden XML Fragmente als Strings rausholen (FOR XML usw.)

und dann einfach diese Strings literal in der richtigen Reihenfolge in einen FileWriter rausschreiben

-> geht natürlich nur, wenn die XPath ausdrücke nicht zu komplex sind...

(diese Datei dann - wenn sie fertig ist - validieren, könnte mit SAX ja hinhauen)

zum Swap: das hat ja erstmal nichts mit Java zu tun, setzt einfach beim Start deines Programms mit Xmx den Heap auf einen riesigen Wert, könnte aber sein - je nach OS - dass bei 2GB schluss ist?!

mach mal deinen Test und lass dir den Speicherverbrauch ausgeben, würde mich mal interessieren, wie "aufblähend" JDOM auf Dokumente wirkt 

Swappen sollte ja dann das Betriebssystem, das ist aber dann der Kriechgang...


----------



## Kumarunster (20. Jul 2005)

werde mal probieren.
die derzeitigen VM-Parametre sind bei mir so eingestellt: -Xms64m -Xmx512m

ist eigentlich groß genug.... nur für jdom nicht. :x


----------



## Kumarunster (21. Jul 2005)

Hallo!
hab heute Mittag den Test durchgeführt. (gestern hatte keine Zeit mehr)

also.

Die VM-Parameter habe ich so eingestellt: -Xms512m -Xmx1024m (einfach mal ausprobieren)
und die 1 000 000 Sätze in die XML-Datei reingeschrieben. Und das mit Erfolg!!!!!  :lol: 

So, und jetzt Mal die Daten: die gesamt CPU-Laufzeit: 2,5 Stunden, wobei die Erstellung selber ungefähr 1 Minute gedauert hat, der Rest war Schreiben in die Datei. Maximale Speicherverbrauch war 753M, Virtueller Spiecherverbrauch 908M. Es waren 408000 Seitenfehler aufgetreten.

Und jetzt das Lustigste: die Datei auf dem Datenträger ist 117 Mb geworden (bemerkung: unformatiert, d.h. kein Pretty-XML-Format). Gezippt aber nur noch 8 Mb!. 8) 

und Fazit des Ganzen: gib dem JDOM genug Speicher, und er macht das schon!.... :wink:

Bleiglanz, danke für den Tipp!

Ciao   :lol:


----------

