Schreiber

Werbung
TU-München
Hauptseminar Informatik
Database Hall of Fame
Wintersemester 2001/2002
Prof. R. Bayer:
B-Bäume
Verfasser: Moritz Theile
Betreuer: Prof. Dr. D. Kossmann
Vortragstermin: 27.11.01
B-Bäume
-Motivation
-Wesen des B-Baumes
-Balance
-günstig für Hardware
-Operationen auf B-Bäumen
-Suchen
-Einfügen
-Löschen
-Andere B-Bäume
-B*-Baum
-B+-Baum
-Parallele Operationen auf B-Bäumen
Motivation
Alle Bundesbürger:
Name: Adr.: PLZ:
Ort:
Telefon:
Ziel:
Möglichst schnelles Finden von
einem bestimmten Datensatz.
n
n+1
n+2
n+3
n+4
n+5
n+6
z.B. finden der Person x mit der
gegebenen Telefonnummer y.
Lösung:
Die Spalten indizieren, d.h. die
Daten einer Spalte zusammen mit
dem Zeiger auf den Record in einer
schnell zu durchsuchenden
Datenstruktur abspeichern.
Naiver Ansatz:
Alle Telefonnummern in einen binären Suchbaum
Löschen eines Knotens
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
Suchzeit: O(log n)
k,d
k,d
k,d
k,d
Löschen eines Knotens
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
Suchzeit: O(log n)
k,d
k,d
k,d
k,d
Löschen eines Knotens
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
Suchzeit: O(log n)
k,d
k,d
k,d
k,d
Einfügen von Knoten
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
Suchzeit: O(log n)
k,d
k,d
Einfügen von Knoten
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
k,d
Suchzeit: O(log n)
k,d
k,d
Warum keine höhenbalancierten Bäume
wie z.B. den AVL-Baum?
Das Problem der Entartung ist mit AVL-Bäumen gelöst.
Aber:
Wir haben es mit sehr großen Indizes zu tun
Es passt nur ein Bruchteil in den Arbeitsspeicher.
Die Operationen im AVL-Baum weisen keinerlei Lokalität
auf, d.h. man kann nicht voraussagen, welche Knoten man
wahrscheinlich bearbeiten muss!
=>Häufiger Zugriff auf den
langsamenHintergrundspeicher
Lösung:
B-Bäume
Report on the 2001 SIGMOD
and PODS Awards
.... The SIGMOD Innovations award is given
„For innovative and highly significant
contributions of enduring values to the
development, understanding, or use of database
systems and databases.“ This year´s winner is
Prof. Rudolf Bayer of the Technical University
of Munich, for his invention of the B-Tree
prefix compression, and of lock coupling for
concurrent access to B-Trees ....
Merkmale eines B-Baumes I:
1.) Alle Wege von der Wurzel zu den Blättern sind gleich lang.
2.) Jeder Knoten hat mindestens k und maximal 2k
Einträge.
Ausnahme: Die Wurzel kann 1 bis 2k Einträge haben.
3.) Wenn ein Knoten n Einträge hat, hat er n+1 Verweise auf
seine Söhne.
Ausnahme: Blätter haben undefinierte Verweise.
Merkmale eines B-Baumes II:
4.) Ein Blatt muss folgendermaßen organisiert sein:
k1,d1 k2,d2 k3,d3 k4,d4
k1 bis kn sind Schlüssel
z1 bis zn+1 sind Zeiger auf Söhne
z1
z2
z3
z4
z5
.... kn,dn
....
zn+1
Es muß gelten:
a) z1 zeigt auf Teilbaum mit Schlüsseln kleiner k1
b) zi (i=1...n) zeigt auf Teilbaum mit Schlüsseln zwischen ki und ki+1
c) zn+1 zeigt auf Teilbaum mit Schlüsseln grösser kn
Beispiel für einen B-Baum
21
7 15
2 3 4
8 11 12
28 42
17 18
23 25 26
30 35
44 45 50 51
Suchoperation auf einem B-Baum
find(11)
21
7 15
2 3 4
8 11 12
28 42
17 18
23 25 26
30 35
44 45 50 51
Einfügeoperation auf einem B-Baum
insert(45)
21
7 15
2 3 4
8 11 12
28 42
17 18
23 25 26
30 35
44 47 50 51
Einfügeoperation auf einem B-Baum
insert(45)
21
7 15
28 42
45
2 3 4
8 11 12
17 18
23 25 26
30 35
44 47 50 51
Einfügeoperation auf einem B-Baum
insert(45)
21
7 15
2 3 4
8 11 12
28 42
17 18
23 25 26
30 35
44 45 47 50 51
Einfügeoperation auf einem B-Baum
insert(45)
21
7 15
2 3 4
8 11 12
28 42 47
17 18
23 25 26
30 35
44 45 50 51
Einfügeoperation auf einem B-Baum
insert(45)
21
7 15
2 3 4
8 11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(7)
21
7 15
2 3 4
8 11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(7)
21
15
2 3 4
8 11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(7)
21
8 15
2 3 4
11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(8)
21
8 15
2 3 4
11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(8)
21
15
2 3 4
11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(8)
21
11 15
2 3 4
12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(8)
21
11 15
2 3 4
12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(8)
21
4 15
2 3
11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(11)
21
4 15
2 3
11 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(11)
21
4 15
2 3
12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(11)
21
4 15
2 3
12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(11)
21
15
2 3 4 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(11)
21
15
2 3 4 12
28 42 47
17 18
23 25 26
30 35
44 45
50 51
Löschoperation auf einem B-Baum
delete(11)
28
15 21
2 3 4 12
42 47
17 18
23 25 26
30 35
44 45
50 51
Kosten von Operationen
Als Grundlage der Kostenkalkulation dient die Anzahl der
teuren Hintergrundspeicher- bzw. Knotenzugriffe.
21
8 15
2 3 4
1112
h
284247
1718
232526
3035
4445
5051
n+1
<
log
k 2
=
Anzahl der Knotenzugriffe im Worst-Case
Anzahl der Records
103
k
104
105
106
107
108
5
3
5
6
8
9
11
25
2
3
3
4
4
5
50
2
2
3
3
4
4
75
2
2
3
3
4
4
Anzahl
Bundesbürger
Kosten von insert() und delete()
Insert() und delete() können unter Umständen teurer als find() sein, da sie
durch notwendige rebalance-Operationen den Baum wieder hinauflaufen
müssen.
Der maximale Weg ist aber, auch nur maximal doppelt so lang, wie der von
find().
=>Im schlimmsten Fall nehmen die Kosten proportional zu logk n zu.
Die Wahl von k
Hintergrundspeicher (HD)
Arbeitsspeicher (RAM)
(langsam)
(schnell)
ein Knoten
Gesamte
Indexstruktur
Zugriff
2k
Kapazität >> k
Pro Zugriff kann bloss eine sehr begrenzte Datenmenge in den Arbeitsspeicher
transferiert werden.
=> Man wählt k am besten so, daß man pro Zugriff einen ganzen Knoten
auslesen kann.
B*-Bäume
Unterschied zwischen B- und B*-Bäumen
B-Bäume:
2.) Jeder Knoten hat mindestens k und maximal 2k
Einträge.
Ausnahme: Die Wurzel kann 1 bis 2k Einträge haben.
B*-Bäume:
2.) Jeder Knoten hat mindestens 1 1/6 k und maximal 2k
Einträge.
Ausnahme: Die Wurzel kann 1 bis 2k Einträge haben.
Vor- und Nachteile von B*-Bäumen
Vorteile:
-Speicherausnutzung mindestens 66%
-im worst-case flachere Bäume
Nachteile:
- rebalance-Funktionen häufiger notwendig
-etwas aufwendigere Operationen
+
B -Bäume
Punktsuche und Bereichssuche
Punktsuche:
Gib die Adresse zurück, die der Nummer 089/8150815 zugeordnet ist.
Bereichssuche:
Gib eine Liste mit den Adressen aus, die mit 089 beginnen.
Merkmal eines B+-Baumes
Alle Schlüssel befinden sich in den Blättern.
Die Blätter sind von links nach rechts miteinander verlinkt.
B+-Baum-Konzept
random-search
sequentialsearch
Vorteil bei sequentieller Suche:
Jeder Knoten muß garantiert nur einmal in den Speicher geladen werden.
Index-BBaum
ohne
Zeiger
auf
Records
Eigentliche
Schlüssel
mit
Verweise
auf die
Daten
Beispiel für einen B+-Baum
21
4 15
2 3 4
12 15
28 42 49
17 18 21
23 25 26 27
30 35
42 45 47
50 51
Operationen auf einem B+-Baum
Die Operationen auf einem B+-Baum sind denen auf einem BBaum sehr ähnlich. Ich werde an dieser Stelle darauf verzichten
genauer darauf einzugehen.
Parallele Operationen
auf einem B-Baum
Parallele Operationen auf B-Bäumen
Problem:
Wenn mehrere Prozesse gleichzeitig auf einen B-Baum
zugreifen kann dies zu Problemen führen.
Parallele Operationen auf B-Bäume
Beispiel:
Transaktion 1: read(12)
Transaktion 2: insert(3)
Knoten A
Knoten A
15
7
Insert(3)
Knoten B
Knoten B
2 5 7 12
2 3
T1: read(12)
T2: insert(3)
bekommt
Pointer zu B
spaltet B in B u. C
liest B
Time
Knoten C
7 12
Sperren auf Knoten
Kompatibilitätsmatrix:
Beantragter
Momentaner Sperr-Modus
Sperr-Modus
S
X
S
OK
X
S: „shared“ lock
X: „exclusive“ lock
Naiver Ansatz
insert()
delete()
find()
next()
S
X
4 15
2 3
11 12
4 15
17 18
2 3
Nur Suchen können parallel ausgeführt werden.
Update-Funktionen lassen keine Parallelität zu.
Sehr geringe Parallelisierung der Funktionen.
11 12
17 18
Sichere und unsichere Knoten
Ein Knoten ist dann sicher, wenn seine
Vorfahren durch die Operation
unverändert bleiben.
Sichere und unsichere Knoten
bezüglich der insert()-Funktion
Ein Knoten ist bezüglich einer
insert()-Operation dann sicher, wenn
die Anzahl seiner Einträge kleiner als
2k ist.
28 42
23 25 26
30 35
44 47 50 51
= sicher
= unsicher
Sichere und unsichere Knoten
bezüglich der delete()-Funktion
Ein Knoten ist bezüglich einer
delete()-Operation dann sicher, wenn
die Anzahl seiner Einträge größer als k
ist.
28 42
23 25 26
30 35
44 47 50 51
= sicher
= unsicher
Drei Lösungen mit Lock-Coupling
In einer Veröffentlichung haben Bayer und Schkolnick
(1977) drei verschiedene Protokolle zur Parallelisierung
von Zugriffen auf B*-Bäume vorgestellt.
Für Lese- und Schreibprozesse kommen immer
verschiedene Protokolle zum Einsatz.
Lösung Nr. 1
Lösung Nr. 1 für Leser
Protokoll für Leser:
0) Place S-lock on root;
1) Get root and make it the current node;
2) While current node is not a leaf do
begin
3)Place S-lock on appropriate son of current
node;
4)Release S-lock on current node;
5)Get son of current node and make it current;
end
Lösung Nr. 1 für Leser
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
S
= sicher
= unsicher
Lösung Nr. 1 für Leser
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
Protokoll für Schreiber:
0)
Place X-lock on root;
1)
Get root and make it the current node;
2) While current node is not a leaf do
begin
3)Place X-lock on appropriate son of current node;
4)Get son and make it the current node;
5)If current node is safe
then release all locks held on ancestors of current node;
end
Lösung Nr. 1 für Schreiber
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
X
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
X
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 1 für Schreiber
= sicher
= unsicher
Bewertung von Lösung Nr. 1
X
Durch das Protokoll wird gleich ganz am
Anfang ein X-Lock auf die Wurzel gesetzt,
obwohl dieses höchstwahrscheinlich nicht
notwendig gewesen wäre.
Es werden in diesem Moment also alle
anderen Prozesse ausgeschlossen.
Lösung Nr. 2
Lösung Nr. 2 für Leser
Protokoll für Leser:
Siehe Lösung Nr. 1
Lösung Nr. 2 für Schreiber
Protokoll für Schreiber:
0)
Place S-lock on root;
1)
Get root and make it the current node;
2) While current node is not a leaf do
begin
3)If son is not a leaf node
then place S-lock on appropriate son;
else place X-lock on appropriate son;
4)Release lock on current node;
5)Get son and make it the current node;
End
If corrent node is unsafe
then release all locks, repeat access with solution 1;
Lösung Nr. 2 für Schreiber
S
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
S
S
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
S
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
S
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
S
S
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
S
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
S
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
S
X
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
X
= sicher
= unsicher
Lösung Nr. 2 für Schreiber
X
= sicher
= unsicher
Bewertung von Lösung Nr. 2
In diesem Fall hofft man einfach, dass
das zu bearbeitende Blatt sicher ist.
Statistisch betrachtet ist dies auch relativ
wahrscheinlich. Ungefähr einmal in k
Fällen kommt es vor, dass das Blatt nicht
sicher ist.
In diesem Fall wird der Vorgang einfach
mit dem Protokoll aus der Lösung Nr.1
wiederholt.
X
Anmerkung: diese Methode eignet
sich besonders für große k gut.
Erstens ist die Wahrscheinlichkeit
für einen unsicheren Knoten gering
und zweitens ist der Baum relativ
flach.
Lösung Nr. 3
Lösung Nr. 3 für Leser
Protokoll für Leser:
Siehe Lösung Nr. 1
Lösung Nr. 3 für Schreiber
A
S
X
Semantik:
x
y
x ist kompatibel zu y
x
y
x kann zu einem y umgewandelt werden
Lösung Nr. 3 für Schreiber
Protokoll für Schreiber:
0)Place A-lock on root;
1)Get root and make it the current node;
2)While current node is not a leaf do
begin
3)place S-lock on appropriate son;
4)Get son and make it the current node;
5)If current node is safe
then release all locks held on ancestors of current
node;
end
6)If Update will be successful
then convert, top-down,all A-locks into X-locks;
Lösung Nr. 3 für Schreiber
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
S
A
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
S
A
S
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
S
A
S
Request to change to X
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
S
A
S
Request to change to X
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
S
Request to change to X
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
S
A
Request to change to X
S
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
S
A
Request to change to X
S
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
A
Request to change to X
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
X
A
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
X
X
A
A
= sicher
S
= unsicher
X
Lösung Nr. 3 für Schreiber
X
X
X
A
= sicher
S
= unsicher
X
Bewertung von Lösung Nr. 3
Vorteile:
-Prozess blockiert Leseprozesse bloß, wenn unbedingt
notwendig.
-Im Falle eines unsicheren Blattes müssen nur die A-locks in
X-locks umgewandelt werden.
Nachteile:
-Evtl. unnötiger Ausschluß von Schreibprozessen
-Zeitverlust durch Konvertierung von Sperren.
Welche Lösung nimmt man?
Alle!
In einer generalisierten Lösung haben Bayer und Schkolnick ein
Protokoll angegeben, welches alle drei Ansätze so miteinander
vereint, dass die jeweiligen Vorteile möglichst gut ausgenutzt
werden.
Literatur:
Rudolf Bayer, Mario Schkolnick: Concurrency of Operations on B-Trees.
Acta Informatica 9: 1-21 (1977)
Zusammenfassung
B-Bäume sind höhenbalancierte (Such-)Bäume, die
sich besonders für den Einsatz auf heutigen
Hardwaresystemen eignen.
Durch entsprechende Protokolle läßt sich auf BBäumen ein hoher Grad an Parallelisierung
erreichen.
Herunterladen