Kapitel 13
Interne Datenorganisation
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
1
Interne Ebene Daten sind so zu organisieren, dass Anzahl Plattenzugriffe • bei Recherche und • Manipulation von Daten minimal
Kriterien für die Wahl des physischen Datenentwurfs: • kurze Reaktionszeit beim Lesen • schnelles Schreibens (oft gegenläufig zum Ziel der kurzen Reaktionszeit beim Lesen) • hoher Durchsatz komplexer Transaktionen • Speicherplatzbedarf
Was können wir tun, um dies zu erreichen? Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
2
Interne Ebene Optionen für Datenorganisation und Zugriffspfade: • Indexierung • Verschiedene Hashing-Verfahren • Clustering zusammengehörender Datensätze auf Plattenblöcken • Verknüpfung zusammengehörender Datensätze über Zeiger Was ist das? → Als nächstes: Wie sind Daten auf Platte organisiert, dann: Was ist Indexierung, Hashing, …
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
3
Interne Datenorganisation – Daten auf Platte Ablage der Daten auf der Platte Physische Datei besteht aus Datensätzen Ein Datensatz besteht aus mehreren Satzfeldern / Attributen. Das Satzfeld, das den Satz identifiziert, heißt Satzschlüssel. Frage: Woher weiß der Rechner wo ein Satz mit einem bestimmten Schlüssel zu finden ist? Schlüssel muss abgebildet werden auf physische Plattenadresse
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
4
Interne Datenorganisation – Daten auf Platte Gehen wir von einem Direktzugriffsspeicher (Platte) aus: Adressierung durch Sektoradresse, d. h. Zylinder-, Plattenoberflächen- und Sektornummer (Zylinder- + Plattenoberflächennummer = Spurnummer)
Sektor
Spur
Spur über alle Platten = Zylinder
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
5
Interne Datenorganisation – Daten auf Platte Pages (Datenseiten, Datenblöcke) = Zusammenfassung mehrerer benachbarter Sektoren. Größe: 512 Bytes bis 8 Kilobytes Ein Datenblock (Page) enthält einen Teil, einen oder mehrere Datensätze oder auch Indexeinträge. Ein Datenblock (Page) ist die kleinste Einheit, die in den Hauptspeicher geladen wird.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
6
Interne Datenorganisation – Zugriff Zugriff: sequentiell: Lesen eines Satzes nach dem anderen in Reihenfolge im Speicher. direkt:
Zugriff auf den Satz z. B. durch Angabe der lfd. Nr. des Satzes in der Datei (Record-ID = RID). Diese RID wird umgerechnet in Blockadresse und Nummer des Satzes im Block. Die Blockadresse wird wiederum auf die physische Adresse umgerechnet.
Hashing:
Die Record-ID kann über eine Funktion (Hash-Funktion) berechnet werden danach: Umrechnung in Blockadresse und Nummer des Satzes im Block.
indiziert:
Zugriff per Satzschlüssel mit Hilfe einer Abbildungstabelle (Index), die die Abbildung zwischen Satzschlüssel und Record-ID enthält.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
7
Interne Datenorganisation – sequenzielle Organisation:
Wie viele Sätze muss ich inspizieren, bis ich in einer unsortierten Datei den Satz gefunden habe, der die Bedingung (z. B. (eindeutige) Produkt-Nr = 4711) erfüllt? • • •
Max: Durchsuchen gesamte Datei, d. h. Zugriff auf alle Sätze. Min: Durchsuchen nur 1. Satz, d. h. Zugriff auf nur einen Satz. Durchschnittlich: ½ * Anzahl Sätze in der Datei = ½*n (= O(n)). Was ist O(n)?
•
Bei nicht eindeutigen Suchschlüssel und Suche nach dem 1. Vorkommen eines Satzes mit diesem Suchschlüssel: Beendigung der Suche etwas früher (auch O(n)) (abhängig davon, wie oft der Schlüsselwert vorkommt). Frage: Bei nicht eindeutigen Suchschlüssel und Suche nach allen Vorkommen eines Satzes mit diesem Suchschlüssel: ?
•
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
8
Interne Datenorganisation – sequenzielle Organisation:
Auf wie viele Blöcke muss ich zugreifen bis ich Satz gefunden habe? (Anzahl Blöcke = Zugriffe auf Plattenspeicher) Durchschnittlich: ½ * (Anzahl Sätze in der Datei / Anzahl der Sätze pro Block) Dies ist oft zu lang! Was tun? ⇒ Daten nach Suchbegriff sortiert ablegen. Frage: Wie suche ich in sortierter Liste, so dass sich die Suchzeit (Anzahl Zugriffe) verringert?
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
9
Interne Datenorganisation – Binäre Suche
Binäre Suche / Halbierungsverfahren / Teilungsverfahren Vergleichen des Schlüsselwertes des Elementes in der Mitte der Liste mit den Suchwert. Ist der Suchwert größer als der Schlüsselwert des Elementes ⇒Suchen in unterer Teilliste nach gleicher Verfahren. Ist der Suchwert kleiner als der Schlüsselwert ⇒Suche im oberer Teilliste nach gleichen Verfahren Abbruch: Wenn Suchwert gefunden oder wenn die Länge der Teilliste = 0. (Suchwert in Liste nicht vorhanden) Beispiel auf Tafel
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
10
Interne Datenorganisation – Binäre Suche
Binäre Suche / Halbierungsverfahren / Teilungsverfahren Wie viele Sätze muss ich inspizieren, bis ich in einer nach Produktnummer sortierten Datei den Satz gefunden habe, der die Bedingung (z. B. (eindeutige) Produktnr = 63) erfüllt (ohne Index oder Hash-Verfahren)? Durchschnittlich etwas weniger als: int (ld(n+1)) (=O(ld(n)) Frage: Warum? Frage: Wie viel Satzzugriffe bei 7 Sätzen, bei1000 Sätzen (sortiert, unsortiert)?
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
11
Interne Datenorganisation – Suche durch Adressrechnen
geht es noch schneller? Bei obigen Verfahren: Aufwand in Größenordnung ld(n) d.h. bei 1000 Elementen ⇒ 10 Schritte Wir wollen 1-2 Schritte! Frage: Haben Sie eine Idee?
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
12
Interne Datenorganisation – Suche durch Adressrechnen Suche durch Adressrechnen: → Berechnen der Lage des Elements aus Wert des Elements. Menge der Speicherplätze (Adressen)
Schlüsselmenge (Keys k) {1011, 1012, 1013, ... 1021, 1022, 1023, ... 3011, 3012, ...}
Funktion h(k)
...
Suche durch Adressrechnen funktioniert meist bei einigermaßen gleichmäßig über den Wertebereich verteilten Werten. Der Füllgrad der Liste darf nicht zu hoch sein.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
13
Interne Datenorganisation – Suche durch Adressrechnen über sortierte Liste
Listenposition I =
Beispiel auf Tafel /nächste Folie
E − E min (Nachkommastellen abgeschnitten) Dmit
E: Wert des zu suchenden / einzufügenden Elements, E min: kleinstes mögliches Element, E max: größtes mögliches Element, R: Listenlänge Dmit =
E max − E min + 1 R
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
14
Interne Datenorganisation – Suche durch Adressrechnen über sortierte Liste Beispiel Wertebereich der abzuspeichernden Werte: 1 bis 120 => Emin = kleinster möglicher Wert = 1 Emax = größter möglicher Wert = 120 R = Listenlänge = Anzahl Speicherplätze = 12 E = Wert des abzuspeichernden Elementes: = 62 Ich definiere in welche „Schubladen“ (Speicherplätze) welche Werte abzulegen sind (falls noch nicht belegt): Speicherplatz 0: Werte 1 bis 10 Speicherplatz 1: Werte 11 bis 20 … Speicherplatz 11: Werte 111 bis 120 Welche möglichen Werte kommen in welche Schublade: E max − E min + 1 120 − 1 + 1 120 = 10 Dmit = = = R 12 12 Position des Elementes: I=
E − E min Dmit
=
62 − 1 10
=
61 10
= 6 ,1
=> 6
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
15
Interne Datenorganisation – Suche durch Adressrechnen über sortierte Liste Bei Kollision: Beispiel auf Tafel /nächste Folie Verschieben der Sätze nach unten, so dass neuer Satz in richtiger Sortierreihenfolge eingefügt werden kann Mittlere Zugriffzzeit: Zmit =
1 1 ld a 1− a
~ 1, .. bei geringer Füllung
Füllungsgrad α=L/R < 1 L: Anzahl Elemente, R = Listenlänge Bei Zugriff auf Externspeicher: Schublade muss nicht nur ein Satz sein (mit Schlüssel = Wert, nach dem einsortiert wird), sondern ein Block / Seite mit mehreren Sätzen.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
16
Interne Datenorganisation – Suche durch Adressrechnen über sortierte Liste Beispiel Wert ist 61: Speicherplatz 0: Werte 1 bis 10 Speicherplatz 1: Werte 11 bis 20 … Speicherplatz 11: Werte 111 bis 120 Welche möglichen Werte kommen in welche Schublade: E max − E min + 1 120 − 1 + 1 120 = 10 Dmit = = = R 12 12 Position des Elementes: 61 − 1 E − E min = I= Dmit 10
=
60 10
= 6 ,0
=> 6
=> Kollission! ! ! !
=> die 62 wird auf Speicherplatz 7 verschoben
Falls Speicherplatz 7 auch voll gewesen wäre => entsprechende Weiterverschiebung nach unten. Frage: Was passiert, wenn hinter letzte Speicherstelle verschoben werden soll? Frage: Was passiert, wenn alle Speicherstellen voll?
Problem: Klumpung (z.B. viele Maiers). Was ist, wenn Datensätze nicht sortiert sein müssen? Gibt es dann besseres Verfahren?
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
17
Interne Datenorganisation – Hash-Verfahren Suchen durch Adressrechnen über unsortierte Liste (Hash-Verfahren) Falls Ergebnisliste nicht sortiert nach Suchkriterium: Man hat mehr Freiheiten bei der Wahl der Abbildungsfunktion, Bei Kollision kann anderes Verfahren als das aufwendige Verschieben gewählt werden. Rechenverfahren: Abbildung auf Listenposition (Hash-Funktion) Wir benötigen eine Funktion I = f(W), die die Menge der Schlüsselwerte auf die Menge der vorhandenen Speicherplätze (Indexbereich) abbildet. Faltung: Schlüssel wird in Komponenten zerlegt und diese logisch (exklusives Oder) additiv oder multiplikativ verknüpft + Ausblenden einiger Dualstellen, so dass sich nur Werte im vorgegebenen Indexbereich (1 bis R) ergeben ->Erklärung an Tafel Restklassenbildung: ganzzahlige Division des Schlüssels durch die Listenlänge R (evtl. nach Faltung). Rest liegt im Indexbereich (I = W % R) Listenlänge sollte Primzahl sein, je kleiner α = L (L= Anzahl der zu speichernden Elemente) , desto weniger Kollisionen ->Erklärung an Tafel R Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
18
Interne Datenorganisation – Hash-Verfahren Falls unter der berechneten Indexnummer i schon ein Element abgespeichert ist, ist es zu einer Kollision gekommen die folgendermaßen aufgelöst werden kann: Kollisionsauflösung: Einfaches Verfahren: Lineare Inkrementierung: ->Erklärung an Tafel
I i = ( I i −1 + C )% R Die Formel ist solange anzuwenden, bis unbesetztes I i gefunden wurde. Falls C prim zu R ist (ist auf jeden Fall erfüllt, wenn R Primzahl ist), ist garantiert, dass solange R>= L, jeden zu speichernden Element einen Speicheplatz zugewiesen werden kann. Beim obigen Verfahren durchlaufen die Indexpositionen bei gleichem Ergebnis der HashFunktion gleiche Positionen. Was können wir tun, um diesen Nachteil zu vermeiden? Inkrementierung mit Berücksichtigung des ursprünglichen Wertes:
I i = ( I i −1 + Q * i + C )% R Q berechnet sich aus ursprünglichem Wert, C ist Konstante. oder: Neuer Satz kommt in verzeigerten Überlaufbereich Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
19
Hörsaalübung: Interne Datenorganisation – Hash-Verfahren Suche durch Adressrechnen: → Berechnen der Lage des Elements aus Wert des Elements. Menge der Speicherplätze (Adressen)
Schlüssel
0
1093
Funktion h(k)
1 .... 19
a. Berechnen Sie die Adresse zu Zahl 1093 (als ASCII abgelegt) durch Faltung und Restklassenbildung (Listenlänge = 20). Ist 20 eine günstig gewählte Listenlänge? 1093 = in ASCII: 00110001 00110000 00111001 00110011 (___ = ausgewählte Bits) ein Glied der Faltung
b. Lösen Sie die Kollision des Wertes 0619 und 1708 auf (beide Werte werden auf gleichen Speicherplatz wie 1093 abgebildet) durch lineare Inkrementierung (C sei 10) und durch Inkrementierung mit Berücksichtigung des ursprünglichen Wertes Q. (Hier: Q = letzte Ziffer des Schlüssels 0619, also 9). Was ist der Vorteil der Inkrementierung mit Berücksichtigung des ursprünglichen Wertes? Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
20
Hörsaalübung: Interne Datenorganisation – Hash-Verfahren
1093 = ASCII: 00110001 00110000 00111001 00110011 (___ = ausgewählte Bits) 0: 1:
00010000 xor
....
10010011 =
11: 1093
10000011 = dezimal 131 % 20 = 11
.... 19:
0619 = ASCII: 00110000 00110110 00110001 00111001 (___ = ausgewählte Bits)
00000110 xor 00011001 = 00011111 = dezimal 31%20 = 11 => Kollision Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
21
Hörsaalübung: Interne Datenorganisation – Hash-Verfahren 0619 => 11 => Kollision
0:
lineare Inkrementierung (C sei 10):
1: 0619 ....
I i = ( I i −1 + C )% R
10:
Ii = (11 + 10)%20 = 1
11: 1093 0619 ....
Inkrementierung mit Berücksichtigung des ursprünglichen Wertes (Q=letzte Ziffer des Schlüssels): I i = ( I i −1 + Q * i + C )% R
19:
0:
I i = (11 + 9 * 1 + 10)%20 = 10
1: ....
Was ist der Vorteil der Inkrementierung mit Berücksichtigung des ursprünglichen Wertes?
-> nächste Seite
10: 0619 11: 1093 0619 .... 19:
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
22
Hörsaalübung: Interne Datenorganisation – Hash-Verfahren Vorteil der Inkrementierung mit Berücksichtigung des ursprünglichen Wertes: 1708 = ASCII: 00110001 00110111 00110000 00111000 (___ = ausgewählte Bits) 00010111 xor 0: 00001000 = 1: 0619 1708 00011111 = dezimal 31%20 = 11 => Kollision ....
1708 => 11 => Kollision
10:
lineare Inkrementierung (C sei 10):
11: 1093 1708 ....
I i = ( I i −1 + C )% R
19:
Ii = (11 + 10)%20 = 1 => wieder Kollision Ii + 1 = (1 + 10)%20 = 11 => wieder Kollision
0: ....
Ist 20 eine günstig gewählte Listenlänge?
Inkrementierung mit Berücksichtigung des ursprünglichen Wertes (Q=letzte Ziffer des Schlüssels): I i = ( I i −1 + Q * i + C )% R
9: 1708 10: 0619 11: 1093 1708 ....
I i = (11 + 8 * 1 + 10)%20 = 9 => keine Kollision Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
19: 23
Interne Datenorganisation – Index
Index für indizierten Zugriff
S19
.
S1
D1
S30
.
S40
...
Index
Datenblöcke S0
D0
...
S19
D19
S20
D20
...
S30
D30
Sx =Satzschlüssel Dx = Datensatz zu Schlüssel
Abb.: Einstufiger Index Im Normalfall kann der gesamte Index nicht im Hauptspeicher gehalten werden. Ein Einfügen eines Satzes muss ohne übermäßigen Aufwand möglich sein, ein Zugriff ohne Durchsuchung von vielen Indexblöcken. Was tun? Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
24
Interne Datenorganisation – Index ⇒ Organisation des Indexes mit Ziel der Minimierung der Hintergrundzugriffe. (Ein Zugriff auf die Platte benötigt in etwa 10000-mal mehr Zeit als eine Suche eines Schlüssels im Hauptspeicher!) ⇒ Organisation des Index als mehrstufigen Index (ISAM-Baum , is = Index-sequentiell, oder B-/B*-Baum) S50
S100
...
Indexblöcke S20
S30
S10
S1
...
D1
S50
...
S100
S20
S5
D5
...
S10
D10
Datenblöcke
Abb.: Mehrstufiger Index Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
25
Interne Datenorganisation – Index
Indexsequentielle Organisation (ISAM) Hier wird ein Überlaufbereich angelegt, der durch einen Zeiger mit dem normalen Dateibereich verbunden ist. an Tafel erklären. Nachteil ISAM-Bäume: Starre Indexstruktur, nach intensivem Einfügen werden Überlaufbereiche sehr groß. ⇒ große Laufzeiten, dann: Reorganisation notwendig, um wieder gute Zugriffszeiten zu erhalten. Wie kann ich es besser machen (ohne zusätzlichen Zeitaufwand zum Laden von Überlaufbereichen, ohne Reorganisation)?
B*-Bäume Bei B*-Bäumen wird beim Einfügen in einen vollen Datenblock kein Überlaufbereich gebildet, sondern der Datenblock wird geteilt. ⇒keine Reorganisation notwendig. Nachteil? B*-Baum benötigt mehr Speicherplatz Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
26
Interne Datenorganisation – B*-Baum B*-Baum: S20
S30
S10
S1
...
D1
S50
S20
S5
D5
Einzufügender Satz:
...
S3
S10
D10
D3
Falls wie oben im einzufügenden Datenblock nicht genügend Speicher frei: Nach Einfügung: S1
D1
S3
D3
S5
D5
S7
D7
S10
D10
zusätzlicher Datenblock Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
27
Interne Datenorganisation – B*-Baum Nach der Einfügung im Datenbereich muss auch im Indexbereich ein neuer Schlüssel mit Verweis auf den neuen Datenblock angelegt werden. Wenn der Indexblock, in den dieser Schlüssel eingefügt werden soll, voll ist, wird auch dieser geteilt: ⇒ nach Einfügung S5
S1
S10
D1
S3
S15
...
D3
S5
S17
D5
...
S20
S7
D7
S10
D10
Nach der Teilung des Indexblockes, muss im darüber liegenden Indexblock wiederum ein neuer Schlüssel eingefügt werden. Vorgehen wie oben. evtl. bis zur Teilung der Wurzel des Baumes ⇒ In diesem Fall entsteht eine weitere Indexstufe Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
28
Aufgabe: Interne Datenorganisation – B*-Baum Aufgabe: Fügen Sie in folgenden B*-Baum einen Satz mit dem Schlüssel 6 und anschließend einen Satz mit den Schlüssel 8 ein.
100
178
11
1|D
22
4|D
5|D
...
38
11|D
50
68
100
(1 Indexblock kann max. 6 Einträge enthalten)
(1 Datenblock kann max. 5 Sätze enthalten)
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
29
Aufgabe: Interne Datenorganisation – B*-Baum
Lösung:
38
5
1|D
11
4|D
178 ..
100
5|D
22
...
38
...
50
6|D
8|D
68
11|D
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
100
...
...
30
Interne Datenorganisation – B*-Baum
Löschung eines Satzes: Trivial. In manchen Algorithmen werden benachbarte Blöcke zusammen gefasst, falls: Summe der Inhalte benachbarter Blöcke < Obergrenze.
Ändern des Inhaltes (außer Schlüssel): Trivial.
Ändern des Schlüssels: = Löschen + Einfügen
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
31
Interne Datenorganisation – B-Baum
B-Baum: Ist ähnlich aufgebaut, enthält allerdings so wie der Binärbaum Daten auf jeder Ebene:
100|D
11|D
1|D
22|D
178|D
38|D
...
50|D
68|D
...
103|D
...
...
Indexbereich wird größer => schlechter als B*Baum Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
32
Interne Datenorganisation – Index Index für unser Beispiel (hier immer nur unterste Indexstufe, hier nicht eindeutiger Zugriffsschlüssel, Datei nicht sortiert nach Indexattribut):
Glasur (Index)
Produkt-Datei (Daten)
graublau
3011 Suppenteller türkis
graublau
1012 Teetasse
graublau Rose
graublau
3012 Essteller
türkis
türkis
1013 Untertasse
graublau Rose
...
türkis
1011 Teekanne
graublau Rose
...
Fisch ... ...
Fisch ...
Oft wird statt z. B. 3 graublau-Einträge im Index zu speichern, graublau nur einmal, aber mit 3 Zeigern gespeichert.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
33
Interne Datenorganisation – Index Beispiel: Mehrere Indexe Glasur (Index)
Produkt-Datei (Daten)
Dekor (Index)
graublau
3011 Suppenteller türkis
Fisch ...
Fisch
graublau
1012 Teetasse
graublau Rose
graublau
3012 Essteller
türkis
türkis
1013 Untertasse
graublau Rose
...
Rose
türkis
1011 Teekanne
graublau Rose
...
Rose
...
Fisch
Fisch ...
Rose
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
34
Interne Datenorganisation – Index Beispiel: Index mit mehreren Attributen
Glasur/Dekor (Index)
Produkt-Datei (Daten)
graublau/Rose
3011 Suppenteller türkis
graublau/Rose
1012 Teetasse
graublau Rose
graublau/Rose
3012 Essteller
türkis
türkis/Fisch
1013 Untertasse
graublau Rose
...
türkis/Fisch
1011 Teekanne
graublau Rose
...
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
Fisch ... ...
Fisch ...
35
Interne Datenorganisation – Index Dünner Index: • Nur, falls Datei nach dem Suchschlüssel sortiert ist (meistens bei Primärschlüssel). • Es gibt nur einen dünnen Index pro Datei. Falls zugehöriges Attribut(e) = Primärschlüssel: Primärindex, ansonsten Cluster-Index • Indexdatei enthält nicht für jeden Satz einen Eintrag, • sondern nur für den 1. (bzw. letzten) Satz im Block (in der Page). • Nach Laden der Page in den Hauptspeicher muss die Page noch nach dem Satz durchsucht werden (siehe z. B. binäre Suche, Zeitaufwand gegenüber Ladezeit z. B. einer weiteren Indexstufe vernachlässigbar) • Vorteil: wesentlich weniger Indexeinträge (=> weniger Speicherplatz, evtl. weniger Zugriffe auf Indexblöcke – falls Hierarchie eins niedriger als bei einem dichten Index) Dichter Index: • Für jeden Suchschlüsselwert gibt es Eintrag in Index mit evtl. mehreren Verweisen auf - Datensätze (Record-IDs) oder - Pages (Page-IDs) • Notwendig, wenn Datei nicht sortiert Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
36
Interne Datenorganisation – Index
Dünner Index mit Page-IDs:
ProdNr (Index) 1010
PID 1
2010
PID 2
3010
PID 3
PID 1 1010, 7;...; 1011, 5; 1012, 2;1013, 4; ...
PID 2 2010, ...; ...
PID 3 3010, ...; 3011, 1; 3012, 3; ...
Datenblöcke Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
37
Interne Datenorganisation – Index Weitere Varianten: Im Index selbst steht statt Adresse interne Satznummer (ISN), die in einem weitern Schritt auf die Adresse abgebildet wird (z. B. ADABAS). Vorteil: Bei Umspeicherung der Daten nur Änderungen im Adresskonverter. Bei direkter Adressierung: Änderungen auf der untersten Stufe aller Indexe Nachteil: Einen Zugriff mehr. Nach meinen Erfahrungen in den meisten Fällen nicht sinnvoll. Sekundärindexe bilden auf Primärschlüssel ab (VSAM). Vorteil: Bei Umspeicherung der Daten nur Änderungen im Primärindex Nachteil: 2 Bäume müssen durchsucht werden. Nach meiner Meinung in den meisten Fällen nicht sinnvoll.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
38
Interne Datenorganisation – Index Frage: Hatten wir in unseren obigen Beispielen mit Töpfereidaten einen dünnen oder dichten Index? Hatten wir in unseren obigen abstrakten B*-Baum-Beispielen einen dünnen oder dichten Index?
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
39
Interne Datenorganisation – Index
Antwort auf Fragen: • obige Beispiele mit Töpfereidaten:
Dichter Index
• obige abstrakte Beispiele zu B*-Baum: Dünner Index
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
40
Interne Datenorganisation Vorteile, Nachteile eines Index Vorteil Index: schneller Zugriff oft nur 3-4 Zugriffe (= Anzahl Indexstufen + Datenzugriff), - bei sehr großen Dateien etwas mehr Falls obere Indexstufe(n) im Hauptspeicher gehalten => weniger Zugriffe Ohne Index: Bei 100000 Sätzen, 10 Sätze pro Block => 10000 Plattenzugriffe (sequentiell) Nachteil Index: Bei Einfügungen von Sätzen, Löschung von Sätzen und Änderungen von invertierten Attributen (invertiertes Attribut = Attribut, über dem Index existiert): => Änderungen im Index notwendig
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
41
Interne Datenorganisation Wann ist Index sinnvoll? Wann ist Index sinnvoll? - Um direkt zuzugreifen (z. B. über where-clause) (bei allen Attributen möglich) - Bei der Durchführung von Join-Operationen (normalerweise nur bei Primärschlüssel und Fremdschlüssel) - Um Eindeutigkeit zu gewährleisten. Auf unterster Indexstufe wird dabei nur auf einen Datensatz verwiesen. (Ohne Index: Bei Einfügung => sequenzielles Lesen der gesamten Datei!) (Auf jeden Fall bei Primärschlüssel, aber auch anderen Attributen /Attributkombinationen) - Um zu sortieren! Bei Nicht-Primärschlüsselattributen bzw. Attribute die nicht den Clusterindex bestimmen. (Da Datei nach Primärschlüssel / Attribut(en) des Clusterindexes sortiert sind, wird der Index dort für Sortierung nicht benötigt – braucht man aber wegen Zugriff, Join, Eindeutigkeit.) Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
42
Interne Datenorganisation Wann legt man Index an? Wann legt man Index an? Immer, wenn man den Verdacht hat, dass irgendwann eine der obigen Funktionen gebraucht wird? Nein! Zu bedenken: • Aufwand für Pflege der Indexe bei Änderungsanweisungen • Speicherplatzbedarf ⇒ Abwägung der Vor- und Nachteile. Abhängig von - Verhältnis Änderungen zu Abfragen - Zeitbedarf für Änderung / Abfrage - Häufigkeit der direkten Zugriffe / Sortierungen. => Evtl. erst nachträgliches „Tuning“ d. h. Definition zusätzlicher Indexe. -Nach dem Sammeln von Daten über - Zugriffswahrscheinlichkeiten / Sortierwahrscheinlichkeiten / - Änderungswahrscheinlichkeiten bzgl. einzelner Attribute, - Einfüge und Löschwahrscheinlichkeiten einzelner Sätze und - den spezifizierten (zeitlichen) Anforderungen an die Anwendung. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
43
Interne Datenorganisation Mischverfahren
Neben der reinen Verwaltung der Datensätze mit Hash-Funktion oder Indexen gibt es unzählige Mischverfahren zwischen Hashing und Indexierung. z. B.: - Durch Hash-Funktion wird „Bucket“-Adresse ( z. B. Ersten 3 Bits des Hash-Wertes) berechnet, in dem dann die Datensätze abgelegt werden (u. U. mit Überlaufbereich – u. U. falls Bucket über mehrere Blöcke verteilt: Zugriff auf Datensätze im Bucket per Index (hier: sicherlich nur ein- (oder zwei-)stufig)) - Wie oben, aber bei zuviel Überlaufbuckets: Dynamische Aufteilung der Buckets auf 2 Buckets und Änderung der Hash-Funktion. - etc.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
44
Interne Datenorganisation Wann Hash-Verfahren, wann Index?
Wann welche Zugriffsmethode: •
•
Keine feste Regel. Normalerweise zuerst Baumindex. Falls Antwortzeiten zu lang: Experimentieren mit dem vom DBMS angebotenen Hash-Verfahren. Aber: - Bei Bereichsabfragen funktioniert nur Index, da die konkreten Werte nicht vorhanden sind. - Sortierung mit Hilfe eines Indexes möglich. (Aber: Evtl. ist Sort sogar besser.) - Beim Hashen: nur über getrennte Sort-Funktion.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
45
Interne Datenorganisation Cluster Was ist ein Cluster (Bei Clustern Aufbrechen der physikalischen Sortierung der Sätze aus einer Relation. Speicherung der abhängigen Relationentupel nahe beim "Vater") (1,1)
Markt
Clustering:
(0,*) 8
Veranstalter
Veranstalter1 MarktA MarktB MarktC Veranstalter2 MarktD MarktE .. Cluster Block
Ein Cluster kann sich auch über mehrere Blöcke erstrecken.
Frage: Würden Sie Buch mit Autor clustern? Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
46
Interne Datenorganisation Verzeigerungen Wie kann man durch Verzeigerung Performance gewinnen? -> ähnliche Verzeigerung wie im Netzwerk-Datenmodell oder OO-Modell (hier allerdings redundante Information) Wann legt man Cluster / Verzeigerungen an? -> Bei häufigen gleichzeitigen Zugriff auf verclusterte / verzeigerte Records. (z. B. Buch und Autoren) -> Um Sortierreihenfolge festzulegen Evtl. erst beim nachträglichen Tuning.
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
47
Interne Ebene beim Relationenmodell create [unique] index indexname on basisrelationsname (Spaltenname_1 ordnung_1, ... Spaltenname_n ordnung_n) hashed Beispiel: create index Produktname on Produkt (Produktbezeichnung asc, Groesse asc) hashed
falls Hash-Verfahren
Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
48
Fragen Interne Datenorganisation
Wie wird auf der Platte adressiert? Was ist ein Block, eine Page, eine Seite? Wie viele Sätze muss ich anschauen (max./min./durchschnittlich), um in einer unsortierten Liste den Satz mit einer eindeutigen / nichteindeutigen Nummer 4711 zu finden? wie viel bei sortierter Liste? wie viel Blockzugriffe? Erklären Sie das Prinzip des Zugriffs auf sortierte Liste per Adressrechnen auf unsortierte Liste per Hashing Was ist Faltung? Datei Mitarbeiter enthält Geschlecht (w, m). Würden Sie über diesem Attribut einen Index definieren um schneller eine Abfrage wie „gebe alle männl. Mitarbeiter aus“ durchzuführen? Was passiert beim B*-Baum, wenn ein neuer Satz nicht mehr in den entsprechenden Datenblock passt? Prof. Dr. Wolfgang Weber Vorlesung Datenbanken
49