On Fri, May 09, 2008 at 01:56:51PM +0200, Jens Puruckherr wrote:
Hallo,
einer kleinen armen Schnittstelle wird über die Jahre immer mehr Last aufgebürded. Mittlerweile bekommt Sie XMLs zum verdauen vorgesetzt, die schon mal an die 60MB gross sind. Mittels libxml und libxslt wird das Ganze unter Perl verarbeitet und in kleinen überschaubaren Häppchen an die Datenbank einer Web-Applikation verfüttert. Prinzipiell funktioniert das auch prima, allerdings der Speicherhunger der XSLT-Transformation wächst proportional zur Dateigrösse des XML und macht mir langsam Sorgen. Inkl. Footprint konsumiert der Prozess ein schlappes GB RAM.
Ich vermute mal, dass das XML folgenden Aufbau hat:
<container> <item>...</item> <item>...</item> ... </container>
Du kannst auf SAX umsteigen, wenn das erste item bearbeitet werden kann, ohne dass die folgenden items gelesen werden müssen. Bei DOM (XSLT) wird in der Regeln der gesamte XMl-Baum eingelesen. Das ist aber vermutlich nicht nötig. Du kannst sicherlich ein item nach dem anderen bearbeiten.
Ich würde dabei noch von Perl zu einer andere P-Scriptsprache umsteigen ...
Hier ein SAX-Beispiel, bei dem TreeBuilder der eigentlicher Parser ist. http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/534109
Für Python gibt es in aktuellen Version etree (für andere als externes Paket). Das ließt zwar auch den gesamten XML-Baum, wird aber sicherlich nicht so viel Hauptspeicher benötigen.
Gruß, Thomas