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

Slides:



Advertisements
Ähnliche Präsentationen
Hash-Tabellen und -Funktionen Hash-Tabellen in Java
Advertisements

Prof. Dr. S. Albers Prof.Dr.Th Ottmann
Claudio Moraga; Gisbert Dittrich
FH-Hof Der B-Baum Richard Göbel. FH-Hof Wahl des Verzweigungsgrad Verzweigungsgrad kann größer als 2 sein v Nachfolger für einen Knoten v-1 Werte in einem.
7. Natürliche Binärbäume
Durchlaufen eines Binärbaumes
3. Kapitel: Komplexität und Komplexitätsklassen
Kapitel 6. Suchverfahren
<d,a,s, ,i,s,t, ,e,i,n,e, ,L,i,s,t,e>
Kapitel 3: Listen Lineare Liste: endliche Folge von Elementen eines Grundtyps (n>=0), leere Liste falls n=0 Listenelemente besitzen.
5. Sortier-Algorithmen Vorbemerkungen:
Synonyme: Stapel, Keller, LIFO-Liste usw.
Gliederung Motivation / Grundlagen Sortierverfahren
Sortieren mit Binären Bäumen
Sortierverfahren Richard Göbel.
Java: Dynamische Datentypen
Listen Richard Göbel.
Sortierverfahren Richard Göbel.
Effizienz: Indexstrukturen
DOM (Document Object Model)
WS Algorithmentheorie 05 - Treaps Prof. Dr. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (19 - Analyse natürlicher Bäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Tobias Lauer.
Das Maßproblem von Klee
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (02 – Funktionenklassen) Prof. Dr. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (17 – Bäume: Grundlagen und natürliche Suchbäume) Prof. Th. Ottmann.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen 09 - Weitere Sortierverfahren Heapsort-Nachtrag Prof. Th. Ottmann.
1 Vorlesung Informatik 2 Algorithmen und Datenstrukturen (21 – Kürzeste Wege) T. Lauer.
WS Algorithmentheorie 15 – Fibonacci-Heaps Tobias Lauer.
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (07 - Skiplisten) Prof. Th. Ottmann.
Union-Find-Strukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (09 - Weitere Sortierverfahren) Prof. Th. Ottmann.
Algorithmen und Datenstrukturen
Vorlesung Informatik 2 Algorithmen und Datenstrukturen (05 – Elementare Datenstrukturen) Prof. Th. Ottmann.
Informatik II, SS 2008 Algorithmen und Datenstrukturen Vorlesung 6 Prof. Dr. Thomas Ottmann Algorithmen & Datenstrukturen, Institut für Informatik Fakultät.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 9 Claudio Moraga; Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 11 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Diskrete Mathematik I Vorlesung 9b AVL-Baum, Algorithmen.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Externe Datenstruktur lineare Liste
Weiteres Programm Studium des Breitendurchlaufs Hierzu
Einführung in die Programmierung Datensammlung
LS 2 / Informatik Datenstrukturen, Algorithmen und Programmierung 2 (DAP2)
Splay Trees Von Projdakov Benjamin.
Eine Implementierung einer effiziente externe geordnete (!) lineare Liste Operationen: Search(x) Insert(x) Delete(x)
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung
Effiziente Algorithmen
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Effiziente Algorithmen Hartmut Klauck Universität Frankfurt SS
Einführung in die Informatik für Naturwissenschaftler und Ingenieure
Java für Fortgeschrittene
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2009/10 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fakultät.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Algorithmen und Datenstrukturen Übungsmodul 11
Institut für Wirtschaftsinformatik – Software Engineering, JKU Linz 1 Thomas Hilpold: Algorithmen und Datenstrukturen SS 2005 Mag.Th. Hilpold u. Dr. A.Stritzinger.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Komplexität von Algorithmen
Minimal spannende Bäume
Programmiersprachen II Fortsetzung Datenstrukturen Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Programmiersprachen II Fortsetzung Datenstrukturen Balancierte Bäume 2 Prof. Dr. Reiner Güttler Fachbereich GIS HTW.
Pointer. * und &  Bei der Definition int var1; ○ // „normale“ Variable int *var2; ○ // Zeiger auf einen Integer int *var2 = NULL; ○ // … incl. Initialisierung.
 Präsentation transkript:

Janick Martinez 1 Performancebetrachtung typischer XML-Operationen Seminar XML und intelligente Systeme Wintersemester 05/06 Uni Bielefeld

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

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

Janick Martinez4 / 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²)

Janick Martinez5 / 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)

Janick Martinez6 / 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

Janick Martinez7 / 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 x n-1 n Kind 2 Children[ ] … Kind x Children[ ] … Kind n Children[ ] … Feld-Indices O(1) O(n)

Janick Martinez8 / 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)

Janick Martinez9 / 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))

Janick Martinez10 / 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)

Janick Martinez11 / 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)

Janick Martinez12 / 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

Janick Martinez13 / 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)

Janick Martinez14 / 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)

Janick Martinez15 / 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)

Janick Martinez16 / 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)

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

Janick Martinez18 / 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: 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²)

Janick Martinez19 / 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

Janick Martinez20 / 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) Markup Dichte34%6%33%2%33%