Folie 1 - fbi.h

Werbung
Datenbanken
Interne Datenorganisation:
Bisher: Konzeptionelle Betrachtungen einer
Datenbank aus Sicht der Anwendung:
Modellierung, Normalisieren, Sprache zum
Einfügen, Ändern, Löschen, Lesen
Jetzt: Betrachtung der physischen
Implementation der für den Endanwender nicht
sichtbaren internen Ebene zur Optimierung des
Speicherzugriffs.
1
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Interne Datenorganisation:
2
•
Die interne Datenorganisation ist die für den Endanwender nicht sichtbare, aber wesentliche
Ebene für die performante Nutzung von Datenbanken.
•
Aus der Programmiervorlesung bekannte Algorithmen und Datenstrukturen werden
verwendet und erweitert, damit große Datenmengen effizient verarbeitet werden können.
•
Mit der durch die ANSI-/SPARC-Architektur eingeführten strikten Ebenen-Trennung ist es
grundsätzlich möglich, die Strukturen der internen Ebene zu ändern, ohne die anderen
Ebenen zu beeinflussen.
•
Im Wesentlichen betrachten wir die Suchverfahren, um effizient auf Daten der Datenbank
zuzugreifen.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren:
3
•
Suchverfahren spielen eine wesentliche Rolle bei der Betrachtung der internen Ebene
von Datenbanken. Das Lesen von Daten in Datenbanken nach bestimmten Kriterien
(Selektion in Daten) bedeutet immer, dass die Daten schnellstmöglich zu finden sind.
•
Sind die Daten bereits in einem sortierten Zustand, ist die Suche weit weniger aufwendig
als bei unsortierten Daten.
•
Man unterscheidet sogenannte Indexverfahren (Index, Baum, B-Baum) von
Hashverfahren. Beide Typen von Verfahren dienen dazu, dass man beim Suchen nicht
alle Daten durchlaufen muss, um den gesuchten Datensatz zu finden.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Index):
Beispiel:
•
Angenommen in einer Datenbank sind eine Menge von Relationen abgelegt. Zu jeder
Relation ist ein Primärschlüssel definiert. Die Primärschlüssel dienen jetzt und in den
folgenden Überlegungen dazu, Informationen zu finden. Wir wissen ja, dass die Werte für
den Primärschlüssel in Relationen eindeutig sein müssen. Der Einfachheit halber gehen wir
davon aus, dass die betrachteten Werte natürliche Zahlen sind.
•
Zu suchen sei in dem folgenden Raum von Zahlen:
15
4
22
7
3
9
16
4
6
12
8
•
Frage: Wie lange braucht man im Durchschnitt, um eine Zahl (hinter der sich der Schlüssel
eines Datensatzes befindet, den wir suchen) zu finden?
•
Da es keine offensichtliche Anordnung der Zahlen gibt, müssen wir sequentiell vorgehen:
Für die Suche nach der 15 brauchen wir einen Schritt, für die Suche nach 8 brauchen wir 10
Schritte, im Durchschnitt also 5,5 Schritte.
•
Allgemein können wir bei einem solchen Suchverfahren bei n Datensätzen von einem
durchschnittlichen Aufwand von (n+1)/2 Schritten ausgehen. Man spricht vom Aufwand in der
Ordnung von n, also O(n).
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Index):
Beispiel:
•
Gehen wir im Folgenden von einer Sortierung der Zahlen aus. Im Beispiel verwenden wir
also die gleichen Zahlen (Schlüsselwerte):
3
5
4
6
7
8
9
12
15
16
22
•
Beim Suchen können wir den Aufwand reduzieren, denn wir können beim Suchen in der „Mitte“
der Zahlenwerte (s. Pfeil) beginnen und entscheiden, ob die gesuchte Zahl, rechts oder links von
diesem Zahlenwert liegt. Bei der Suche nach der 22 braucht man z.B. nur die mit Pfeilen
markierten Schritte, also 3, und nicht wie zuvor 10 Schritte. Die Pfeile kann man als Index
bezeichnen. Dieses Verfahren nennt man binäre Suche.
•
Im Mittel braucht man beim Suchen in solchermaßen sortierten Feldern mit n Zahlen einen
Aufwand von O(log2n) Schritten.
•
Wichtig: Der Suchaufwand ist deutlich reduziert, jedoch muss bei jedem Neueintrag eines
Wertes ein hoher Aufwand betrieben werden, z.B. müssten beim Neueintrag der 5 alle Werte ab
6 um ein Feld nach hinten verschoben werden.
•
Allgemein gilt, dass Verfahren, die den Suchaufwand verringern i.d.R. den Einfügeaufwand
erhöhen.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Baum):
Beispiel:
•
Für das zuvor gezeigte Verfahren werden auch gerne Baumstrukturen verwendet. Ein
äquivalenter binärer Suchbaum zu dem vorigen Beispiel ist der folgende:
9
6
4
3
6
15
8
7
12
16
22
•
Es gilt für jeden Knoten: Der Pfeil, der links von einem Knoten ausgeht, zeigt auf eine
kleinere Zahl, der nach rechts gehende Pfeil auf eine größere Zahl. Gestartet wird die Suche
an der Wurzel (9). In diesem Beispiel brauchen wir auch 3 Schritte bis zur 22. Das Verfahren
ist auch ein logarithmisches, d.h. das Suchen in einem ausgeglichenen Baum mit n Knoten
braucht O(log2n) Schritte.
•
Problematisch bei diesem Verfahren kann sein, dass der Baum „entartet“ zu einer linearen
Liste. Dann ist das Verfahren mit der Ordnung O(n) schlecht.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Baum):
Die Beispiele zeigen, dass verschiedene Faktoren zu berücksichtigen sind:
7
•
Zum einen zeigt sich, dass Optimierungen zum schnellen Finden von Informationen
einhergehen (können) mit größerem Aufwand beim Speichern der Informationen, weil der
schnellere Zugriff i.d.R. mit einer aufwändigeren Speicherform verbunden ist.
•
Das Baumverfahren liefert ebenso wie die binäre Suche Suchergebnisse in O(log2n). Sie
stellen die einfachsten Index-Verfahren dar.
•
Unter Berücksichtigung des bei großen Datenmengen notwendigen Zugriffs auf
unterschiedliche Speichermedien (Hauptspeicher, Hintergrundspeicher) gibt es eine
Optimierung hin zu einer minimalen Zugriffshäufigkeit auf den (langsamen)
Hintergrundspeicher, das index-sequentielle Suchen und das Suchen in B-Bäumen.
•
Das index-sequentielle Verfahren lässt sich anhand des Telefonbuchs (in Buchform!)
erläutern:

Wenn man eine Telefonnummer sucht, nutzt man zunächst den Index, also z.B. bei der
Suche nach Meier, sucht man über den Index den Buchstaben „M“.

Hat man diesen gefunden, dann geht man anschließend sequentiell vor („mit dem
Finger Name für Name“) und findet schließlich den entsprechenden Namen.

In größeren Orten ist der Index feiner aufgeteilt, so dass das sequentielle Suchen auf
nur relativ wenige Einträge und nicht seitenlang erfolgt.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Baum):
8
•
Übertragen auf das Suchen in großen Datenbanken versucht man durch dieses zweistufige
Vorgehen, das sequentielle Suchen auf den Hauptspeicherbereich zu beschränken, da
dieser im Vergleich zum Hintergrundspeicher um ein vielfaches schneller arbeitet und das
relativ schlechte sequentielle Suchen nicht zu sehr ins Gewicht fällt.
•
Das (Nach-)Laden von Daten aus dem Hintergrundbereich möchte man jedoch möglichst
selten vornehmen.
•
Mit diesem Grundgedanken hat Rudolf Bayer 1972 den B-Baum definiert, der noch heute in
den meisten Datenbank-Systemen als Speicherform in der internen Ebene genutzt wird.
•
Die Idee, die sich hinter dem B-Baums verbirgt ist es, ein mehrstufiges Index-Verfahren
aufzubauen, bei dem die nachzuladenden Seiten des Speichers gerade so groß sind, dass
eine minimale Menge davon zu laden ist. Somit wird die Zahl der Zugriffe auf den langsamen
Hintergrundspeicher minimiert.
•
Jeder Knoten des Baumes enthält mehr als eine Information im Gegensatz zu dem
normalen binären Baum.
•
Innerhalb einer Seite wird (im Hauptspeicher) sequentiell oder binär gesucht. Da der
Hauptspeicher um ein Vielfaches schneller ist als der Hintergrundspeicher, fällt das
Verfahren nicht so ins Gewicht.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Gedanke
65
Suchverfahren (Baum):
32
97
109
117
130
119
125
132
102
112
93
80
103
108
74
122
106
95
68
81
89
53
78
45
66
70
72
39
87
71
47
51
58
35
43
48
36
38
16
20
27
24
14
13
11
10
5
8
1
3
37
40
17
33
7
114
76
115
41
75
12
99
binärer
Baum
B-Baum
12 32 41 65 76 97 114
115 117 119 122 125 130 132
1 3 5 7 8 10 11
13 14 16 17 20 24 27
43 45 47 48 51 53 58
33 35 36 37 38 39 40
9
Stephan Karczewski - Datenbanken
66 68 70 71 72 74 75
99 102 103 106 108 109 112
78 80 81 87 89 93 95
6. Interne Datenorganisation
Datenbanken
Suchverfahren (B-Baum):
Definition (B-Baum):
Ein B-Baum der Ordnung n ist wie folgt definiert:
•
Jeder Knoten enthält maximal 2n Schlüssel.
•
Jeder Knoten mit Ausnahme des Wurzelknoten enthält mindestens n Schlüssel. Der
Wurzelknoten enthält mindestens einen Schlüssel.
•
Ein Knoten hat m+1 Nachfolger-Knoten, wenn er m Schlüssel enthält. Für die NachfolgeKnoten gilt: Sie enthalten Schlüsselwerte, die jeweils in den Intervallen, die durch die
Schlüssel des Vorgängers gegeben sind (s. u. Beispiel). Ausnahme sind Blattknoten: Diese
haben keine Nachfolger.
•
Alle Blattknoten liegen auf einer Ebene, d.h. sie haben den gleichen Abstand zur Wurzel.
Beispiel: B-Baum der Ordnung 2:
27
8 19
2 3 4 6
10
10 12 14 17
Stephan Karczewski - Datenbanken
33 42
21 22 23 25
28 31
35 39
45 49
6. Interne Datenorganisation
Datenbanken
Suchverfahren (B-Baum):
Eigenschaften (B-Baum):
11
•
Ein B-Baum hat deshalb so hervorragende Eigenschaften, da die Anzahl der Seitenzugriffe
sehr gering im Verhältnis zu der Anzahl der Schlüssel ist. Ein Seitenzugriff muss
üblicherweise nur bei dem Wechsel von einer auf die nächste Ebene erfolgen.
•
Dies liegt daran, dass die Höhe des Baums nur sehr langsam wächst bei gleichzeitig
starkem Wachstum der Schlüsselmenge. Ist beispielsweise n=50, so kann bei optimaler
Füllung und drei Ebenen des Baumes eine Schlüsselmenge in der Größenordnung von 100 +
(100*100) + (100*100*100) = 1,01 Mio Schlüsseln gespeichert werden.
•
Eine Variante des B-Baums, der B*-Baum, ist dafür ausgelegt, dass in den Blättern die
tatsächlichen Daten liegen, so dass nach Finden eines Schlüssels, ganze Bereiche von Daten
abgearbeitet werden können.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
27
8 19
Löschen im B-Baum:
hier Schlüssel 33
2 3 4 6
10 12 14 17
33 42
28 31
21 22 23 25
35 39
•
Gelöscht werden darf nur im Blatt, da sonst die gleiche Höhe in den Blättern und die Regeln
zur Menge der Schlüssel und Nachfolger in den Knoten nicht eingehalten werden kann.
•
Ist ein Schlüssel in einem inneren Knoten zu löschen (oben z.B. 33), dann muss dieser direkt
ersetzt werden durch einen unmittelbaren Nachbarn, der in einem Blatt ist (hier z.B. 35). Hat
der Blattknoten n oder mehr Schlüssel, sind wir fertig.
•
Nun hat der Blattknoten nur noch einen Schlüssel (39) und auch seine Nachbarn sind bereits
auf minimalem Füll-Niveau. Somit müssen zwei Nachbarknoten (hier Blätter) verschmolzen
werden zusammen mit dem zwischen ihnen liegenden Schlüssel (39, 42, 45, 49).
•
Hätte der Nachbarknoten mindestens n+1 Schlüssel, dann könnte zwischen den beiden
Nachbarn verschoben werden.
•
Der Vorgänger-Knoten hat nun allerdings nur noch einen Schlüssel (35). Auf dieser Ebene
erfolgt nun der gleiche Prozess. Zusammenfassung von (8, 19, 27, 35). Die Wurzel, die bisher
nur einen Schlüssel hat, verschwindet. Der Baum verliert eine Ebene.
•
Ergebnis ist der folgende Baum. Alle aufgeführten Regeln sind eingehalten.
45 49
8 19 27 35
2 3 4 6
12
10 12 14 17
Stephan Karczewski - Datenbanken
21 22 23 25
28 31
39 42 45 49
6. Interne Datenorganisation
Datenbanken
8 19 27 35
Einfügen im B-Baum:
2 3 4 6
hier Schlüssel 15
10 12 14 17
21 22 23 25
28 31
39 42 45 49
•
Eingefügt wird nur in Blattknoten. Zunächst wird nach dem Suchverfahren der passende
Knoten gefunden, d.h. in der Wurzel wird sequentiell nach dem Schlüssel gesucht. Wird er
nicht gefunden, dann wird zu dem Nachfolger gesprungen, in den der Schlüssel hineinpasst
(ggfs. über mehrere Ebenen). Soll z.B. der Schlüssel 15 eingefügt werden, dann ist das zweite
Blatt geeignet. Dieser Knoten ist aber mit 2n Schlüsseln gefüllt. Bei nicht vollständiger
Füllung trägt man den neuen Schlüssel einfach in den passenden Knoten.
•
In unserem Beispiel erfolgt eine Splittung des Knoten in die Knoten (10, 12) und (15, 17). Der
mittlere Schlüssel wird eine Ebene nach oben geschoben.
•
Die Ebene darüber ist bereits maximal gefüllt. Daher wiederholt sich das Ganze. (8, 15) und
27, 35) entstehen. 19 wird die neue Wurzel.
•
Somit entsteht folgender Baum mit einer zusätzlichen Ebene.
19
8 14
2 3 4 6
13
Stephan Karczewski - Datenbanken
10 12
15 17
27 35
21 22 23 25
28 31
39 42 45 49
6. Interne Datenorganisation
Datenbanken
B-Baum (Aufgabe):
1.
Gegeben sei ein leerer B-Baum der Ordnung 2. Tragen Sie in der folgenden Reihenfolge die
Schlüssel in den B-Baum. Nach jedem „;“ zeichnen Sie den entstandenen B-Baum auf:
20; 40 10 30 15; 35 7 26 18 22; 5; 42 13 46 27 8 32; 38 24 45 25;
2.
Gegeben sei der Baum aus Aufgabe 1. Löschen Sie in der folgenden Reihenfolge die
Schlüssel in dem B-Baum. Nach jedem „;“ zeichnen Sie den entstandenen B-Baum auf.
25 45 24; 38 32; 8 27 46 13 42; 5 22 18 26; 7 35 15;
14
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Hash):
Eigenschaften (Hash-Verfahren):
15
•
Die Hash-Organisation ist eine direkte Methode, bei der jedem Schlüssel über die HashFunktion eine eindeutige Adresse zugeordnet wird. Die Hash-Funktion sollte so gewählt
sein, dass sie die Adressen breit streut und dass ein Wiederfinden mit der Umkehrfunktion
in einem Schritt möglich ist.
•
Üblicherweise ist der Adressbereich kleiner als die Menge der zu verteilenden Daten. Daher
kommt es zu Kollisionen von Funktionszuordnungen.
•
Neben der Hash-Funktion bedarf es einer Kollisionsbehandlung, so dass ein
Wiederauffinden der Informationen möglich ist.
•
Die bekannteste Hash-Funktion ist das Divisions-Rest-Verfahren, das jedem Schlüssel eine
Adresse zuweist, indem dividiert wird durch die Speicherbereich-Größe und der Rest der
Division die Adresse liefert.
•
Bei Kollisionen gibt es ebenfalls verschiedene Möglichkeiten vorzugehen. Die
Kollisionsbehandlung liefert dabei entweder offene Hashverfahren also eine Ersatzadresse
im gleichen Bereich (z.B. der direkte/übernächste/… Nachbar) oder einen Überlaufbereich
(z.B. eine verkettete Liste an der Zieladresse).
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Hash)
Beispiel:
•
Der betrachtete Bereich umfasse n = 10 Werte. Wir wenden das Divisions-Rest-Verfahren an,
also gilt: Adresse von k (Schlüssel) = k mod n.
•
Bei Ankommen der Beispielschlüssel 15, 22, 7, 3, 9, 16, 4, 6, 12, 8 ergibt sich folgende
Zuteilung:
0
•
16
1
2
3
4
5
6
7
8
9
22, 12
3
4
15
16, 6
7
8
9
Sowohl 16 und 6 als auch 22 und 12 beanspruchen den selben Speicherplatz 
Kollisionsbehandlung. Diese kann auf verschiedene Weise geregelt werden. Man
unterscheidet zwischen Verfahren,

die einen Überlaufbereich, z.B. eine verkettete Liste hinter dem Array nehmen oder

die den vorhandenen Bereich verwenden (z.B. man nimmt die Nachbaradresse und
wenn diese nicht frei ist, die nächste usw.).
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Datenbanken
Suchverfahren (Hash)
Beispiel:
0
Überlaufbereich
17
1
2
3
4
5
6
7
8
9
22
3
4
15
16
7
8
9
12
6
•
Tritt eine Kollision auf, wird ein neuer Record (Überlaufbereich) angelegt und der Wert
eingetragen. Von der eigentlichen Adresse wird ein Pointer auf den neuen Record gelegt.
•
Bei diesem Verfahren könnte es im Extremfall zu einer linearen Liste kommen, die sehr
ineffizient wäre.
•
Alternativ kann durch das Verfahren: „Trage den Schlüssel im Nachbarfeld ein“ eine
Häufung von Kollisionsbehandlungen notwendig werden, falls ein Feld oft gefunden wird.
Stephan Karczewski - Datenbanken
6. Interne Datenorganisation
Herunterladen