Die Präsentation wird geladen. Bitte warten

Die Präsentation wird geladen. Bitte warten

07.11.2005 Janick Martinez 1 Performancebetrachtung typischer XML-Operationen Seminar XML und intelligente Systeme Wintersemester.

Ähnliche Präsentationen


Präsentation zum Thema: "07.11.2005 Janick Martinez 1 Performancebetrachtung typischer XML-Operationen Seminar XML und intelligente Systeme Wintersemester."—  Präsentation transkript:

1 07.11.2005 Janick Martinez jmartine@techfak.uni-bielefeld.de 1 Performancebetrachtung typischer XML-Operationen Seminar XML und intelligente Systeme Wintersemester 05/06 Uni Bielefeld

2 Janick Martinez2 / 19 07.11.2005 Lebenszyklus eines XML-Dokuments Parsen Zugriff Modifikation Serialisierung

3 Janick Martinez3 / 19 07.11.2005 Gliederung des Vortrages Komplexitätsanalyse XML-Dokumente im Speicher elementare XML-Operationen Zugriff auf bestimmte Knoten Testrelationen Datenstruktur-Modifikationen komplexe XML-Operationen

4 Janick Martinez4 / 19 07.11.2005 Komplexitätsanalyse Einteilung von Algorithmen in Komplexitätsklassen O(f)obere Schranke Θ(f)obere und untere Schranke Ω(f)untere Schranke Reduktion auf Funktion der höchsten Ordnung und Abstraktion von konstanten Faktoren Beispiel:5n²+3n Die Funktion 5n²+3n wächst im wesentlichen nicht schneller als die Funktion n² O(?)O(n²)

5 Janick Martinez5 / 19 07.11.2005 Beispiel Komplexitätsanalyse Funktion zur Ermittlung des Mini- / Maximums eines Arrays Bestimmende Eingabegröße: Länge des Arrays Bestimmende Operation: Vergleichen min = array[0] max = array[0] i = 1 while (i < array.length()) if(array[i] < min) then min = array[i] if(array[i] > max) then max = array[i] i++ end Schleife wird n-1 mal ausgeführt Pro Durchlauf je- weils ein Vergleich Zeitkostenfunktion T(n) = 2(n-1) 2(n-1) Ermittlung des Mini- / Maximums erfordert lineare Zeit O(n)

6 Janick Martinez6 / 19 07.11.2005 Bestimmende Eingabegrößen Gesamtanzahl an Elementen Anzahl Kinder eines Knotens Tiefe des Baumes number of elements fanout depth Bibliothek Buch 1Buch 2Buch n AutorTitelISBNAusleihliste Entleiher 1 Entleiher n Bibliothek Buch 1Buch 2 Buch n AutorTitelISBNAusleihliste Entleiher 1 Entleiher n Bibliothek Buch 1Buch 2 AutorTitelISBNAusleihliste Entleiher 1 Entleiher n Bibliothek Buch 1Buch 2 AutorTitelISBNAusleihliste Entleiher 1 Entleiher n Buch m typisch < 10 typisch 8 - 13

7 Janick Martinez7 / 19 07.11.2005 XML-Elementen im Speicher Knoten Children[ ] … Felder (arrays) Kern: indizierte Feld-Elemente sehr schneller Zugriff in konstanter Zeit Speicherschonend Unvorteilhaft im Zusammen- hang mit Datenstruktur- modifikationen 1 2 3 4 x n-1 n Kind 2 Children[ ] … Kind x Children[ ] … Kind n Children[ ] … Feld-Indices O(1) O(n)

8 Janick Martinez8 / 19 07.11.2005 XML-Elementen im Speicher Knoten myParent firstChild nextSibling … Kind 1 myParent firstChild nextSibling … Kind 2 myParent firstChild nextSibling … Kind 3 myParent firstChild nextSibling … Verknüpfte Liste (Linked-Lists) Kern: Referenzen auf Knoten Relativ schneller Zugriff Etwas speicherbelastender als Arrays Hierarchische Struktur leicht aufzubauen Vorteilhaft im Zusammen- hang mit Datenstruktur- modifikationen O(n) O(n + fanout*depth)

9 Janick Martinez9 / 19 07.11.2005 XML-Elementen im Speicher Auslassende Liste (Skip-Lists) Spezielle Erweiterung einer Linked-List Auf Wahrscheinlichkeitsverteilungen basierend Schneller Zugriff auf einzelne Elemente Nur geringfügig erhöhter Speicherverbrauch Erst sinnvoll bei größerem fanout KopfTerminator max Layer n´ter Layer Kind 1Kind 2Kind 3Kind 4Kind 5 O(log(n))

10 Janick Martinez10 / 19 07.11.2005 Zugriff auf bestimmte Knoten Suchliste vom Parser aufgebaut Kostet zusätzliche Zeit ArrayLinked-ListSkip-List Operation Datenstruktur Verwendung von Referenzen firstChild und nextSibling Attribute und Text direkt mit Knoten assoziiert Speicherung innerhalb des Knotens Referenzierung der Daten Knoten mit ID/Key X seriell O(number of elements) per Suchliste (z.B. HashTable) O(1) N-te Kind von Knoten Y O(1)O(fanout)O(log(fanout)) Attribut- und Textzugriff eines Knoten O(1)

11 Janick Martinez11 / 19 07.11.2005 Mögliche Gefahr durch getChildN() i = 0 while (i < lastChildNumber) child = parentNode.getChildN(i) myNodeList.add(node) i++ end Beabsichtigt: ersten N Kinder eines Knotens erhalten Hier: getChildN() mit Referenzen firstChild und nextSibling realisiert O(fanout²) Bessere Alternative: direkter Gebrauch der nextSibling Referenz des gefundenen Kindes O(fanout)

12 Janick Martinez12 / 19 07.11.2005 Zugriff auf andere Verwandte Am Beispiel vorherigen Geschwister 1. Wie im vorherigen Code-Beispiel 2. Durch zusätzliche Referenzen Rechenintensiv Speicherintensiv Allgemeiner Trade-Off Rechenzeit Speicher

13 Janick Martinez13 / 19 07.11.2005 Testrelationen Überprüfung, ob X.getParent() == Y.getParent() ArrayLinked-ListSkip-List Operation Datenstruktur Überprüfung, ob X.getParent() == Y Iteration über alle Vorfahren von X mittels X.getParent() und Überprüfung, ob Y gefunden wurde O(1) X.isSiblingOf(Y) X.isChildOf(Y) X. isDescendantOf(Y) O(1) O(depth)

14 Janick Martinez14 / 19 07.11.2005 Beispiel: X.isDescendantOf(Y) parentNode = nodeX.getParent() while (parentNode != null) if(parentNode == nodeY) then return true parentNode = parentNode.getParent() end return false wird maximal depth-1 mal ausgeführt O(depth)

15 Janick Martinez15 / 19 07.11.2005 Datenstrukturmodifikationen Einfügposition kann in linearer Zeit gefunden werden Laufzeit abhängig von zu aktualisierenden Referenzen auf und innerhalb des neuen Knotens sowie von Bezügen wie Anzahl Kinder, Kosten hierfür aber konstant Architekturabhängig 1. Kinder des eingefügten Knotens direkt mit eingefügt 2. Vorgang muss iterativ für jedes Kind wiederholt werden ArrayLinked-ListSkip-List Operation Datenstruktur Laufzeit wie beim Einfügen abhängig von zu aktualisierenden Referenzen und Bezügen Reduziert sich auf das Löschen des Knotens an der alten und Einfügen an der neuen Position Knoten einfügen Knoten löschen Knoten bewegen O(fanout) O(log(fanout)) / O(1) O(fanout) / O(1) O(log(fanout)) / O(1) O(fanout) O(log(fanout)) Problem von Arrays: Begrenzte Größe Array muß neu angelegt werden, benötigt lineare Zeit Aber: impraktikabeler konstanter Faktor sehr hoch Einfügposition kann in logarithmischer Zeit ermittelt werden Konstanter Faktor jedoch leicht höher als bei einer Linked-List Ebenfalls hoher konstanter Faktor wie beim Einfügen / O(1)

16 Janick Martinez16 / 19 07.11.2005 Beispiel: Einfügen in Linked-List parentNode.incrementChildNumber() newNode.setParent(parentNode) if(n == 0) then newNode.setFollowing(parentNode.getFirstChild()) parentNode.setFirstChild(newNode) return precidingSibbling = parentNode.getFirstChild() i = 1 while (i < n) precidingSibbling = precidingSibbling.getNextSibbling() i++ end newNode.setFollowing(precidingSibbling.getNextSibbling()) precidingSibbling.setNextSibbling(newNode) Funktion zum Einfügen eines neuen Knotens newNode an die Stelle n O(1) wird maximal fanout-1 mal ausgeführtO(fanout)

17 Janick Martinez17 / 19 07.11.2005 Komplexe XML-Operationen Machen starken Gebrauch und sind zusammengesetzt aus elementaren Operationen Laufzeit der primitiveren Operationen ist ausschlaggebend für die der komplexeren Operationen

18 Janick Martinez18 / 19 07.11.2005 Beispiel: Alle Kinder mit Attribut X = Y children = node.getChildren() while (children.hasNext()) currentChild = children.next() if (currentChild.getAttribute(X) == Y) then myNodeList.add(currentChild) end return myNodeList Funktion zur Ermittlung aller Kinder eines Knotens mit bestimmten Attribut XPath: /node/child[@X=Y] Nutzt primitivere Operationen getChildren() und getAttribute() O(fanout) O(1) Laufzeitabhängigkeit von elementaren Operationen Bspw: schlechtere Implementierung von getChildren() mit O(fanout²) O(fanout²)

19 Janick Martinez19 / 19 07.11.2005 Fazit Quellen S. DeRose, Architecture and Speed of Common XML Operations, Extreme Markup Languages 2005, August 2005 Google… Interne API Implementierung sollte bekannt sein und berücksichtigt werden, um effiziente XML verarbeitende Programme zu erstellen XML bringt keine neuen Erkenntnisse im Bezug auf effiziente Datenverarbeitung, sondern baut auf verlässlichen Algorithmen auf Zum Abschluss: Beispielhaftes Benchmark der XOM Java Implementierung

20 Janick Martinez20 / 19 07.11.2005 Benchmark XOM API 1. Element einfügen Am Beginn In die Mitte An das Ende 2. Element bewegen Vom Anfang an das Ende Vom Ende zum Anfang 3. Bewegen komplexer Elemente RECchrmedmedchrbigbig Größe(bytes)159339893821126424034171815052472 Markup Dichte34%6%33%2%33%


Herunterladen ppt "07.11.2005 Janick Martinez 1 Performancebetrachtung typischer XML-Operationen Seminar XML und intelligente Systeme Wintersemester."

Ähnliche Präsentationen


Google-Anzeigen