Baum

Werbung
Kapitel 4:
Physikalische
Datenorganisation
1
Physikalische Datenorganisation
Record
Datensatz fester oder variabler Länge
mit Feldern bestimmten Typs
Block
Speichereinheit im Hintergrundspeicher
(29 - 212 Bytes)
File
Menge von Blöcken
Pinned record
Blockadresse + Offset
Unpinned record Blockadresse + Recordschlüssel
Blockadresse + Tupelidentifikator
2
Tupelidentifikator:
Verschieben innerhalb der Seite
TID
4711
2
1
2
3
5001
Grundzüge
4052
Logik
...
5041
Ethik
...
...
4052 Mathematische
Logik ...
Seite 4711
3
Tupelidentifikator: Verdrängen auf andere Seite
TID
4711 2
1 2 3
1 2 3
5001
5041
Grundzüge
Ethik
...
4052 Mathematische
Logik für
Informatiker...
...
4052 Mathematische
4052
LogikMathematische
...
4812 3 Logik
Seite 4711
Seite 4812
4
Implementierung des E-R-Modells
• pro Entity ein Record mit den Attributen als Datenfelder
• pro Relationship ein Record mit den TIDs der beteiligten Entities
5
Speicher-Operationen
• INSERT:
Einfügen eines Records
• LOOKUP:
Suchen eines Records
• MODIFY:
Modifizieren eines Records
• DELETE:
Löschen eines Records
6
Heap-File
• INSERT:
Record am Ende einfügen
• LOOKUP:
Gesamtes File durchsuchen
• MODIFY:
Record überschreiben
• DELETE:
Lösch-Bit setzen
7
Hashing
•
•
•
•
•
alle Records sind auf Buckets verteilt
ein Bucket besteht aus einer verzeigerten Liste von Blöcken
Bucketdirectory enthält Einstiegsadressen
Hashfunktion (angewandt auf Schlüssel) liefert zuständige Liste
Bei N Buckets bildet die Hashfunktion einen Schlüssel auf eine
Zahl zwischen 0 und N-1 ab.
• Pro Datenrecord ein Frei/Belegt-Bit
8
Beispiel für Hashorganisation (|v| mod 5)
0
1 1 Peter
Fritz
1
1 0 Thomas
2
1 1 Melanie
Susanne
3
1 1 Ute
Eberhard
4
1 1 Kurt
Karl
1 0 Beate
1 0 Eva
9
Beispiel für Hash-Funktion
Sei N die Anzahl der Buckets. Fasse den Schlüssel v als k Gruppen von
jeweils n Bits auf. Sei di die i-te Gruppe als natürliche Zahl interpretiert:
dk
dk-1
d2
d1
h(v) = (dk + dk-1 + . . . + d2 + d1) mod N
10
Hash-Operationen für Schlüssel v
• LOOKUP:
Berechne h(v) = i. Lies den für i zuständigen Directory-Block ein,
und beginne bei der für i vermerkten Startadresse mit dem
Durchsuchen aller Blöcke.
• MODIFY:
Falls Schlüssel beteiligt: DELETE und INSERT durchführen.
Andernfalls: LOOKUP durchführen und dann überschreiben.
• INSERT:
Zunächst LOOKUP durchführen. Falls Satz mit v vorhanden:
Fehler. Sonst: Freien Platz im Block überschreiben und ggf.
neuen Block anfordern.
• DELETE:
Zunächst LOOKUP durchführen. Bei Record Löschbit setzen.
11
Beispiel für Hashorganisation
0
1 1 Peter
Fritz
1
1 0 Thomas
2
1 1 Melanie
Susanne
3
1 1 Ute
Eberhard
4
1 1 Kurt
Karl
Hashorganisation: Ausgangslage
1 0 Beate
1 0 Eva
h(s) = |s| mod 5
Paul einfügen
12
Beispiel für Hashorganisation
0
1 1 Peter
Fritz
1 0 Beate
1
1 0 Thomas
2
1 1 Melanie
Susanne
3
1 1 Ute
Eberhard
1 0 Eva
4
1 1 Kurt
Karl
1 0 Paul
Hashorganisation: nach Einfügen von Paul
Kurt umbenennen nach Curdt
13
Beispiel für Hashorganisation
0
1 1 Peter
Fritz
1 1 Beate
1
1 0 Thomas
2
1 1 Melanie
Susanne
3
1 1 Ute
Eberhard
1 0 Eva
4
0 1
Karl
1 0 Paul
Curdt
Hashorganisation: nach Umbenennen von Kurt in Curdt
14
Probleme beim Hashing
•
•
•
•
Blocklisten werden immer länger
Reorganisation erforderlich
Keine Sortierung
Keine Bereichsabfragen
15
ISAM (Index sequential access method)
• Index-Datei mit Verweisen in die Hauptdatei.
• Index-Datei enthält Tupel < Schlüssel,Blockadresse>,
sortiert nach Schlüsseln.
• Liegt < v, a > in der Index-Datei, so sind alle Record-Schlüssel
im Block, auf den a zeigt, größer oder gleich v.
16
ISAM-Operationen für Record mit Schlüssel v
• LOOKUP (für Schlüssel v):
Suche in Index-Datei den letzten Block mit erstem Eintrag v2  v.
Suche in diesem Block das letzte Paar (v3, a) mit v3  v.
Lies Block mit Adresse a und durchsuche ihn nach Schlüssel v.
• MODIFY:
Zunächst LOOKUP. Falls Schlüssel an Änderung beteiligt:
DELETE + INSERT. Sonst: Record ändern, Block
zurückschreiben.
• INSERT:
Zunächst LOOKUP. Falls Block noch Platz für Record hat:
einfügen. Falls Block voll ist: Nachfolgerblock oder neuen Block
wählen und Index anpassen.
• DELETE:
Analog zu INSERT
17
Beispiel für Indexorganisation
1
1
1
1
Anton
Doris
1
1
0
0
Sabine
Theo
Karl
Paul
1
1 Anton
Berta
1
1 Doris
Emil
1
1 Karl
Norbert
1
1 Paul
Peter
1
0 Sabine
1
1 Theo
Ute
Index-Organisation: Ausgangslage
Manfred einfügen
18
Beispiel für Indexorganisation
1
1
1
1
Anton
Doris
Karl
1
1
1
0
Paul
Sabine
Theo
Norbert
1
1 Anton
Berta
1
1 Doris
Emil
1
1 Karl
Manfred
1
0 Norbert
1
1 Paul
1
1 Sabine
1
1 Theo
Peter
Ute
Index-Organisation: nach Einfügen von Manfred
19
Sekundär-Index
Sekundärindex besteht aus Index-File
mit Einträgen der Form <Attributwert, Adresse>.
20
Sekundär-Index für Gewicht
68
71
72
78
83
21
Beispiel zur physikalischen Speicherung
Gegeben seien 300.000 Records mit folgenden Angaben:
Attribut
Bytes
Pers-Nr.
Vorname
Nachname
Straße
PLZ
Ort
15
15
15
25
5
25
Platzbedarf pro Record: 100 Bytes.
Die Blockgröße betrage 1024 Bytes.
22
Fragen zur Zahl der Records
Wieviel Daten-Records passen in einen zu 100% gefüllten Datenblock?
1024 / 100 = 10
Wieviel Daten-Records passen in einen zu 75% gefüllten Datenblock?
10 * 0,75 = 7-8
Wieviel Schlüssel / Adresspaare passen in einen zu 100% gefüllten Indexblock?
1.024 / (15+4) = 53
Wieviel Schlüssel / Adresspaare passen in einen zu 75% gefüllten Indexblock?
1.024 / (15+4)*0,75  40
23
Heapfile versus ISAM
Welcher Platzbedarf entsteht beim Heapfile?
300.000 / 10 = 30.000 Blöcke
Wieviel Blockzugriffe entstehen im Mittel beim Heapfile?
30.000 / 2 = 15.000
Welcher Platzbedarf entsteht im Mittel bei ISAM?
300.000 / 7,5
40.000 / 40
 40.000 zu 75% gefüllte Datenblöcke +
 1.000 zu 75% gefüllte Indexblöcke
Wieviel Blockzugriffe entstehen im Mittel bei ISAM?
log2(1.000) + 1  11 Blockzugriffe
24
B*-Baum
• Jeder Weg von der Wurzel zu einem Blatt hat dieselbe Länge.
• Jeder Knoten außer der Wurzel und den Blättern hat
mindestens k Nachfolger.
• Jeder Knoten hat höchstens 2 • k Nachfolger.
• Die Wurzel hat keinen oder mindestens 2 Nachfolger.
25
B*-Baum-Adressierung
Ein Knoten wird auf einem Block gespeichert
Ein Knoten mit j Nachfolgern (j  2•k)
speichert j Paare von Schlüsseln und Adressen (s1, a1), . . . , (sj, aj).
Es gilt s1  s2  . . .  sj.
Eine Adresse in einem Blattknoten führt zum Datenblock mit den
restlichen Informationen zum zugehörigen Schlüssel
Eine Adresse in einem anderen Knoten führt zu einem Baumknoten
26
Einfügen in B*Baum
17
22
31
17
42
77
42
47
53
61
77
79
eingefügt werden soll: 45
27
Einfügen in B*Baum
17
22
31
17
42
77
42
47
53
61
77
79
eingefügt werden soll: 45
Block anfordern
Überlaufblock füllen
28
Einfügen in B*Baum
17
22
31
17
42
42
47
77
77
53
79
61
eingefügt werden soll: 45
Element einordnen
29
Einfügen in B*Baum
17
22
31
17
42
77
42
45
47
77
53
79
61
eingefügt werden soll: 45
Vorgänger korrigieren
30
Einfügen in B*Baum
17
22
31
17
42
53
42
45
47
77
77
53
79
61
eingefügt wurde: 45
31
Sequenz für B*-Baum mit k=2
27
55
12
94
37
88
72
39
25
88
74
58
64
32
27
27
33
27 55
27
34
27
55
27 55
35
27
55
12
27 55
36
27
55
12
12 27 55
37
27
55
12
94
12 27 55
38
27
55
12
94
12 27 55 94
39
27
55
12
94 37
12 27 55 94
40
27
55
12 27
12
94 37
55 94
41
27
55
12 27 37
12
94 37
55 94
42
27
55
12
94 37
12
12 27 37
55
55 94
43
27
55
12
94 37
88
12
12 27 37
55
55 94
44
27
55
12
94 37
88
12
12 27 37
55
55 88 94
45
27
55
12
94 37
88
72
12
12 27 37
55
55 88 94
46
27
55
12
94 37
88
72
12
12 27 37
55
55 72 88 94
47
27
55
12
94 37
88
72
12
12 27 37
39
55
55 72 88 94
48
27
55
12
94 37
88
72
12
12 27 37 39
39
55
55 72 88 94
49
27
55
12
94 37
88
72
12
12 27 37 39
39
25
55
55 72 88 94
50
27
55
12
94 37
88
72
39
25
12 37 55
12 27
37 39
55 72 88 94
51
27
55
12
94 37
88
72
39
25
12 37 55
12 25 27
37 39
55 72 88 94
52
27
55
12
94 37
88
72
39
25
91
12 37 55
12 25 27
37 39
55 72 88 94
53
27
55
12
94 37
88
72
39
25
91
12 37 55 88
12 25 27
37 39
55 72
88 94
54
27
55
12
94 37
88
72
39
25
91
12 37 55 88
12 25 27
37 39
55 72
88 91 94
55
27
55
12
94 37
88
72
39
25
91
74
12 37 55 88
12 25 27
37 39
55 72
88 91 94
56
27
55
12
94 37
88
72
39
25
91
74
12 37 55 88
12 25 27
37 39
55 72 74
88 91 94
57
27
55
12
94 37
88
72
39
25
88
74
58
12 37 55 88
12 25 27
37 39
55 72 74
88 91 94
58
27
55
12
94 37
88
72
39
25
88
74
58
12 37 55 88
12 25 27
37 39
55 58 72 74
88 91 94
59
27
55
12
94 37
88
72
39
25
88
74
58
64
12 37 55 88
12 25 27
37 39
55 58 72 74
88 91 94
60
27
55
12
94 37
88
72
39
25
88
74
58
64
12 37 72 88
12 25 27
37 39
55 58
72 74
88 91 94
61
27
55
12
94 37
88
72
39
25
88
74
58
64
12 37 72 88
12 25 27
37 39
55 58 64
72 74
88 91 94
62
27
55
12
94 37
88
72
39
25
12 37
12 25 27
37 39
88
74
58
64
55 72 88
55 58 64
72 74
88 91 94
63
27
55
12
94 37
88
72
39
25
88
74
58
64
12 55
12 37
12 25 27
37 39
55 72 88
55 58 64
72 74
88 91 94
64
27
55
12
94 37
88
72
39
25
88
74
58
64
12 55
12 37
12 25 27
37 39
55 72 88
55 58 64
72 74
88 91 94
Sequenz eingefügt
65
Löschen in B*Baum
17
22
31
17
42
77
42
47
53
61
77
79
Entferne 53
66
Löschen in B*Baum
17
22
31
17
42
77
42
47
61
77
79
Entferne 79
67
Löschen in B*Baum
17
22
31
17
42
42
47
61
61
77
Entferne 42
68
Löschen in B*Baum
17
22
17
31
31
47
61
61
77
Entferne 47
69
Löschen in B*Baum
17
17
22
31
61
61
77
Entferne 77
70
Löschen in B*Baum
17
17
22
31
31
61
Entferne 22
71
Löschen in B*Baum
17
31
61
72
Fragen zum B*Baum
Wie groß ist k ?
Blockgröße / (Schlüssel / Adresspaar-Größe) =
1024 / (15+4) / 2 = 26
Wieviel Söhne hat eine zu 50 % gefüllte Wurzel ?
26
Wieviel Söhne hat ein zu 75 % gefüllter Knoten ?
39
Wieviel zu 75 % gefüllte Datenblöcke sind erforderlich ?
300.000 / 7,5  40.000
73
Platzbedarf B*Baum
Wieviel Blöcke belegt der B*Baum ?
Höhe
Knoten
Zeiger aus Knoten
0
1
26
1
26
26 * 39 = 1.014
2
26*39
26*39*39 = 39.546
 drei Ebenen reichen aus
 Platzbedarf = 1 + 26 + 26*39 + 39.546  40.000 Blöcke
Wieviel Blockzugriffe sind erforderlich ?
4
74
Hashing versus B*Baum
Welcher Platzbedarf entsteht beim Hashing, wenn dieselbe
Zugriffszeit erreicht werden soll wie beim B*Baum?
4 Blockzugriffe = 1 Directory-Blockzugriff + 3 Datenblockzugriffe.
 Buckets bestehen im Mittel aus 5 Blöcken.
 von 5 Blöcken sind 4 voll und der letzte halb voll.
 4,5 * 10 = 45 Records pro Bucket
 300.000 / 45 = 6666 Buckets erforderlich
 6666 / (1024 / 4) = 26 Directory-Blöcke
 Platzbedarf = 26 + 5 * 6.666 = 33.356
75
B*Baum versus Hashing
B*Baum
Hashing
Vorteile
Dynamisch
Sortierung möglich
Schnell
platzsparend
Nachteile
Speicheroverhead
kompliziert
keine Sortierung
Neuorganisation
76
Herunterladen