# XML-schreiben aus ResultSet dauert zu lange



## KartoffelKiffer (20. Nov 2006)

Hallo,

ich benutze den DOM-Parser um mir ein XML-Dokument aus einem ResultSet zu schreiben.

Zuerst generiere ich einen DocumentBuilder, der an das Document ein MainElement und mehrere ChildElemente anhängt. In das ChildElement werden dann die Daten aus einem ResultSet geschrieben. In etwa so zu verstehen:


```
<MainElement>
   <ChildElement>
      <Spalte1>Inhalt1.1 / Spalte 1, Zeile 1</Spalte1>
      <Spalte2>Inhalt1.2 / Spalte 2, Zeile 1</Spalte2>
   </ChildElement>
   <ChildElement>
      <Spalte1>Inhalt2.1 / Spalte 1, Zeile 2</Spalte1>
      <Spalte2>Inhalt2.2 / Spalte 2, Zeile 2</Spalte2>
   </ChildElement>
</MainElement>
```

Wobei dann Spalte1 und Spalte2 die columnNames aus dem ResultSet sind.

```
Element node = doc.createElement(columnName);
```

Dieser Knoten wird in einer Schleife durchlaufen, die solange das Document vollschreibt, bis auch der letzte Datensatz aus dem ResultSet abgearbeitet ist.

Ist also ein neuer Datensatz in dem ResultSet angebrochen, schreibt er auch ein neues ChildElement, sodass ich später ein MainElement habe, viele ChildElemente und noch mehr SpaltenElemente mit ihrem Inhalt.

Jetzt habe ich nun ein ResultSet, das 62.000 Datensätze beinhaltet. Die ganze Prozedur dauert exakte eine Minute und 24 Sekunden. Für einen Anwender, der "nur mal eben" etwas sehen möchte, ist das natürlich zuviel des Guten. Das Befüllen des ResultSet´ dauert nur wenige Millisekunden, daran liegt es also nicht (ist eine Abfrage aus der Datenbank).

Das Document, welches vom DOM generiert wird, schreibe ich lediglich mittels BufferedWriter in ein File. Das File im Endeffekt ist dann etwas über 5MB groß, und umfasst ca. 250.000 Zeilen.

Was dauert in meinem Programm denn nun solange? Das Erstellen des Dokumentes (Document, von DOM generiert), mit all seinen Elementen, oder das Schreiben dieses Documents in eine Datei?

Hat jemand von Euch schonmal mit einem ähnlichen Datenaufkommen gerarbeitet, und weiß evtl. wie es besser zu handlen wäre? Ich bin über jegliche Hilfe sehr dankbar.




Mfg Tom


----------



## KartoffelKiffer (20. Nov 2006)

//Edit: Um mein Document aus dem DocumentBuilder zu erhalten, habe ich dieses Tutorial genutzt. Das Document, wie es entsteht, schreibe ich wie erwähnt per BufferedWriter in eine Datei.


----------



## Roar (20. Nov 2006)

:autsch: wie schreibst du das dokument? schreibst du selber oder benutzt du die dafür vorgesehenen klassen? :roll:
schau dir auch mal stax an.


----------



## KartoffelKiffer (20. Nov 2006)

Siehe ein Beitrag über deinem, direkt editieren konnte ich leider nicht.



Mfg Tom


----------



## Roar (20. Nov 2006)

benutz mal javax.xml.transform.Transformer, oder direkt stax, weil erst aus dem ganzen rülpz nen dom generieren und dann schreiben is auch bissl homo.


----------



## KartoffelKiffer (20. Nov 2006)

Du gehst also auch da von aus, dass der Knackpunkt bei der Sache im Generieren des XML-Documents liegt? Das Schreiben von 250.000 Zeilen mit im Schnitt etwa 30 Zeichen pro Zeile nimmt nicht soviel Zeit in Anspruch, dass es sich in meinem Programm bemerkbar macht?



Mfg Tom


----------



## Roar (20. Nov 2006)

ich weiß nich wo dein programm soviel zeit verbraucht, schau doch nach :roll:


----------



## KartoffelKiffer (20. Nov 2006)

Hallo,

habe heute ein wenig mit verschiedenen Schreibverfahren durchgetestet. Da tut sich also sogut wie garnichts. Es muss also wirklich am Verfahren liegen, wie ich mein Document erstelle (DOM).

Ist vom Prinzip her das Erstellen meines XML´s nicht am Schnellsten mit dem DOM? Ich erstelle ein MainElement, ein ChildElement, hänge an was ich benötige, erstelle ein neues ChildElement usw. Klingt für mich (in dem Gebiet völliger Laie) im Prinzip eigentlich sehr gut. Wären andere Methoden evtl. doch sinnvoller für mein Vorhaben? Wenn DOM jetzt tatsächlich das Fixeste für die Prozedur ist, muss sich der Anwender halt mit diesen Wartezeiten zufrieden geben; ich kann aber auch sagen, dass ich alles versucht hätte.



Mfg Tom


----------



## Roar (20. Nov 2006)

Anonymous hat gesagt.:
			
		

> Ist vom Prinzip her das Erstellen meines XML´s nicht am Schnellsten mit dem DOM?


nö da werden tausende von objekten erzeugt und zusammengestrickt...


> ich kann aber auch sagen, dass ich alles versucht hätte.


stax hast du vermutlich noch immer nicht versucht :?: :roll:


----------



## DP (20. Nov 2006)

wenn dann sax


----------



## KartoffelKiffer (23. Nov 2006)

Hallo,

vielen Dank für die Hilfe; SAX ist exakt das Richtige für den Job. Ist zig mal so schnell fertig, wie zuvor mit dem DOM.



Mfg Tom


----------

