P - Datenbanksysteme Tübingen

Werbung
Datenbanksysteme II
Architektur und Implementierung von Datenbanksystemen
Winter 2009/10
Melanie Herschel
Willhelm-Schickard-Institut für Informatik
Kapitel 4
Baum-basierte Indizes
•Einführung
• ISAM
• B+ Bäume
2
Architektur und Implementierung von Datenbanksystemen | WS 2009/10
Melanie Herschel | Universität Tübingen
Effizientes Bearbeiten von Bereichsanfragen
SELECT
FROM
WHERE
AND
*
Kunden
PLZ >= 30650
PLZ < 31000
Ansatz 1
• Sortieren der Tabelle auf der Festplatte (Sortierte Datei, siehe Kapitel 3)
• Beantworten der Anfrage:
• Binäre Suche, um erstes Antwort-Record zu finden.
Seiten mit
DatenRecords
30104*
30123*
30222*
30450*
30528*
30012*
30330*
30423*
30050*
30105*
30180*
30245*
30280*
30406*
30570*
30600*
30604*
30700*
30808*
30887*
30910*
30953*
31016*
31200*
31532*
• Datei scannen, so lange die PLZ < 30100 ist.
k* = Record mit Schlüsselwert k
scan
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
3
Effizientes Bearbeiten von Bereichsanfragen
Diskussion Ansatz 1
+ Sequentieller Seitenzugriff beim Scannen.
- Wir müssen log2(#Records) Records während der Binärsuche lesen. Da die
Binärsuche darauf basiert, Große Sprünge in der Datei zu machen, müssen
wir i.A. genauso viele direkte Seitenzugriffe machen.
Einfüge- und Löschoperationen teuer.
Seiten mit
DatenRecords
30104*
30123*
30222*
30450*
30528*
30012*
30330*
30423*
30050*
30105*
30180*
30245*
30280*
30406*
30570*
30600*
30604*
30700*
30808*
30887*
30910*
30953*
31016*
31200*
31532*
-
k* = Record mit Schlüsselwert k
scan
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
4
Effizientes Bearbeiten von Bereichsanfragen
Ansatz 2
• Wir erstellen einen Index über die Daten Records.
• In diesem Index speichern wir den Schlüsselwert des ersten Records einer
Seite und ein Pointer auf den Beginn der Seite.
• Binärsuche über den Index, um die erste Seite, die der Suchanfrage
entspricht, zu finden.
Seiten mit
DatenRecords
30104*
30123*
30222*
30450*
30528*
30012*
30330*
30423*
30050*
30105*
30180*
30245*
30280*
30406*
30570*
30600*
30604*
30700*
30808*
30887*
30910*
30953*
31016*
31200*
31532*
Seiten im
Index
30104
30528
30050
30280
30604
30910
31532
• Laden der entsprechenden Seite der Daten Datei und von da an
sequentielles Lesen, bis PLZ >= 31000.
scan
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
5
Effizientes Bearbeiten von Bereichsanfragen
Diskussion Ansatz 2
+ Sequentieller Seitenzugriff beim Scannen.
+ Daten der Indexseiten entsprechen einem Bruchteil der Daten in der Daten Datei.
! Indexdatei benötigt weniger Seiten.
! Binärsuche auf Indexdatei weniger I/O Operationen.
Seiten im
Index
Seiten mit
DatenRecords
30104
30528
30050
30280
30604
30910
31532
Bei großen Daten-Dateien kann Indexdatei immer noch zu groß!für effiziente Bearbeitung
sein.
30104*
30123*
30222*
30450*
30528*
30012*
30330*
30423*
30050*
30105*
30180*
30245*
30280*
30406*
30570*
30600*
30604*
30700*
30808*
30887*
30910*
30953*
31016*
31200*
31532*
-
scan
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
6
Effizientes Bearbeiten von Bereichsanfragen
Ansatz 3: Hierarchische Indexstrukturen
• Wir wiederholen rekursiv Ansatz 2 (Index über Index usw.) bis alle Index
Einträge auf eine Seite passen.
Seiten mit
DatenRecords
30104*
30123*
30222*
30450*
30528*
30012*
30330*
30423*
30050*
30105*
30180*
30245*
30280*
30406*
30570*
30600*
30604*
30700*
30808*
30887*
30910*
30953*
31016*
31200*
31532*
Seiten im
Index über
mehrere
Ebenen
30104
30528
30050
30280
30604
30910
31532
30104
30604
! Hierarchischer Index
scan
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
7
Effizientes Bearbeiten von Bereichsanfragen
Diskussion Ansatz 3: Hierarchische Indexstrukturen
• Um ein Daten-Record zu finden, muss stets ein Knoten pro Ebene der Indexhierarchie
betrachtet werden.
• Ein Knoten entspricht einer Seite.
• Daher ist maximale Anzahl Seiten I/Os = maximale Tiefe der Indexstruktur.
• Tiefe im Allgemeinen deutlich geringer als log2(#Records) (I/O Kosten für Suche von
Ansatz 1).
! Hierarchische Indexstrukturen erlauben effizientes Bearbeiten von
Suchanfragen.
! Sequentieller Scan durch Prefetching effizient bei Bereichsanfragen.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
8
Baum-Basierte Indizes
Zwei hierarchische Indizes im Fokus
• ISAM
• Basiert direkt auf dem gerade vorgestellten Verfahren zum Erstellen einer
hierarchischen Datenstruktur.
• Statische Index Datei, daher problematisch bei Einfüge- und Löschoperationen.
• B+-Baum
• Dynamische Indexdatei, somit effizientes Einfügen und Löschen möglich.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
9
Kapitel 4
Baum-basierte Indizes
• Einführung
•ISAM
• B+-Bäume
10
Architektur und Implementierung von Datenbanksystemen | WS 2009/10
Melanie Herschel | Universität Tübingen
Index Sequential Access Method (ISAM)
• Gegeben eine Anfrage mit einer Selektion auf Feld k.
• Records der Daten-Datei sind auf Festplatte nach k sortiert.
• Dateneinträge in Blattknoten des Index (eine der 3 Varianten, siehe Kapitel 3)
• Dateneinträge und Daten-Records nach Schlüsselwert k sortiert (clustered Index).
• Indexeinträge sind <k,p> Paare (k: Schlüsselwert, p: Pointer auf eine Seite) in inneren
Knoten des Baumes.
• Eine Indexseite enthält i Schlüsselwerte und i+1 Pointer, denn Schlüsselwerte dienen als
Separatoren zwischen Pointern.
Indexeintrag
p0
k1
p1
Separator
k2
p2
...
Pointer
kn
pn
• Es gilt ki-1 < ki für i = 2, ..., n.
• Ist keys(pi) die Menge aller Schlüsselwerte, die man über pi erreicht, so gilt für jeden
Schlüssel kl in keys(pi) und ku in keys(pi+1), kl < ki+1 < ku.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
11
Index Sequential Access Method (ISAM)
p0 k1 p1 k2 p2 ... 98 pn
k >= 98
p0 9 p1 17 p2 ... kn pn
k<9
p0 k1 p1 k2 p2 ... 90 pn
p0 106 p1 k2 p2 ... kn pn
9 <= k < 17
90 <= k < 98
9* 10* 11* 12* 13* 14* 15* 16*
1* 2* 3* 4* 5* 6* 7* 8*
90* 91* 92* 93* 94* 95* 96* 97*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
12
Initialisierung eines ISAM
Anzahl Knoten pro Ebene? Im Baum?
init(file F, Searchkey k)
begin
1. Sortiere Records in F nach k auf Platte;
2. Erstelle Blattknoten der Indexstruktur;
3. p := Anzahl Seiten auf aktueller Indexebene;
4.while p > 1 do
Erstelle neue Indexebene;
end
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
13
Überlaufseiten
Innere Knoten
(statisch nach init)
...
...
Blattknoten
bzw. Primärseiten...
(statisch nach init)
...
...
...
...
Überlaufseiten für
inserts, die nicht auf
primäre Seiten passen.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
14
Einfügen von Records
insert(Searchkey k)
Finde Blattknoten L,
der Wert von k
entspricht.
L hat freie
Record Slots?
Ja
Füge Dateneintrag
k* in L ein.
Nein
Hat L
Überlaufknoten
mit freien Slots?
Ja
Füge Dateneintrag
k* in Überlaufknoten
ein.
Nein
Erstelle einen
Überlaufknoten und
verlinke ihn mit
vorangehendem Knoten.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
15
Einfügen von Records
delete(Searchkey k)
Finde Blattknoten L,
der Wert von k
entspricht.
Lösche k* aus L.
L ist
Überlaufknoten?
Nein
Ja
Ist L nach
Löschen von k*
L
leer?
Nein
Ja
Lösche L.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
16
Vor- und Nachteile einer statischen Indexdatei
Nachteil
• Die inneren Knoten der ISAM Struktur bleiben bei Lösch- und Einfügeoperationen
unverändert.
• Kann zu Indexeinträgen führen, die keinem Dateneintrag mehr entsprechen.
• Um Separatoreigenschaft von Schlüsselwerten in Indexeinträgen beizubehalten,
müssen Ketten von Überlaufseiten verwaltet werden.
! ISAM kann bei vielen Updateoperationen seine Ausgeglichenheit verlieren, da einige
Pfade von der Wurzel bis zu einem Dateneintrag deutlich länger sind als andere.
! Ineffizientere Suche.
! Um Überlaufseiten zu vermeiden, werden typischerweise 20% einer Blattseite bei der
Initialisierung frei gelassen.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
17
Vor- und Nachteile einer statischen Indexdatei
Vorteil
• Die inneren Knoten der ISAM Struktur bleiben bei Lösch- und Einfügeoperationen
unverändert.
• Bei gleichzeitigem Zugriff auf den Index durch mehrere Anwendungen sind keine
Locks auf den Indexseiten nötig.
• Locking ist problematisch bei dynamischen Indizes, insb. wenn Zugriff zu Knoten
nahe der Wurzel durch eine Anwendung gesperrt sind.
! ISAM kann die beste Indexstruktur sein, wenn Daten sich nur gering verändern.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
18
Kapitel 4
Baum-basierte Indizes
• Einführung
• ISAM
•B+Bäume
19
Architektur und Implementierung von Datenbanksystemen | WS 2009/10
Melanie Herschel | Universität Tübingen
B+-Bäume
Dynamische Indexstruktur
• Die Struktur eines B+-Baumindex ist von ISAM abgeleitet.
• Großer Vorteil: dymanisch bezüglich updates.
• Lösch- und Einfügeoperationen auf dem Baum selbst halten diesen
ausgeglichen/ausbalanciert.
• Keine Überlaufketten, da ein B+-Baum immer balanciert bleibt.
• Suchperformance hängt ausschließlich von der Höhe des B+-Baums ab
(aufgrund hoher Fan-Outs ist die Höhe selten größer als 3).
• Einfügen / Löschen von Daten in der Daten Datei führt nicht mehr zu
steigender Ineffizienz der Anfragebearbeitung.
• Der Speicherplatz eines Knotens in einem B+-Baum (ausgenommen der
Wurzel) wird garantiert zu mindestens 50% genutzt (typischerweise 2/3).
Weitherführende Literatur
R. Bayer and E.M. McCreight.
Organization and Maintenance of Large Ordered Indexes. Acta Informatica, vol. 1, no. 3, September 1972.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
20
B+-Bäume
Aufbau
Blattknoten
• Blattknoten bilden in der Praxis eine doppelt verlinkte Liste (sequence set).
• Nur Blattknoten enthalten Dateneinträge, entweder in Form der Daten Records
selbst (Dateneintrag-Variante (1)) oder Referenzen zu Daten Records
(Dateneintrag-Varianten (2) und (3)).
Aufbau eines inneren Knotens
• Die Anzahl Indexeinträge n wird durch
den Grad d eines B+-Baums beschränkt:
Indexeintrag
p0
k1
p1
Separator
k2
p2
...
Pointer
k2
p2d
• Innere Knoten: d <= n <= 2d
• Wurzel: 1 <= n <= 2d
• Gleicher interner Aufbau wie innere Knoten eines ISAM-Index.
• Knoten enthält n + 1 Pointer, wobei Pointer pi auf einen Sub-Baum zeigt, bei
dem für alle Schlüsselwerte k gilt: ki <= k < ki+1.
• p0 zeigt zu einem Sub-Baum mit Schlüsselwerten < k1, p2d zeigt aug einen
Sub-Baum mit Schlüsselwerten >= k2d.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
21
Suche in B+-Bäumen
search(Searchkey k)
function search(Searchkey k) returns nodepointer
root := Wurzel des B+Baums;
return tree_search(root, k);
end function
function tree_search(Nodepointer p, Searchkey k) returns nodepointer
if p zeigt auf einen Blattknoten then return p;
else if k < k1 then return tree_search(p0, k);
else if k >= kn then return tree_search(pn, k);
else
begin
Finde i so dass ki <= k < k+1 gilt;
return tree_search(pi, k)
end
Indexeintrag
p0
k1
p1
Separator
k2
p2
...
Pointer
k2
pn
end function
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
22
Suche in B+-Bäumen
Beispiel
Beispiel: Suche von 5* in einem B+-Baum mit Grad d = 2 (Anzahl Einträge Pro Knoten zwischen 2 und 4)
5*
13
17
24
30
5 < 13
2* 3* 5* 7*
14* 16*
19* 20* 22*
24* 27* 29*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
33* 34* 38* 39*
23
Suche in B+-Bäumen
Beispiel
Beispiel: Suche von 14* und 15* in einem B+-Baum mit Grad d = 2 (Anzahl Einträge Pro Knoten zwischen 2 und 4)
14*
15*
13
17
24
30
13 <= 14 < 17
13 <= 15 < 17
2* 3* 5* 7*
14* 16*
19* 20* 22*
24* 27* 29*
33* 34* 38* 39*
keine 15*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
24
Suche in B+-Bäumen
Beispiel: Suche von 24*
Beispiel: Suche von 24* in einem B+-Baum mit Grad d = 2 (Anzahl Einträge Pro Knoten zwischen 2 und 4)
24*
13
17
24
30
24 <= 15 < 30
2* 3* 5* 7*
14* 16*
19* 20* 22*
24* 27* 29*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
33* 34* 38* 39*
25
Einfügen in B+-Bäumen
Grundidee bei Einfügeoperationen
1.Gegeben ein Record mit Schlüsselwert k.
2.Rufe search(k) auf, um die Seite P zu finden, die neues Record enthalten soll.
3.Sei n die Anzahl Einträge in P.
a.Ist n < 2d, so ist noch genügend Platz auf P frei, und Record wird dort
gespeichert.
b.Sonst...?
Annahmen
• B+-Bäume bleiben bei Updates ausgeglichen.
• Einfüge- und Löschoperationen müssen diese Invariante beibehalten.
• Keine Überlaufketten (wegen Invariante Ausgeglichenheit)
• Kosten für search(k) sollen nur von der Höhe des Baumes abhängen, daher
können wir k* auch nicht einfach irgendwo (selbst nahe P) speichern.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
26
Einfügen in B+-Bäumen
Splitting
• Splitting: Lösung, wenn die Seite p, in die k* eingefügt werden müsste voll ist.
• Dabei wird p in zwei Seiten p und p’ aufgeteilt und ein neuer Separator muss
in den Elternknoten von p eingefügt werden.
• Splitting kann sich rekursiv fortsetzen und kann letztendlich zu einem Split
des Wurzelknotens führen.
• Bei einem Split des Wurzelknotens wird ein neuer Wurzelknoten generiert und
die Höhe des Baums erhöht sich um 1.
• Die Einträge von p und der neue Eintrag mit Schlüsselwert k werden auf den
Seiten p und p’ gleichmäßig verteilt.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
27
Einfügen in B+-Bäumen
Beispiel Splitting
Beispiel: Einfügen von 8*
8*
24
5
13
30
13
17
24
30
8 < 13
5*
7* 5*
8* 7*
2*
2* 3*
3*
14* 16*
19* 20* 22*
24* 27* 29*
33* 34* 38* 39*
Seite für 8* voll
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
28
Einfügen in B+-Bäumen
Beispiel Splitting
Beispiel: Einfügen von 8*
17
5
13
24
14* 16*
2* 3*
5* 7* 8*
19* 20* 22*
30
24* 27* 29*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
33* 34* 38* 39*
28
Einfügen in B+-Bäumen
Splitting
Split einer Seite auf Blattebene P in 2 Seiten P und P’
• Die Hälfte der Dateneinträge auf P bleibt auf P (2* und 3* im Beispiel)
• Die andere Hälfte wird von P auf P’ kopiert und der neue Wert wird hinzugefügt (5*,
7*und 8* im Beispiel).
• Neue Seite auf Blattebene muss in Indexeinträgen reflektiert werden (z.B., <5,p>)
• Copy up: wir kopieren den ersten Schlüsselwert von P’ und fügen diesen zu
entsprechendem Indexknoten als neuen Separator hinzu.
• Redundanz der Schlüsselwerte.
• Durch Redundanz können Bereichsanfragen nur mittels Blattknoten beantwortet
werden --> Effizienzsteigerung
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
29
Einfügen in B+-Bäumen
Splitting
Split einer inneren Seite P in 2 Seiten P und P’
• Sei N die Anzahl Indexeinträge vor Einfügeoperation, die zu Split führt.
• In diesem Fall müssen beim Einfügen N+1 Einträge verteilt werden.
• Indexeintrag i, 1 <= i < (N+1)/2 auf P (z.B., <5. p1>, <13,p2>)
• Indexeintrag i, (N+1)/2 < i <= N+1 auf P’ (z.B., <24. p3>, <30, p4>)
• Push up: Indexeintrag (N+1)/2 nicht auf P oder P’ gespeichert, sondern
erscheint nun als Separator zwischen P und P’ eine Ebene höher (z.B., 17).
• Keine Redundanz von Schlüsselwerten in inneren Knoten des B+-Index.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
30
Einfügen in B+-Bäumen
Splitting
Split des Wurzelknotens
•Splitting beginnt immer auf der Blattebene, wenn ein neuer Suchschlüsselwert
hinzugefügt wird.
•Rekursives Splitting kann sich bis zur Wurzel fortsetzen.
•Splitting der Wurzel
• Wie Splitting eines inneren Knotens.
• Erstellen einer neuen Wurzel, die den pushed-up Separator enthält.
•Der Wurzelknoten ist der einzige Knoten der Indexstruktur der einen Füllgrad
< 50% aufweisen kann.
•Root Splitting ist das einzige Ereignis, das die Höhe der Baumstruktur erhöht.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
31
Einfügen in B+-Bäumen
Algorithmus
Einfügen eines Eintrags e in einen B+-Baum mit Grad d - Teil 1
procedure insert(nodepointer, e, e')
if nodepointer zeigt auf einen Blattknoten L then
if L hat freien Speicherplatz then
begin
Füge e auf L ein;
Setze e’ auf null;
return;
end
else
begin
Split L, indem die ersten d Indexeinträge auf L bleiben und die restlichen auf neu
erstelltem Knoten L’ verschoben werden;
e’ := Indexeintrag <k,p>, wobei p auf L’ zeigt und k kleinster Schlüsselwert von
L’;
Setze Nachbarpointer von L und L’ neu;
return;
end
if nodepointer zeigt auf einen inneren Knoten N then ...
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
32
Einfügen in B+-Bäumen
Algorithmus
Einfügen eines Eintrags e in einen B+-Baum mit Grad d - Teil 2
...
if nodepointer zeigt auf einen inneren Knoten N then
begin
Finde i so dass ki < Schlüsselwert von e < ki+1;
insert(pi, e, e’);
if e’ = null then return;
else if N hat freien Speicherplatz then
begin
Füge Indexeintrag von e’ auf N ein;
e’ := null;
return;
end
else
begin
Split N, indem die ersten d Schlüssel und die ersten d+1 Pointer auf N bleiben und die letzten d
Schlüssel und d+1 Pointer auf neuen Knoten N’ verschoben werden;
e’ := Indexeintrag <k,p>, wobei p auf N’ zeigt und k kleinster Schlüsselwert von N’;
if N ist Wurzelknoten then
begin
N’’ := neuer Knoten mit p0 = Pointer auf N und <k1, p1> = e’;
Setzte den Zeiger, der auf die Wurzel des B+-Baums zeigt auf N’’;
return;
end
end
end
33
end procedure Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
Einfügen in B+-Bäumen
Wiederverteilung (Redistribution)
•Idee: Umverteilen von Einträgen im Baum um durchschnittlichen Füllgrad zu erhöhen.
•Ziel: kompakterer Baum, dadurch weniger Disk I/O.
Beispiel: Einfügen von 8* bei Wiederverteilung
8*
13
2* 3* 5* 7*
14* 16*
17
24
19* 20* 22*
30
24* 27* 29*
Seite für 8* voll
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
33* 34* 38* 39*
34
Einfügen in B+-Bäumen
Wiederverteilung (Redistribution)
•Idee: Umverteilen von Einträgen im Baum um durchschnittlichen Füllgrad zu erhöhen.
•Ziel: kompakterer Baum, dadurch weniger Disk I/O.
Beispiel: Einfügen von 8* bei Wiederverteilung
8*
13
8
2* 3* 5* 7*
Seite für 8* voll
14*
8* 16*
14* 16*
17
24
19* 20* 22*
30
24* 27* 29*
Nachbar noch Platz
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
33* 34* 38* 39*
34
Einfügen in B+-Bäumen
Wiederverteilung (Redistribution)
Wiederverteilung in Blattknoten
•Gegeben: Seite P, die voll ist und in die k* eingefügt werden müsste.
• Lade Nachbar P’ in den Hauptspeicher.
• Ein Knoten P’ ist Nachbar von P wenn P’ direkt links bzw. rechts von P ist und
P und P’ den gleichen Elternknoten haben.
• Ist P’ ebenfalls voll, wird Splitting durchgeführt.
• Hat P’ freien Platz
• Sei E = entries(P) ! entries(P’) ! {k*} die Menge aller Dateneinträge, die über P
und P’ wiederverteilt werden. Es werden jeweils |E|/2 Einträge auf P und P’
gespeichert.
• Aktualisiere Separator im Elternknoten.
Wiederverteilung in inneren Knoten
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
35
Löschen in B+-Bäumen
Grundidee bei Löschoperationen
1.Gegeben ein Record mit Schlüsselwert k.
2.Rufe search(k) auf, um die Seite P zu finden, aus der Record gelöscht wird.
3.Sei n die Anzahl Einträge in P.
a.Ist n > d, so ist noch genügend Platz auf P besetzt, und Record wird
einfach gelöscht.
b.Sonst...?
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
36
Löschen in B+-Bäumen
Beispiel für einfaches Löschen (Füllgrad >= d)
Beispiel: Löschen von 19* aus einem Baum mit d = 2
17
5
2* 3*
13
14*
5* 16*
7* 8*
24
14* 16*
30
19* 20* 22*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
24* 27* 29*
37
Löschen in B+-Bäumen
Beispiel für einfaches Löschen (Füllgrad >= d)
Beispiel: Löschen von 19* aus einem Baum mit d = 2
17
5
2* 3*
13
14*
5* 16*
7* 8*
24
14* 16*
30
19* 22*
20*
20* 22*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
24* 27* 29*
37
Löschen in B+-Bäumen
Wiederverteilung (Redistribution)
Beispiel: Löschen von 20* aus einem Baum mit d = 2
17
5
2* 3*
13
14*
5* 16*
7* 8*
24
14* 16*
30
19* 22*
20*
20* 22*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
24* 27* 29*
38
Löschen in B+-Bäumen
Wiederverteilung (Redistribution)
Beispiel: Löschen von 20* aus einem Baum mit d = 2
17
5
2* 3*
13
14*
5* 16*
7* 8*
27*
24
14* 16*
30
19* 24*
20*
22*
20* 22*
22*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
24*
27* 27*
29* 29*
38
Löschen in B+-Bäumen
Merge von Blattknoten
Beispiel: Löschen von 24* aus einem Baum mit d = 2, Teil 1 (Merge der Blattknoten)
17
5
2* 3*
13
14*
5* 16*
7* 8*
27
14* 16*
30
19* 24*
20*
22*
20* 22*
22*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
27* 29*
39
Löschen in B+-Bäumen
Merge von Blattknoten
Beispiel: Löschen von 24* aus einem Baum mit d = 2, Teil 1 (Merge der Blattknoten)
17
5
2* 3*
13
14*
5* 16*
7* 8*
27
30
14* 16*
30
19* 27*
20*
22*
20* 29*
22*
24*
22*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
39
Löschen in B+-Bäumen
Merge von inneren Knoten
Beispiel: Löschen von 24* aus einem Baum mit d = 2, Teil 2 (Merge innerer Knoten)
5
2* 3*
13
17
14*
5* 16*
7* 8*
30
14* 16*
19* 27*
20*
22*
20* 29*
22*
24*
22*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
40
Löschen in B+-Bäumen
Redistribution über innere Knoten
Beispiel: Löschen von 24* aus einem Baum mit d = 2, Teil 1 (Merge der Blattknoten)
22
5
13
17
20
27
30
...
2* 3*
...
22* 24*
14* 16*
14*
5* 16*
7* 8*
20* 21*
27* 29*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
41
Löschen in B+-Bäumen
Redistribution über innere Knoten
Beispiel: Löschen von 24* aus einem Baum mit d = 2, Teil 1 (Merge der Blattknoten)
22
5
13
17
20
30
...
2* 3*
22* 24*
27* 29*
14* 16*
14*
5* 16*
7* 8*
...
20* 21*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
41
Löschen in B+-Bäumen
Redistribution über innere Knoten
Beispiel: Löschen von 24* aus einem Baum mit d = 2, Teil 2 (Wiederverteilung über Elternknoten)
22
17
5
13
17
20
27
20
22
30
30
...
2* 3*
14*
5* 16*
7* 8*
14* 16*
...
20* 21*
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
22* 24*
27* 29*
42
Löschen in B+-Bäumen
Algorithmus
Löschen eines Eintrags e in einen B+-Baum mit Grad d - Teil 1
procedure delete(parentpointer, nodepointer, e, e')
if nodepointer zeigt auf einen Blattknoten L then
if L hat Füllgrad > d then begin
Lösche e aus L;
Setze e’ auf null;
return;
end
else begin
S:= Nachbar von L;
if S hat Füllgrad > d then begin
Redistribution zwischen L und S;
R := L wenn L rechts von S ist, sonst S;
P := Eintrag in Elternknoten von L und S, der auf R zeigt;
Ersetze Schlüsselwert von P durch neuen niedrigsten Wert von R;
Setze e’ auf null;
return;
end
else begin
Verschmelze L und S;
R := L wenn L rechts von S ist, sonst S;
e’ := Indexeintrag im Elternknoten, der auf R zeigt;
Verschiebe alle Einträge von R auf den linken Knoten;
Lösche R und setzte entsprechende Nachbarpointer um;
return;
end
end
if nodepointer
auf einen inneren
Knoten N then
Architektur undzeigt
Implementierung
von Datenbanksystemen
| WS ...
2009/10 | Melanie Herschel | Universität Tübingen
43
Löschen in B+-Bäumen
Algorithmus
Löschen eines Eintrags e in einen B+-Baum mit Grad d - Teil 2
if nodepointer zeigt auf einen inneren Knoten N then begin
Finde i so dass ki < Schlüsselwert von e < ki+1;
delete(nodepointer, pi, e, e’);
if e’ = null then return;
else begin
Entferne Indexeintrag e’ von N;
if N hat Füllgrad > d then begin
Setze e’ auf null;
return;
end
else begin
S := Nachbar von N;
if S hat Füllgrad > d then begin
Gleichmäßige Verteilung von Einträgen zwischen S und N über den Elternknoten;
Setze e’ auf null;
return;
end
else begin
Verschmelze N und S;
R := L wenn L rechts von S ist, sonst S;
e’ := Indexeintrag in Elternknoten, der auf R zeigt;
Ziehe Separator vom Elternknoten in den linken der Knoten S und L;
Verschiebe alle Einträge von R in den linken Knoten;
Lösche M;
return;
end
end
end
end
end procedure
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
44
These Slides. . .
Duplikate in B+-Bäumen
•
•
. . . prepared/updated throu
for bugs and please let m
Posted to course web hom
• Die Algorithmen search, insert, delete nehmen an, dass keine Duplikate in den
bring a printout and tak
Suchschlüsselwerten vorkommen.
• Per Definition stimmt diese Annahme bei Primär- bzw. Unique-Indizes. Example
• Stimmt diese Annahme nicht, gibt es 2 Lösungsansätze
1. Die Algorithmen werden angepasst (Unterscheidung zwischen
Dateneintragsvarianten 1 - 3 ).
Open Issues/Questions
Take notes.
2. Der Suchschlüssel wird mit einer eindeutigen, vom DBMS generierten ID erweitert
Code Snippets, Algorithms
um einen Unique-Index zu simulieren.
IBM DB2 Specifics
Handhabung von Duplikaten in Suchschlüsselwerten in DB2
Since duplicate keys add to the B+-tree complexity, IBM DB2
forces uniqueness by forming a composite key of the form <k, id>
where id is the unique tuple identity of the data record with
key k.
Tuple identities
are system-maintained unique identitifers for each tuple in a table, and
are not dependent on tuple order and never rise again.
If possible and insightful, discu
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
45
Key Compression in B+-Bäumen
• I/O Kosten bei Verwendung von hierarchischen Indizes proportional zur Höhe des Baumes.
• Fan-out F bestimmt Höhe h des Baumes für einer Datei von N Seiten : h = logF N
• Für einen Indexeintrag <k, pointer zu pi> gilt i.A. |k| >> |pointer|
• Haben wir lange Schlüssel wie “Devarakonda Venkataramana Sathyanarayana Seshasayee
Yellamanchali Murthi”, so haben wir einen geringen fan-out.
• Schlüsselwerte werden nur zur Weiterleitung zum entsprechenden Dateneintrag verwendet.
! Der Schlüsselwert muss nicht dem exakten Datenwert entsprechen, sondern muss nur die
Separatoreigenschaft gewährleisten.
! Minimierung der Schlüsselgröße |k| für höheren Fan-out.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
46
Key Compression in B+-Bäumen
• I/O Kosten bei Verwendung von hierarchischen Indizes proportional zur Höhe des Baumes.
• Fan-out F bestimmt Höhe h des Baumes für einer Datei von N Seiten : h = logF N
• Für einen Indexeintrag <k, pointer zu pi> gilt i.A. |k| >> |pointer|
• Haben wir lange Schlüssel wie “Devarakonda Venkataramana Sathyanarayana Seshasayee
Yellamanchali Murthi”, so haben wir einen geringen fan-out.
• Schlüsselwerte werden nur zur Weiterleitung zum entsprechenden Dateneintrag verwendet.
! Der Schlüsselwert muss nicht dem exakten Datenwert entsprechen, sondern muss nur die
Separatoreigenschaft gewährleisten.
! Minimierung der Schlüsselgröße |k| für höheren Fan-out.
Beispiel: Key Compression in einem B+-Baum
...
Daniel Lee
David Smith
Devarakonda...
...
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
46
Key Compression in B+-Bäumen
• I/O Kosten bei Verwendung von hierarchischen Indizes proportional zur Höhe des Baumes.
• Fan-out F bestimmt Höhe h des Baumes für einer Datei von N Seiten : h = logF N
• Für einen Indexeintrag <k, pointer zu pi> gilt i.A. |k| >> |pointer|
• Haben wir lange Schlüssel wie “Devarakonda Venkataramana Sathyanarayana Seshasayee
Yellamanchali Murthi”, so haben wir einen geringen fan-out.
• Schlüsselwerte werden nur zur Weiterleitung zum entsprechenden Dateneintrag verwendet.
! Der Schlüsselwert muss nicht dem exakten Datenwert entsprechen, sondern muss nur die
Separatoreigenschaft gewährleisten.
! Minimierung der Schlüsselgröße |k| für höheren Fan-out.
Beispiel: Key Compression in einem B+-Baum
...
Daniel Lee
David Smith
Devarakonda...
...
?
...
Dan
Dav
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
Dev...
...
46
Key Compression in B+-Bäumen
• I/O Kosten bei Verwendung von hierarchischen Indizes proportional zur Höhe des Baumes.
• Fan-out F bestimmt Höhe h des Baumes für einer Datei von N Seiten : h = logF N
• Für einen Indexeintrag <k, pointer zu pi> gilt i.A. |k| >> |pointer|
• Haben wir lange Schlüssel wie “Devarakonda Venkataramana Sathyanarayana Seshasayee
Yellamanchali Murthi”, so haben wir einen geringen fan-out.
• Schlüsselwerte werden nur zur Weiterleitung zum entsprechenden Dateneintrag verwendet.
! Der Schlüsselwert muss nicht dem exakten Datenwert entsprechen, sondern muss nur die
Separatoreigenschaft gewährleisten.
! Minimierung der Schlüsselgröße |k| für höheren Fan-out.
Beispiel: Key Compression in einem B+-Baum
...
Daniel Lee
David Smith
Devarakonda...
...
?
...
Dan
Dav
Dev...
...
k < David Smith
Dante Wu
Darius Rex
...
Davey Jones
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
46
Key Compression in B+-Bäumen
• I/O Kosten bei Verwendung von hierarchischen Indizes proportional zur Höhe des Baumes.
• Fan-out F bestimmt Höhe h des Baumes für einer Datei von N Seiten : h = logF N
• Für einen Indexeintrag <k, pointer zu pi> gilt i.A. |k| >> |pointer|
• Haben wir lange Schlüssel wie “Devarakonda Venkataramana Sathyanarayana Seshasayee
Yellamanchali Murthi”, so haben wir einen geringen fan-out.
• Schlüsselwerte werden nur zur Weiterleitung zum entsprechenden Dateneintrag verwendet.
! Der Schlüsselwert muss nicht dem exakten Datenwert entsprechen, sondern muss nur die
Separatoreigenschaft gewährleisten.
! Minimierung der Schlüsselgröße |k| für höheren Fan-out.
Beispiel: Key Compression in einem B+-Baum
...
Daniel Lee
David Smith
Devarakonda...
...
k < David Smith
Dante Wu
Darius Rex
...
Davey Jones
?
...
Dan
Dav
Dev...
...
Überprüfe größten Wert für k im
linken Unterbaum (analog: kleinster
Wert im rechten Unterbaum)
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
46
Key Compression in B+-Bäumen
• I/O Kosten bei Verwendung von hierarchischen Indizes proportional zur Höhe des Baumes.
• Fan-out F bestimmt Höhe h des Baumes für einer Datei von N Seiten : h = logF N
• Für einen Indexeintrag <k, pointer zu pi> gilt i.A. |k| >> |pointer|
• Haben wir lange Schlüssel wie “Devarakonda Venkataramana Sathyanarayana Seshasayee
Yellamanchali Murthi”, so haben wir einen geringen fan-out.
• Schlüsselwerte werden nur zur Weiterleitung zum entsprechenden Dateneintrag verwendet.
! Der Schlüsselwert muss nicht dem exakten Datenwert entsprechen, sondern muss nur die
Separatoreigenschaft gewährleisten.
! Minimierung der Schlüsselgröße |k| für höheren Fan-out.
Beispiel: Key Compression in einem B+-Baum
...
Daniel Lee
David Smith
Devarakonda...
...
k < David Smith
Dante Wu
Darius Rex
...
Davey Jones
...
Dan
Davi
Dav
Dev...
...
Überprüfe größten Wert für k im
linken Unterbaum (analog: kleinster
Wert im rechten Unterbaum)
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
46
Bulk-Loading eines B+-Baums
• Ziel: Gegeben eine Tabelle T mit 1.000.000 Tupeln, erstelle einen B+-Baum-Index über
Attributwert A von T.
1. Alternative
• Führe 1.000.000 Mal insert() über wachsende Baum-struktur aus.
! Das DBMS muss 1.000.000 Mal den wachsenden Baum traversieren.
2. Alternative: Bulk-loading
Bulk-loading Algorithmus
• Für Dateneintragsvarianten 2 und 3
1.Für jedes Record in T mit Suchschlüsselwert k, erstelle eine sortierte Liste L von
Seiten mit Blatteinträgen k*.
• Für Variante 1 erstellen wir in
2.Sei R eine leere Indexseite.
3.R.po := Erster Pointer in R, der auf die erste Seite von L zeigt.
4.Für jede Seite S in L
a.Erstelle einen Indexeintrag I := <minimales k von S, Pointer auf S>.
b.Füge I so weit rechts wie möglich in eine Seite R direkt über der Blattebene ein.
c.Ist R voll, wird diese Seite gesplittet.
impliziert dies keine Sortierung der
Daten Records.
diesem Fall einen clustered Index.
• Splitting passiert stets auf dem am
weitesten rechts liegenden Pfad
von den Blättern zur Wurzel.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
47
Zusammenfassung
ISAM
• Statische Indexdatei, Einfüge- und Löschoperationen verwenden Überlaufseiten.
• Nachteil: Höhe des Baumes und somit I/O Kosten schwanken und bei zunehmenden
Einfügeoperationen kann Effizienz wegen langer Ketten von Überlaufseiten sinken.
• Vortei: Keine Locks auf Indexseiten bei gleichzeitigem Zugriff verschiedener Prozesse nötig.
B+-Baum
• Dynamische Indexdatei, die garantiert, dass alle Wurzel-zu-Blatt Pfade gleich lang sind.
• Änderung der Seiten im Index Einfüge- und Löschoperationen möglich
• splitting bzw merging
• redistribution
• Key Compression, um einen höheren Fan-out zu erzielen.
• Bulk Loading zur effizienten Initialisierung einer Indexdatei.
Architektur und Implementierung von Datenbanksystemen | WS 2009/10 | Melanie Herschel | Universität Tübingen
48
Herunterladen