8. Physische Datenorganisation ?
8. Physische Datenorganisation ?
8. Physische Datenorganisation ?
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>8.</strong> <strong>Physische</strong> <strong>Datenorganisation</strong><br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<br />
<br />
<br />
Datenbanken<br />
– externe Ebene<br />
– konzeptionelle Ebene<br />
– physische Ebene<br />
Leistungsfähigkeit eines DBMS<br />
– maßgeblich bestimmt durch die Datenstrukturen auf der physischen Ebene<br />
Abbildung der konzeptionellen Ebene auf die physische Ebene<br />
Zugriffsstrukturen<br />
Pufferorganisation<br />
Externspeicherverwalt.<br />
ext. Speichermedium<br />
Datenobjekte:<br />
Datensätze<br />
Relationen<br />
Datenobjekte:<br />
Seiten<br />
Dateien<br />
Abbildung<br />
?<br />
Seite 302
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Architektur<br />
AWP 1 AWP 2 • • • AWP n<br />
Anfragebearbeitung<br />
logische Seitenreferenzen<br />
Systempufferverwaltung<br />
physische Seitenreferenzen<br />
Externspeicherverwaltung<br />
Plattenzugriffe<br />
Algorithmen<br />
– Implementierung der<br />
Operatoren der<br />
relationalen Algebra<br />
Zugriffstrukturen<br />
– Hilfsdatenstrukturen für<br />
den schnellen Zugriff auf<br />
die relevanten<br />
Datensätze<br />
Speicherstrukturen<br />
– <strong>Physische</strong><br />
Repräsentation der<br />
Relationen<br />
Seite 303
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<strong>8.</strong>1 Aufbau eines Magnetplattenspeichers<br />
<br />
<br />
<br />
Magnetplatten<br />
– seit über 40 Jahren die Technologie zur persistenten Datenspeicherung<br />
Eigenschaften<br />
– günstig: 10GB für 1€<br />
– robust<br />
– große Speicherkapazität: bis 1 TB/Platte<br />
– langsam<br />
Entwicklung der Plattenspeichertechnologie<br />
Plattenspeicher 1957<br />
Plattenspeicher heute<br />
(2.5” Durchmesser)<br />
0,85 Zoll Durchmesser<br />
RAID-Plattensysteme<br />
Seite 304
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Funktionsweise von Plattensystemen<br />
Festplatte besteht aus einem Stapel übereinander liegender Magnetplatten.<br />
– Jede Oberfläche hat einen Lese/Schreibarm.<br />
– Lese/Schreibarme bewegen sich synchron, wobei nur einer davon<br />
aktiv ist.<br />
Strukturierung:<br />
– Zylinder, Spur und Sektor (Seite)<br />
– Zugriff über einen Kamm mit Schreib-/Leseköpfen, der quer zur<br />
Rotation bewegt wird<br />
Zugriff auf Seiten<br />
– Positionierung des Schreib-/Lesekopfes (Seek)<br />
Zeit für die Armbewegung [5 ms]<br />
– Warten auf den Sektor / Seite (Rotationsverzögerung)<br />
halbe Rotationszeit der Platte [3 - 4,3 ms]<br />
– Übertragung der Seite (Transferzeit)<br />
Zeit für Schreiben bzw. Lesen einer 4 KByte Seite [0,05 ms]<br />
– Kontrolle der Übertragung: Zeit des Platten-Controllers [ < 1 ms]<br />
Zeit für Zugriff einer Seite >> Zeit für Hauptspeicherzugriff !<br />
Seite 305
Systempuffer-Verwaltung<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<br />
Umsetzung der logischen in physische Seitenadressen<br />
Schnittstelle:<br />
Bereitstellen einer DB-Seite im DB-Puffer (zur exklusiven oder gemeinsamen Benutzung).<br />
Bereitstellen einer neuen Seite<br />
Freigeben einer Seite<br />
intern verwendete Funktionen:<br />
Effiziente Suche im Puffer<br />
– Hash-Tabelle<br />
Suche nach freiem Platz im Puffer (Frames)<br />
Bestimmen einer Seite (Opfer), die aus dem Puffer entfernt wird.<br />
– Least-Recently-Used: Verkettung der Seiten nach dem letzten Zeitpunkt der Nutzung<br />
Schreiben modifizierter Seiten<br />
– Erfolgt in Absprache mit der Transaktionsverarbeitung<br />
Seite 306
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<strong>8.</strong>2 Speicherstrukturen<br />
<br />
<br />
<br />
Datenbanken werden typischerweise auf eine Datei bzw. eine Menge von Dateien abgebildet.<br />
Beim Anlegen der Datenbank werden noch wichtige Parameter mitgegeben:<br />
– Initiale Dateigröße<br />
– Maximale Dateigröße<br />
– Inkrementelle Größe<br />
Beim Anlegen einer Relation wird der Relation eine initiale Seite zugewiesen.<br />
– Alle weiteren Seiten werden dann miteinander verkettet.<br />
Tuple-Identifier (TID auch RowID und RID genannt)<br />
<br />
TID ist eine eindeutige Kennung des Datensatzes innerhalb der Datenbank. Dieser setzt sich<br />
zusammen aus der Seitenadresse und einer relativen Adresse innerhalb der Seite.<br />
Der markierte Datensatz hat die TID (42,3)<br />
Seitenadresse: 42<br />
Seite 307
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<br />
– TIDs sind invariant bzgl. Verschiebungen innerhalb einer Seite<br />
Die TID ändert sich auch nicht, wenn ein Datensatz in eine andere Seite verschoben wird.<br />
– Anlegen eines Stellvertreters in der ursprünglichen Seite, der auf die neue Position<br />
verweist.<br />
j<br />
(4711,j)<br />
<br />
<br />
Seitenadresse: 42 Seitenadresse 4711<br />
Vorteil des TID-Konzepts<br />
– TID sind stabil<br />
Nachteil<br />
– hohe Zugriffskosten, wenn es viele Stellvertreter gibt.<br />
==> Reorganisation der Datenbank<br />
Seite 308
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Recordmanager<br />
<br />
Komponente zur Verwaltung der Datensätze in Seiten<br />
Zentrale Aufgabe des Recordmanager<br />
<br />
<br />
Für einen neuen Datensatz soll eine Seite mit genügend freiem Speicherplatz gefunden werden.<br />
– Ggf. muss hierfür eine neue Seite angefordert werden.<br />
Wünschenswert wäre auch eine Ballung (Clusterung) der Datensätze:<br />
– Datensätze, die oft gemeinsam zugegriffen werden, sollen auch gemeinsam in einer Seite<br />
liegen.<br />
Unterscheidung<br />
<br />
<br />
Datensätze mit konstanter Länge<br />
– einfache Lösungen: z. B. Verkettung der Seiten, die noch Platz haben.<br />
Datensätze mit variabler Länge<br />
– relativ kompliziert<br />
Seite 309
Zugriff auf die Basisrelationen<br />
Bei Datenbanken unterscheidet man zwischen zwei Zugriffsarten:<br />
<br />
<br />
Relationen-Scan<br />
– Durchlaufen der zu der Relation gehörenden Seiten.<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Index-Scan<br />
– Zugriff erfolgt indirekt über eine Hilfsstruktur, in der die Verweise (TID) auf die<br />
Datensätze (zusammen mit z. B. einem Attribut) der Relation hinterlegt sind<br />
Index auf dem<br />
Attribut Lohn<br />
der Relation Personal<br />
(1000, (42,3)) (2100, (42,1)) (3000,(4711,2)<br />
j<br />
(4711,j)<br />
Seitenadresse: 42 Seitenadresse 4711<br />
Seite 310
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Ziel:<br />
<strong>8.</strong>3 Indexstrukturen<br />
Effizienter Zugriff auf die Datensätze einer Relation, die ein bestimmtes Prädikat erfüllen.<br />
Strukturen sollen keinen erheblichen Mehraufwand verursachen.<br />
– Änderungsoperationen<br />
– Speicherplatz<br />
Klassifizierung<br />
Eindimensionale Prädikate (bzgl. einem Attribut)<br />
– Exakte Prädikate: Dyn. Hash-Verfahren<br />
<br />
<br />
<br />
– Bereichsprädikate und exakte Prädikate: B + - Bäume<br />
Mehrdimensionale Prädikate<br />
– Bereichsprädikate<br />
Metrische Prädikate<br />
– Nachbarprädikate<br />
Mengenbasierte Prädikate<br />
Seite 311
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Anforderungen<br />
Allgemeine Ziele beim Entwurf von Indexstrukturen<br />
<br />
<br />
Hohe Speicherplatzausnutzung<br />
Kurze Antwortzeiten für eine Operation<br />
– Benötigte Zeit entspricht dabei der Anzahl der Seitenzugriffe<br />
Operationen<br />
<br />
<br />
Suchanfragen<br />
– Einlesen einer Teilmenge der Daten einer Relation<br />
– Exakte Suche: select * from R where R.A = c<br />
– Bereichssuche: select * from R where c1 R.A and R.A c2<br />
Einfügen, Löschen und Ändern<br />
– Reorganisationen der Daten des Index erforderlich<br />
– Reorganisationen sollen nur lokal auf einem kleinen Teil der Daten einwirken<br />
(dynamische Indexstrukturen)<br />
Seite 312
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<strong>8.</strong>3.1 Suchbäume<br />
<br />
Wichtige Datenstruktur für Hauptspeicher und Hintergrundspeicher zur Unterstützung von<br />
Bereichsprädikaten (siehe Prakt. Info II)<br />
Definitionen (Baum)<br />
<br />
Ein Baum ist eine endliche Menge T von Elementen, Knoten genannt, mit:<br />
(1) Es gibt einen ausgezeichneten Knoten w(T), die Wurzel von T<br />
(2) Die restlichen Knoten sind in m 0 disjunkte Mengen T 1 , …, T m zerlegt, die<br />
ihrerseits Bäume sind. T 1 , …, T m heißen Teilbäume der Wurzel w(T).<br />
Der Grad eines Knotens x, deg(x), ist gleich der Anzahl der Teilbäume von x. Gilt deg(x) = 0,<br />
so nennt man x ein Blatt.<br />
<br />
<br />
<br />
Jeder Knoten x außer w(T) hat einen eindeutigen Vorgänger vm(x), auch als Vater/Mutter<br />
bezeichnet.<br />
Ein Pfad in einem Baum ist eine Folge von Knoten x 1 , …, x n mit: x i = vm(x i+1 ), i = 1, …, n-1.<br />
Die Länge des Pfades ist n.<br />
Die Höhe eines Baums entspricht der Länge des längsten Pfads.<br />
Seite 313
Definition (Suchbaum)<br />
<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Sei auf der Menge T eine Ordnungsrelation “
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Die schlechte Nachricht!<br />
<br />
<br />
Einfache Abbildung von binären Knoten auf Seiten führt zu schlechten Strukturen.<br />
– im schlechtesten Fall: ein Knotenzugriff = ein Plattenzugriff<br />
– exakte Suche ist dann sehr teuer<br />
z. B. für 10 7 Datensätze beträgt die Höhe bereits 23<br />
Binäre Suchbäume sind also nicht für die Verwaltung auf dem Externspeicher geeignet.<br />
binärer Baum<br />
ideale Baumstruktur für den Externspeicher<br />
Zentrale Frage (bis Ende der 60er Jahre):<br />
<br />
Gibt es eine effiziente Zugriffsstruktur für einen seitenorientierten Externspeicher?<br />
Seite 315
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Prinzipien<br />
<br />
<br />
<strong>8.</strong>4 B + -Bäume<br />
Im Gegensatz zu binären Bäumen enthält ein Knoten viele Einträge/Sätze<br />
– 1:1-Beziehung zwischen Knoten und Seiten!<br />
– Daten werden exklusiv in den Blättern verwaltet<br />
Basieren auf dem Konzept von<br />
– ISAM (Index Sequential Access Method)<br />
statisch: globale Reorganisation periodisch erforderlich<br />
– B-Bäumen (Bayer & McCreight, 1972)<br />
Funktionsumfang und Leistung<br />
<br />
<br />
<br />
Leistung des B+-Baums hängt von dem Verzweigungsgrad b eines Knotens ab.<br />
Suchfunktionen:<br />
– Exaktes Prädikat<br />
– Bereichsprädikat<br />
Effizienz (Speicherplatz u. Antwortzeiten) ist asymptotisch unabhängig von der<br />
Einfügereihenfolge.<br />
Seite 316
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Definition (B+-Baum)<br />
Ein B + -Baum vom Typ (b, c) ist ein Baum mit folgenden Eigenschaften:<br />
1. Jeder Weg von der Wurzel zum Blatt hat die gleiche Länge.<br />
2. Die Wurzel ist ein Blatt oder hat mindestens 2 und höchstens 2b-1 Söhne.<br />
3. Jeder Zwischenknoten hat mindestens b und höchstens 2b-1 Söhne.<br />
4. Jedes Blatt hat mindestens c und höchstens 2c-1 Einträge.<br />
<br />
Zwischenknoten:<br />
p 0 k 1 p 1 k 2 p 2 • • • k m p m frei<br />
– p i = Zeiger Sohnseite, k i = Schlüssel<br />
– es gilt stets: k i < k i+1 für 0 < i < m.<br />
<br />
Blattknoten:<br />
V k 1 TID 1 k 2 • • • k m frei<br />
TID 2<br />
TID m<br />
N<br />
– TID i = Verweis auf den Satz mit Schlüssel k i<br />
– N = Zeiger auf den rechten Blattknoten<br />
– V = Zeiger auf den linken Blattknoten<br />
Seite 317
Eigenschaften des B + -Baums<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<br />
lokale Ordnungserhaltung:<br />
Für jeden Zwischenknoten Z mit j Schlüsseln k 1 ,…,k j und (j+1) Söhnen p 0 ,…,p j gilt:<br />
Für jedes i, 1 i j, sind alle Schlüssel in dem zu p i-1 gehörenden Teilbaum nicht größer als k i<br />
und k i ist kleiner als alle Schlüssel, die im Teilbaum von p i liegen.<br />
B + -Baum<br />
Datenraum<br />
… k … …<br />
i<br />
k i k i<br />
k i<br />
k i<br />
k i<br />
Seite 318
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Beispiel<br />
b=2, c=2<br />
Beachte: b und c sind nur aus Gründen der Übersicht so klein gewählt!<br />
4 6<br />
1 TID 3 TID 4 TID 5 TID 6 TID 7 TID 9 TID 10 TID<br />
Seite 319
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Wie hoch kann ein B + -Baum werden?<br />
Welche Höhe besitzt ein B + -Baum zur Abspeicherung von N Datensätzen im schlechtesten<br />
Fall?<br />
Oder anders gefragt:<br />
<br />
<br />
<br />
Wie viele Datensätze müssen mindestens (dürfen höchstens) in einem B + -Baum der Höhe h<br />
sein?<br />
Vereinfachende Annahme: b = c<br />
Wurzel hat mindestens<br />
Zwischenknoten in der Ebene 2 hat mindestens<br />
Zwischenknoten in der Ebene 3 hat mindestens<br />
…<br />
Blattknoten in der Ebene h hat mindestens<br />
2 Einträge<br />
b Einträge<br />
b Einträge<br />
b Einträge<br />
b Datensätze<br />
Daraus ergibt sich, dass in einem B + -Baum der Höhe h mindestens 2*b h-1 Datensätze liegen. Es<br />
gilt also N 2*b h-1 und somit<br />
N<br />
h 1 + log b<br />
---<br />
2<br />
= Olog b<br />
N<br />
Besonderheit der asymptotischen Analyse: b ist keine Konstante<br />
Seite 320
Speicherplatz für den B + -Baum<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<br />
<br />
<br />
Speicherplatzausnutzung (SPAN):<br />
Im schlimmsten Fall<br />
– Jeder Knoten (mit Ausnahme der Wurzel) ist mit mindestens der Hälfte der möglichen<br />
Schlüssel gefüllt.<br />
– Ein B + -Baum braucht (im schlechtesten Fall) doppelt soviel Speicher wie ein optimal<br />
gefüllter Baum. Damit ergibt sich eine Speicherplatzausnutzung von mindestens 50%.<br />
Im Durchschnitt<br />
– ln 2 (etwa 69%)<br />
minimal<br />
---------------------------------------------------------------------------------------<br />
erforderlicher Speicherplatz<br />
tatsächlich reservierter Speicherplatz<br />
Wie viele Einträge passen in einen Zwischenknoten der Größe 4 KB?<br />
– pro Zeiger: 4 Byte<br />
– pro Schlüssel: 16 Byte<br />
Dies ergibt ca. 200 Einträge in einem Zwischenknoten.<br />
Seite 321
Problem:<br />
<br />
Exakte Suche im B+-Baum<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Gegeben ein Schlüssel k. Liefere den TID des Datensatzes r mit r.key = k in dem B+-Baum mit<br />
Wurzel root: EMQ(root, k).<br />
Algorithmus EMQ(Knoten p akt , Key k)<br />
readPage(p akt );<br />
IF (p akt ist ein Zwischenknoten)<br />
index = m; // m ist die Anzahl der Schlüssel im Zwischenknoten<br />
Bestimme im Knoten p akt den kleinsten Schlüssel k i , so dass k k i .<br />
IF (es gibt solch ein k i )<br />
index := i-1;<br />
RETURN EMQ(p index , k); // rekursiver Aufruf<br />
ELSE<br />
Bestimme im Knoten p akt den Datensatz (k i ,TID i ) mit k == k i .<br />
RETURN (es gibt solch einen Datensatz) ? TID i : NULL;<br />
END EMQ;<br />
Seite 322
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Vereinfachende Annahme<br />
Beispiel<br />
Es wird nur als Ergebnis geliefert, ob der Datensatz im Baum ist.<br />
Suche den Datensatz mit Schlüssel 42.<br />
Suche den Datensatz mit Schlüssel 41.<br />
41<br />
9 28<br />
46 67<br />
1 5 9 15 19 28 33 37 41 45 46 53 59 67 71 83 99<br />
Seite 323
Bereichsanfrage im B + -Baum<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<br />
Gegeben ein Schlüsselpaar low und up, low up. Finde alle TID der Datensätze r mit low r.key<br />
up im B + -Baum mit Wurzel root: RQ(root, low, up)<br />
Algorithmus RQ(Knoten p akt ; Key low, Key up)<br />
Bestimme analog zur exakten Suche das Blatt first, in dem ein Datensatz mit Schlüssel<br />
low liegen könnte;<br />
res = p akt = first;<br />
LOOP<br />
ReadPage(p akt );<br />
FOREACH (r mit r.key in [low,up] im Knoten p akt )<br />
res += {r.TID}<br />
IF ((es gibt ein Datensatz r in p akt mit r.key up) OR<br />
(p akt ist das am weitesten rechts liegende Blatt im B+-Baum))<br />
RETURN res;<br />
p akt := p akt .N; // Gehe zum rechten Nachbarknoten<br />
END RQ;<br />
Seite 324
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Suche alle Datensätze im Bereich [40, 52].<br />
Beispiel<br />
41<br />
9 28<br />
46 67<br />
1 5 9 15 19 28 33 37 41 45 46 53 59 67 71 83 99<br />
Seite 325
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Einfügen und Löschen in B + -Bäumen<br />
Meistens ist das Einfügen und Löschen sehr einfach:<br />
<br />
Entspricht fast immer einer exakten Suche, dem Einfügen des neuen Satzes und dem<br />
Zurückschreiben des modifizierten Blatts (Datenseite).<br />
Manchmal treten aber folgende Problemfälle auf:<br />
<br />
Was passiert, wenn die Seite keinen Datensatz mehr aufnehmen kann?<br />
1. Lösung: Einführung von Überlaufseiten und verketten mit der Primärseite.<br />
– Nachteil: Kosten für Suche, Einfügen und Löschen erhöhen sich.<br />
2. Lösung: Reorganisation der Datenstruktur<br />
<br />
– Sofort: Überlaufseiten werden nicht zugelassen. Reorganisation des B + -<br />
Baums soll aber lokal begrenzt bleiben.<br />
– Verzögert: kurzzeitige Verwendung von Überlaufseiten und spätere globale<br />
Reorganisation des Datenbestands.<br />
Was passiert, wenn es zu wenige Datensätze in der Seite gibt?<br />
Seite 326
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Einfügen im B + -Baum<br />
<br />
Gegeben einen Datensatz r = (key,TID) und die Wurzel root des B + -Baums. Füge den Datensatz<br />
in den B + -Baum ein: Insert(root, r).<br />
Algorithmus Insert(Knoten p akt ; Record r)<br />
Suche nach dem Datensatz mit Wert r.key; // siehe EMQ(p akt , r.key)<br />
IF (Datensatz wurde gefunden)<br />
RETURN; // ggf. melde dies als Fehler<br />
Setze p akt auf das zuletzt gelesene Blatt;<br />
Füge r in p akt ein;<br />
WHILE (p akt ist übergelaufen)<br />
Teile die Sätze/Verweise in p akt in zwei gleich große Gruppen L und R, so dass<br />
alle Sätze/Verweise in L kleiner sind als die Sätze/Verweise in R;<br />
Speichere die Sätze/Verweise in R in einem neuen Knoten p neu und die in L in p akt ;<br />
Sei k max der größte Schlüssel in L;<br />
p akt = (vm(p akt ) != NULL) ? vm(p akt ) : newRoot(p akt ); // Gehe zum Vater<br />
Füge das Paar (k max , p neu ) in den Vaterknoten ein;<br />
END Insert;<br />
Seite 327
Spezialfall: Überlauf der Wurzel<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
<br />
<br />
Schleife wird spätestens durch eine Überlaufbehandlung der Wurzel beendet.<br />
Durch den Aufruf der Methode newRoot wird eine neue Wurzel bereitgestellt:<br />
p akt<br />
neue<br />
Wurzel<br />
p akt<br />
– Der neue Wurzelknoten verfügt zunächst über nur einen Eintrag. Sofort danach wird dann<br />
der zweite Eintrag eingefügt.<br />
Seite 328
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Beispiel<br />
<br />
Einfügen von 40 in folgenden B+-Baum<br />
9 28<br />
41 46<br />
1 5 9 15 19 28 33 37 41 45 46 53 59 67<br />
– Suche nach dem Blatt<br />
9 28<br />
41 46<br />
40<br />
1 5 9 15 19 28 33 37 41 45 46 53 59 67<br />
– Einfügen in das Blatt, Spalten des Blatts und Einfügen in den Vater<br />
9 28<br />
41 46<br />
(37, )<br />
1 5 9 15 19 28 33 37 40 41 45 46 53 59 67<br />
Seite 329
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
– Einfügen in die Wurzel, Spalten der Wurzel und Erzeugen der neuen Wurzel<br />
37<br />
9 28<br />
41 46<br />
1 5 9 15 19 28 33 37 40 41 45 46 53 59 67<br />
Wichtige Eigenschaften beim Einfügen:<br />
<br />
<br />
Einfügeoperation bleibt auf einen Pfad des B + -Baums beschränkt.<br />
– Pro Ebene wird höchstens ein neuer Knoten hinzugefügt.<br />
– Der Aufwand für das Einfügen eines Datensatzes beträgt O(log b N)<br />
Beim Einfügen bleiben alle Invarianten des B + -Baums erhalten.<br />
Seite 330
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Löschen im B + -Baum<br />
<br />
Gegeben ein Schlüssel k und die Wurzel des B + -Baums. Finde den Datensatz mit Schlüssel k<br />
im B + -Baum und entferne diesen.<br />
Problemfälle:<br />
<br />
<br />
Wie kann verhindert werden, dass ein Knoten zu wenig Datensätze enthält?<br />
– Ausgleich mit einem Geschwisterknoten<br />
– Ggf. muss der Knoten mit einem Geschwisterknoten verschmolzen werden.<br />
Was passiert, wenn ein Datensatz gelöscht wird, dessen Schlüssel auch als Referenz in einem<br />
Elternknoten benutzt wird?<br />
– Das stellt kein Problem dar, weil die internen Schlüssel nur eine Wegweiserfunktion<br />
besitzen.<br />
Löschen von 28<br />
37<br />
9 28<br />
41 46<br />
1 5 9 15 19 28 33 37 40 41 45 46 53 59 67<br />
Seite 331
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Kosten für Suchen, Einfügen und Löschen<br />
<br />
<br />
Exakte Suche, Einfügen und Löschen sind auf einen Pfad beschränkt<br />
Im schlechtesten Fall ergeben sich folgende Kosten für den B+-Baum:<br />
exakte Suche: O(log b N)<br />
Bereichanfrage: O(log b N + r/b)<br />
Einfügen: O(log b N)<br />
Löschen: O(log b N)<br />
Praktische Überlegungen<br />
<br />
<br />
Wie viele Datensätze können in einem B + -Baum der Höhe 4 gespeichert werden?<br />
Beispiel (b = c = 200, 4 KB pro Seite);<br />
– Im schlechtesten Fall: 2*200*200*200 = 16*10 6 Datensätze, 8*10 4 Datenseiten = 320<br />
MB Speicherplatz für die Blattebene des B + -Baums.<br />
– Im Durchschnitt: Da Knoten zu etwa 2/3 im Durchschnitt gefüllt sind, können<br />
voraussichtlich 2*200*270*270 = 29*10 6 Datensätze verwaltet werden. Es wird nun 430<br />
MB an Speicherplatz für die Blattebene benötigt.<br />
In vielen Anwendungen:<br />
Wurzel im Hauptspeicher ==> 3 Plattenzugriffe für exakte Suche<br />
Seite 332
Cluster-Index<br />
<br />
<br />
<strong>8.</strong>5 Indexe in Datenbanken<br />
Höchstens ein Index pro Relation kann als Cluster-Index angelegt werden:<br />
create clustered index MeinIndex on …<br />
<strong>Physische</strong> <strong>Datenorganisation</strong><br />
Durch einen Cluster-Index wird das Speicherlayout der Datensätze der Relation bestimmt.<br />
– Beispiel: DB2 von IBM<br />
(a) Datensätze werden entsprechend der Ordnung im Index auf die Seiten abgebildet.<br />
(b) Häufiges Einfügen zerstört die Ordnung.<br />
(c) Reorganisation der Relation (TEUER) clustert die Datensätze wieder.<br />
– Beispiel: SQL Server<br />
Sicherstellung der Eindeutigkeit durch einen Index<br />
<br />
<br />
Durch Anlegen eines Index kann sehr effizient überprüft werden, ob die Bedingung eines<br />
Schlüsselkandidats erfüllt ist.<br />
Anlegen eines unique-Index:<br />
create unique index MeinIndex on …<br />
Seite 333