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