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