25.12.2013 Aufrufe

8. Physische Datenorganisation ?

8. Physische Datenorganisation ?

8. Physische Datenorganisation ?

MEHR ANZEIGEN
WENIGER ANZEIGEN

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

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!