Parallel XML Parsing in Java

Ich Schreibe eine Anwendung, welche die Prozesse, die eine Menge von xml-Dateien (>1000) mit tiefen Knoten-Strukturen. Es dauert etwa sechs Sekunden mit woodstox (Event, API) zum Parsen einer Datei mit 22.000 Nodes.

Der Algorithmus wird in einem Prozess mit der Benutzer-Interaktion, wo nur ein paar Sekunden Reaktionszeit akzeptabel sind. Also muss ich verbessern, die Strategie im Umgang mit den xml-Dateien.

  1. Meine Prozess-Analyse der xml-Dateien (in Auszügen, nur wenige Knoten).
  2. Extrahierten Knoten verarbeitet werden und das neue Ergebnis ist geschrieben in einem neuen Datenstrom (was eine Kopie des Dokuments mit geänderten Knoten).

Ich denke jetzt über eine Multithread-Lösung (die besser skaliert auf 16 Core+ hardware). Ich dachte über die folgenden stategies:

  1. Erstellen mehrerer Parser und laufen parallel auf den xml-Quellen.
  2. Umschreiben meine parsing-Algorithmus thread-save zu verwenden, die nur eine Instanz des parser (Fabriken, ...)
  3. Teilen Sie die XML-Quelle in Stücke und ordnen Sie die Abschnitte in mehrere verarbeitungsthreads (map-reduce xml - serial)
  4. Optimierung meines Algorithmus (besser StAX-parser als woodstox?) /Mit einem parser mit build-in Parallelität

Ich möchte zu verbessern, die Leistung insgesamt und die "pro Datei" Leistung.

Habt Ihr Erfahrung mit solchen Problemen? Was ist der beste Weg zu gehen?

  • Es ist nicht klar, was muss maximiert werden hier... die performance auf eine EINZELNE Datei, oder die gesamte Leistung auf alle 1000 Dateien.
  • Noch eine Anregung: wenn du Quantifizierung der Größen von Dateien, damit die Berechnung des ganzen (Megabyte pro Sekunde verarbeitet) kann es geben, eine Vorstellung der erwarteten Leistung. Ich erhalten in der Regel 10 - 40 MB/s für das Parsen mit Woodstox beim testen; aber meine Festplatten liefern nur 5 - 10 MB/s erreichte Geschwindigkeit.
InformationsquelleAutor Martin K. | 2010-11-17
Schreibe einen Kommentar