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