Graphmanagement in Datenbanken Thema: Warshall-Algorithmus in der Datenbank Seminar im WS 2005/06 Dozenten: Professor Ulf Leser, Silke Trißl Referentin: Ayşegül Gündoğan 1 Gliederung Einführung Warshall Algorithmus Modifizierter Warshall Algorithmus Blocked Warshall Lu Zusammenfassung 2 1 Einführung Es werden Algorithmen vorgestellt, um die transitive Hülle einer Datenbankrelation zu berechnen (gerichtete) Graphen als Relationen vorhanden 3 Warshall Algorithmus Bevor wir beginnen… …einige Definition: Ein Graph G = (V,E) besteht aus einer Menge von Knoten V (Vertices) und einer Menge von Kanten E (Edges). Zwei Knoten, die durch eine Kante verbunden sind, heissen adjazent Der Grad eines Knotens ist die Anzahl der adjazenten Knoten 4 2 Weitere Definitionen Datenstrukturen für Graphen Adjazenzmatrix: Boolesche Matrix, bei der ein Eintrag a[i,j] wahr ist, falls eine Kante (i,j) existiert. Adjazenzliste: Zu jedem Knoten v wird eine Liste der von v aus erreichbaren Knoten gespeichert. Gerichtete Graphen Bei einem gerichteten Graphen haben alle Kanten eine Richtung:Vorgänger, Nachfolger. 5 Weitere Definitionen Die transitive Hülle (transitive closure) für jeden gerichteten Pfad von a nach b im Graphen G wird eine Kante (a,b) in G* eingefügt D.h. existiert so ein Pfad, findet je nach Algorithmus entweder Eintrag in einer Matrix, oder z ein Listeneintrag statt z 6 3 Warshall Algorithmus Eingabe: n x n-Adjazenzmatrix A eines Graphen G Ausgabe: n x n-Adjazenzmatrix A* des Graphen G* mit A*i,j = 1, falls es einen Weg von Knoten i nach Knoten j gibt und A*i,j = 0 sonst 7 Warshall Algorithmus: Beispiel Graph G: G*: Für k = 1; i = 2; j = 5; Für k = 1; i = 5; j = 5; 0 Adjazenmatrix A: A*: j 0 0 5 i 4 2 3 1 1 1 2 1 2 3 4 5 1 1 1 1 1 1 1 1 1 1 1 1 3 4 5 1 for (k=0; k<n; k++) for (i=0; i<n; i++) for (j=0; j<n; j++) a[i][j]=a[i][j] || a[i][k] && a[k][j] 8 4 Warshall Algorithmus Die transitive Hülle kann „am Platz“ berechnet werden: gleicher Speicherplatz für G und G*. Aufwand für den Warshall-Algorithmus: O(n³). Problem: Wenn Matrix zu groß ist (paging) 9 Gliederung Einführung Warshall Algorithmus Modifizierter Warshall Algorithmus Blocked Warshall Lu Zusammenfassung 10 5 Modifizierter Warshall Algorithmus nach Warren Neue Idee: Es genügen log2 N Durchläufe Nach Warren wird die Berechnung so aufgeteilt, dass im ersten Durchlauf die Positionen unterhalb der Hauptdiagonale und im zweiten Durchlauf nur Positionen oberhalb der Hauptdiagonale betrachtet werden 11 Modifizierter Warshall Algorithmus Eingabe: n x n-Adjazenzmatrix A eines Graphen G Ausgabe: n x n-Adjazenzmatrix A* des Graphen G* mit A*i,j = 1, falls es einen Weg von Knoten i nach Knoten j gibt und A*i,j = 0 sonst 12 6 Warrens Methode (1) Unterhalb der Hauptdiagonale for (i=1; i<n+1; i++) for (k=1; k<i;k++) for (j=1; j<n+1; j++) a[i][j]=a[i][j] || a[i][k] && a[k][j] (2) Oberhalb der Hauptdiagonale for (i=1; i<n+1; i++) for (k=i+1; k<n+1;k++) for (j=1; j<n+1; j++) a[i][j]=a[i][j] || a[i][k] && a[k][j] 13 Beispiel zu Warren Graph G: (1) für k=2; i=6; j=6 1 (2) für k=6; i=1; j=2 6 2 1 5 3 4 i 2 3 j 1 2 1 1 3 4 1 5 1 1 1 1 1 1 1 1 (1) for (i=1; i<n+1; i++) for (k=1; k<i;k++) 4 for (j=1; j<n+1; j++) 5 a[i][j]=a[i][j] || (a[i][k] && a[k][j]) 6 1 1 (2) for (i=1; i<n+1; i++) for (k=i+1; k<n+1;k++) Algorithmus berechnet for (j=1; j<n+1; j++) a[i][j]=a[i][j] || (a[i][k] && a[k][i]) 6 1 richtig! 14 7 Gliederung Einführung Warshall Algorithmus Modifizierter Warshall Algorithmus Blocked Warshall Lu Zusammenfassung 15 Blocked Warshall nach Agrawal Annahme: Ausgangsrelation ist sortiert Relation zu groß, muss geteilt werden (Partitionen) Partition: Liste von Nachfolgern (NFL) einiger Knoten Problem: Listen können während der Berechnung wachsen, Speicher füllen Lösung: dynamische Partitionierung 16 8 Blocked Warshall Grundidee: Partitionen erst holen, wenn sie gebraucht werden Wenn während der Berechung der Speicher anfängt sich zu füllen, einige NFL in die nächste Partition einlesen Situation: Es passen immer nur einige Partitionen in den Speicher Ziel: Input/Output für Tupel minimieren 17 Blocked Warshall Bsp: 1 3 2 Warshall verarbeitet spaltenweise Ziel: I/O-Verkehr minimieren Falls möglich Knoten 1+2 zusammen betrachten Also: statt Spalte für Spalte Spaltenblöcke 18 9 Blocked Warshall Ein Block von Spalten legt eine Partition fest Innerhalb einer Partition soll reihenweise geprüft werden Bei diagonalen Partitionen spaltenweise Bei statischer Partitionierung: Geeignete Größen für Blöcke wählen 19 Blocked Warshall Algorithmus [1] [1] 20 10 Blocked Warren Gegeben Element (i,j) Ziel: Aufrufe der Reihe j minimieren Analog zu Blocked Warshall Reihenpartitionen nacheinander verarbeiten Spaltenweise innerhalb jeder Reihenpartition Zwei Durchläufe erforderlich 21 Blocked Warren Algorithmus [1] [1] 22 11 Performance Auswertung Leistung von Datenbanksystemen und Algorithmen Blocked Warshall Blocked Warshall mit Vorgängern (hier nicht vorgestellt!) Blocked Warren Die verwendete Leistung ist der Gesamte I/OVerkehr, der durch die Algorithmen in Kilobytes erzeugt wurde 9 verschiedene Datenbanken verwendet erzeugte Tupel wurden sortiert und die Duplikate in einer Nachbearbeitung beseitigt 23 Simulationsparameter Die Größe des Speichers ungefähr einzehntel der Größe der Resultatsrelation Alle verwendeten Datenbanken ungefähr gleich Groß (5 Megabytes), heute – klein – damals groß Eine Tupelgröße von 100 Bytes wurde verwendet 24 12 Auswertung Blocked Warren besser als die anderen Algorithmen niedrigere Schreibkosten von Warren Warren auch bei den Lesekosten besser als die anderen 25 Gliederung Einführung Warshall Algorithmus Modifizierter Warshall Algorithmus Blocked Warshall Lu Zusammenfassung 26 13 Optimierungsansatz nach Lu Von Lu at al. Optimierung der Hüllenberechnung Idee: Warshall auf Listen, da Listen besser für Datenbanken Betrachten den rekursiven Algoritmus 27 Lu Beispiel Graph G: Knotenpaare: L = [[0,5],[5,1],[1,5],[0,0],[2,1],[2,4]] 0 5 arbeitet auf sortierten Listen: 1 4 L´ = [[0,0], [0,5], [1,5], [2,1], [2,4], [5,1]] 2 3 28 14 Lu Beispiel (Forts.) 1 L=Rº sortiert nach <A,B> 2 foreach(tєL and t.A > t.B) do L´ = [(0,0), (0,5), (1,5), (2,1), (2,4), (5,1)] L´ 1.foreach begin 3 4 findall t´ in L where t.B = t´.A; 5 insert{(t.A,t´.B)}into L; 7 foreach(tєLand t.A <t.B) do begin 8 (0,1),(0,3) (1,5) - (2,1) (2,5) (2,3) - (0,5) end 6 (0,0) 9 findall t´in L where t.B = t´.A; (2,4) - 10 insert {(t.A,t`.B)} into L; (5,1) (5,5) (5,3) - 11 end 2.foreach (1,1),(1,3) 29 Lu Beispiel (Forts.) Graph G*: 0 5 1 4 2 3 Annahme für weitere Optimierung: Relation R zu groß, unmöglich alle Tupel im Hauptspeicher zu halten Berechnung erfordert viele Join, Union, Differenz Operationen auf sehr großen (Teil-) Relationen. Idee: große Relation in kleinere disjunkte zerlegen und so Kosten für Join-Operationen verringern 30 15 Lu (Forts.) Zwei neue Strategien werden angegeben Größe der Relation R verringern z jene Tupel der Relation R dynamisch zu beseitigen, die keine neuen Tupel in der Resultatsrelation erzeugen Berechnung beschleunigen z Die Zahl der Iterationen für Hüllenberechnung kann optimiert werden Idee: mehr Tupel in einer Wiederholung erzeugen und weniger Wiederholungen benötigen 31 Zusammenfassung Einfürung Definitionen Warshall Algorithmus Modifizierter Warshall Algorithmus Blocked Warshall & Warren Performance Auswertung Berechnung der Hülle nach Lu 32 16 Literaturverzeichnis Hongjun Lu, New Strategies for Computing the Transitive Closure of a Databaserelation 1987 S. Warshall, A Theorem on Boolean Matrices, J. ACM 1962, 11 – 12 H. S. Warren, Jr., A modification of Warshall's algorithm for the transitive closure of binary relations, Commun. ACM 1975, 218 – 220 Agrawal, H. V. Jagadish, Direct Algorithms for Computing the Transitive Closure of Database Relations 1987 http://www.iti.fh-flensburg.de/lang/algorithmen/graph/warshall.htm 33 Abbildungsverzeichnis [1] Agrawal, H. V. Jagadish, Direct Algorithms for Computing the Transitive Closure of Database Relations 1987 34 17