Performance
Sehr schnelles Verarbeiten großer Xml-Dateien
Die <xml>cmp-tools sind optimiert für das Verarbeiten großer Xml-Dateien. Sie sind sehr schnell und benötigen nur wenig Hauptspeicher.
Die Performance hängt von der jeweiligen Hardwarekonfiguration ab.
Auf dieser Seite folgen viele Performance-Messungen.
Beispiel:
Der Vergleich zweier 1.400 MB großen Xml-Dateien dauert nur 6 Minuten.
(Konfiguration: AMD Opteron Processor 248, 2 Prozessoren, 7 GB Speicher, 2 RAID-10-Plattensysteme)
Parameter
Folgende Parameter sind wichtig für eine gute Performance:
- Anzahl der CPU's
- Geschwindigkeit der CPU's
- Geschwindigkeit der Platten
- Hauptspeichergröße
Erläuterungen:
Beim Vergleichen oder Mischen von Xml-Dateien wird mit mehreren Threads gearbeitet. Mehr Prozessoren verbessern daher die Performance.
Die Geschwindigkeit der Platten ist sehr wichtig, da die Daten bis zu dreimal in temporäre Dateien geschrieben bzw. umsortiert werden.
Für das Verarbeiten großer Dateien ist kein großer Hauptspeicher erforderlich. Aber ein großer Hauptspeicher kann große Teile des Dateisystems
puffern, was sich sehr positiv auf die Performance auswirken kann.
Die Erhöhung des Java-Heap-Size-Parameters mag eine Performance-Verbesserung bringen - aber nur von wenigen Prozentpunkten.(Siehe unten stehende Messungen)
Hardwarekonfigurationen
Mit diesen Hardwarekonfigurationen wurden die Tests durchgeführt.
A | B | C | |
System | Linux 2.6.9-22.0.2.106 unsupportedsmp #1 SMP | Linux 2.4.21-27.0.2.ELsmp #1 SMP | Linux 2.4.20-4GB unter Vmware |
Cpu | AMD Opteron(tm) Processor 248 | AMD Opteron(tm) Processor 244 | Intel(R) Pentium(R) 4 CPU 2.66GHz |
Cpu MHZ | 2190.584 | 1792.254 | 2659.303 |
Cpu Cache-Grösse KB | 1024 | 1024 | 512 |
Prozessoren | 2 | 2 | 1 |
Hauptspeicher KB | 8.030.056 | 7.956.884 | 514.952 |
Um eine Vorstellung von der Performance der jeweiligen oben genannten Hardwarekonfigurationen zu bekommen, sind hier die Zeiten für das Kopieren und Sortieren von Dateien protokolliert.
Kopieren von Dateien:
Dateigröße MB | A | B | C |
100 MB | 1s | 2s | 3s |
300 MB | 5s | 5s | 24 |
700 MB | 11s | 22s | 48s |
1400 MB | 23s | 1m40s | 1m56s |
Sortieren von Dateien:
Die Zeiten für das Sortieren sind relativ hoch. Ursache hierfür ist: Die Dateien sind Xml-Dateien. In jeder Zeile steht immer nur ein einzelnes Element. Da die einzelnen Zeilen somit nicht sehr signifikant sind, ist der Sortieraufwand relativ hoch.
Dateigröße MB | Zeilen | A | B | C |
100 MB | 2.752.921 | 2m22s | 2m23s | 18s |
300 MB | 8.260.808 | 7m51s | 8m01s | 1m23s |
700 MB | 19.929.075 | 19m10s | 21m14s | 3m30s |
1400 MB | 39.858.146 | 40m12s | 44m37s | 1h40m47s |
Performance-Messungen
Die folgenden Messungen basieren alle auf folgender Basissteuerungs-Datei:
Basissteuerungs-Datei: |
---|
Beispielsinhalt der Testdateien: |
---|
Vergleichen von Xml-Dateien
Dateigröße MB | Zeilen | Anzahl Xml- Differenzen |
A | B | C |
100 | 2.752.921 | 2 | 28s | 35s | 1m49s |
300 | 8.260.808 | 3 | 44s | 1m14s | 7m09s |
700 | 19.929.075 | 5 | 3m01s | 6m20s | 19m47s |
1400 | 39.858.146 | 2 | 5m56s | 13m40s | 48m22s |
Sortieren von Xml-Dateien
Die Testdateien sind sortiert nach "person@id". Sie sollen nun umsortiert werden nach: "name", "firstname", "residence"
Sortiersteuerungs-Datei: |
---|
Dateigröße MB | A | B | C |
100 | 1m15s | 1m34s | 3m32s |
300 | 3m39s | 4m31s | 10m36s |
700 | 8m59s | 11m8s | 26m42s |
1400 | 18m11s | 21m40s | 55m11s |
Mischen von Xml-Dateien
Die oben genannten Testdateien der verschiedenen Grössen-Klassen weisen jeweils nur wenige Unterschiede auf. Diese Testdateien werden nun miteinander gemischt. Die Mischregeln sind: Das Ergebnis soll alle Sätze von beiden Dateien enthalten. Wenn bei einem Satz bei einem Element abweichende Werte festgestellt werden, soll der Wert von Datei2 den Wert von Datei1 überschreiben.
Mischsteuerungs-Datei: |
---|
Dateigröße MB | A | B | C |
100 | 1m11s | 1m47 | 3m56s |
300 | 3m27s | 5m13s | 13m52s |
700 | 8m25s | 14m15s | 33m33s |
1400 | 17m30s | 31m51s | 59m40s |
Umgruppieren von Xml-Dateien
Für die Performancemessungen werden die Daten der Testdateien umgruppiert in eine Struktur, welche alle Orte enthält, zu jedem Ort die Strassen, zu jeder Strasse die Hausnummern und schließch zu jeder Hausnummer die zugehörigen Personen.
Konvertierungssteuerungs-Datei: |
---|
Beispiel für konvertierte Daten : |
---|
Dateigröße MB | A | B | C |
100 | 1m40s | 1m50s | 5m1s |
300 | 5m00s | 6m30s | 15m33s |
700 | 12m38s | 15m50s | 38m22s |
1400 | 24m05s | 28m56s | 1h15m10s |
Schnelle Platten verbessern Performance
Die Performance der Platten ist entscheidend, weil die Dateien mehrmals in temporäre Dateien geschrieben werden. Man kann bis zu vier temporäre Verzeichnisse für diese Dateien definieren über die Shellvariablen TMPDIR, TMPDIR1, TMPDIR2 und TMPDIR3. Beste Performanceergebnisse erhält man, wenn die temporären Verzeichnisse auf verschiedenen Dateisystemen liegen, die jeweils getrennte Plattensteuerungen haben.
Geringer Einfluß des Java-Heap-Size-Parameters
Das Erhöhen des Java-Heap-Size-Parameters bringt nur relativ wenige Performance-Vorteile. Auch mit sehr geringer Java-Heap-Size können gute Performanceergebnisse erzielt werden.
.Bei den folgenden Messungen wurden zwei XML-Dateien verglichen, die jeweils 700 MB groß sind und zwischen denen zwei Abweichungen bestehen. Der maximale Java-Heap-Size-Wert wurde über Schalter "-Xmx" explizit vorgegeben.
Java-Heap-Size | A |
50 MB | 3m01s |
100 MB | 2m55s |
250 MB | 3m01s |
500 MB | 2m55s |
1000 MB | 3m00s |
2000 MB | 2m49s |