Kapitel 13. Interne Datenorganisation. Prof. Dr. Wolfgang Weber Vorlesung Datenbanken

Kapitel 13 Interne Datenorganisation Prof. Dr. Wolfgang Weber Vorlesung Datenbanken 1 Interne Ebene Daten sind so zu organisieren, dass Anzahl Pl...
Author: Birgit Kästner
0 downloads 0 Views 628KB Size
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

Suggest Documents