Welche Technologien? SAX, DOM, XMLBeans, Castor ganz was anderes

Loki2

Erfahrenes Mitglied
Hallo,

ich habe schon mal eine Frage zu meinem Problem gestellt allerdings etwas spezieller und so richtig glücklich bin ich damit leider nicht geworden deswegen jetzt noch mal eine ganz globale Frage zu meinem Problem.

Problembeschreibung: Ich muss große XML Dateien ( > 12MB ) verarbeiten. Unter anderem muss ich aus bestimmten Bereichen der Datei, nicht aus der ganzen Datei, eine Baumstruktur erzeugen zu dem muss ich sehr viel in der Datei nach bestimmten Bereichen suchen um diese auf verschiedene Weise zu verarbeiten (anzeigen, ändern usw.).

Dazu jetzt zwei zentrale Fragen:

1. Welche Techniken solte ich dafür am besten einsetzen damit das ganze auch in erträglicher Geschwindigkeit abläuft.

2. Ist es sinnvoll das Schema mit einzusetzen (außer zum validieren) also als JAR (Castor, XMLBeans) mit ins Projekt hängen oder brauch ich das nicht unbedingt? Kann ich damit dann vielleicht gezielter auf bestimmte Bereiche und Informationen zu greifen?

Ich habe schon einiges an dem Projekt getan. Mein größtes Problem ist eigentlich das ich immer noch keine vernünftige Möglichkeit gefunden habe die Datei vernünftig zu durchsuchen um die Informationen zu bekommen die ich wirklich benötige.
Die XmlBeans bieten zwar einen Cursor an und auch XQuery aber das ist sehr langsam und liefert mir auch nicht unbedingt das was ich benötige.

Hier gibt es noch ein paar weitere Informationen zu meinem Problem.

Ich hoffe ihr könnt mir irgendwie ein klein bisschen weiter helfen. Ich brauch glaub ich nur den richtigen Anstoß in die richtige Richtung damit ich weiss das ich nicht völlig auf dem Holzweg bin mit den Techniken die ich verwende und mit dem was ich tue.

Vielen Dank schon mal.

Gruß und so

Loki2
 
Ich kenne nur SAX und DOM und ich weiß, dass man bei großen Dateien eigtl. besser SAX einsetzen sollte, da man damit nicht das gesamte XML File als Baum einliest sondern nur die Daten, die einen interessieren "herausangelt". Die anderen beiden Techniken kenne ich nicht. JDOM ist afaik für XML Dateien dieser Größe ungeeignet.

Ob es etwas eleganteres als SAX gibt, weiß ich nicht.

Gruß Stefan
 
Hi,

vielen Dank schon mal für diese Antwort.

Mit SAX kann ich aber doch nicht wirklich Daten ändern oder?
Das mit dem herausangeln der Daten klappt leider nur bedingt, siehe hier. Da komme ich nicht wirklich weiter mit...

Gruß und so
Loki2
 
N'Abend,

schau dir doch mal dom4j an. Mit dem hatte ich eigentlich noch nie Probleme bei großen Dateien (je nachdem was du unter >12 MB verstehst ;) )
Ansonsten könntest du natürlich noch auf eine XML-DB zurückgreifen, aber ich glaube das steht hier nicht zur Debatte.

Gruß
THMD
 
Hallo,

entscheidend bei Deiner Problemstellung ist aus meiner Sicht zum einen die die zu verarbeitende Datenmenge (> 12 MB). Zum anderen möchtest Du das Dokument ändern können. DOM ist, soweit ich weiss, die einzige Möglichkeit, auch Updates auf das Dokument durchführen zu können. Dafür muss das komlette Dokument aber erst in den Speicher eingelesen werden. Der tatsächliche Speicherbedarf liegt dann auch noch bei einem Mehrfachen der Dokumentengröße. Vorteil ist, dass du wahlfrei auf die Elemente zugreifen kannst. SAX hingegen verarbeitet das Dokument nur sequentiell. Das Ändern von Daten ist nicht möglich. Mit JDOM habe ich keine Erfahrungen, aber ich denke, dass das für DOM gesagte grundsätzlich auch für JDOM gilt. Ist halt nur ein Bisschen "Java-freundlicher".

Mit Castor habe ich bisher gute Erfahrungen gemacht, aber ich habe auch noch kein Castor-Objekt mit 12 MB gefüttert. Das würde mich auch interessieren... Wenn Du ein Schema für Dein Dokument hast, kannst Du den Castor generieren. Wie die Performance dann beim Marshall bzw. Unmarshall aussieht, weiss ich nicht.

Eine weitere Möglichkeit, dei in die gleiche Richtung wie Castor zielt (XML auf Java-Objekte mappen), ist JAXB (Java Architecture for XML Binding).

Gruss,
Harm
 
Hallo!

Mal ne kurze Zwischenfrage... gibts eigentlich einen speziellen Grund weshalb du diese Daten in einem XML File ablegst? Greift da noch irgend ein anderes Programm drauf zu dass NICHT in Java geschrieben ist? Wenn nein, habt ihr die Verwendung einer kleinen in Memory-DB wie Apache Derby oder HSQL DB in Betracht gezogen? Ich denke eine solche Lösung könnte bei diesem Umständen weitaus besser performen als eine XML basierte Variante... und falls doch eine nicht Java Anwendung auf die Daten zugreifen muss, so kann man diese immer noch nach XML Exportieren.

Gruss Tom
 
Hallo,

vielen Dank erstmal für die Antworten und Lösungsansätze.

@Tom: Es gibt keine andere Möglichkeit außer die Daten aus einer XML-Datei zu bekommen. Die Daten die in der Datei stehen werden aus Daten in einer Datenbank erzeugt auf die man selbst aber nicht unbedingt Zugriff hat, außerdem wird diese Datei noch an vielen anderen Stellen weiterverarbeitet so dass ein Verzicht darauf nicht möglich ist.

Gruß und so
Loki2
 
Zurück