1 Physikalische Datenorganisation RecordDatensatz fester oder variabler Länge mit Feldern bestimmten Typs BlockSpeichereinheit im Hintergrundspeicher ( Bytes) FileMenge von Blöcken Pinned recordBlockadresse + Offset Unpinned recordBlockadresse + Recordschlüssel Blockadresse + Index (Tupelidentifikator)
2 Tupelidentifikator: Verschieben innerhalb der Seite Grundzüge Ethik... TID 123 Seite Logik Mathematische Logik...
3 Tupelidentifikator: Verdrängen auf andere Seite 4052 Mathematische Logik Grundzüge Ethik... TID 123 Seite Seite Mathematische Logik für Informatiker Mathematische Logik
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 INSERT: Einfügen eines Records DELETE: Löschen eines Records MODIFY: Modifizieren eines Records LOOKUP: Suchen eines Records Speicher-Operationen
6 Heap-File INSERT: Record am Ende einfügen DELETE: Lösch-Bit setzen MODIFY: Record überschreiben LOOKUP: Gesamtes File durchsuchen
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
Peter Thomas Melanie Ute Kurt Fritz Susanne Eberhard Karl Beate 10Eva Beispiel für Hashorganisation (|v| mod 5)
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 d i die i-te Gruppe als natürliche Zahl interpretiert: dkdk d k-1 d2d2 d1d1 h(v) = (d k + d k d 2 + d 1 ) 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.
Peter Thomas Melanie Ute Kurt Fritz Susanne Eberhard Karl Beate 10Eva Paul einfügen Hashorganisation: Ausgangslage h(s) = |s| mod 5
Peter Thomas Melanie Ute Kurt Fritz Susanne Eberhard Karl Beate 10Eva Paul Hashorganisation: nach Einfügen von Paul Kurt umbenennen nach Curdt
13 Peter Thomas Melanie Ute Fritz Susanne Eberhard Karl BeateCurdt 10Eva Paul Hashorganisation: nach Umbenennen von Kurt in Curdt
14 Probleme beim Hashing durch dynamisch sich ändernden Datenbestand: Blocklisten werden immer länger Reorganisation erforderlich
15 Erweiterbares Hashing Hashfunktion liefert Binärstring verwende geeigneten Prefix des Binärstring als Adresse
16 Beispiel für erweiterbares Hashing MatNrNameHashwert 2125Sokrates Russel Kopernikus Descartes Hashwert = umgekehrte Binärdarstellung von Matrikelnummer Ein Datenblock enthalte zwei Records
17 Beispiel für erweiterbares Hashing x d p h(x) 0 (2126, Russel, C4, 232) (2125, Sokrates, C4, 226) (2127, Kopernikus, C3, 310) 1 t = 1 t´= Sokrates Russel Kopernikus Descartes Sokrates, Russel, Kopernikus einfügen Descartes einfügenBucket 1 läuft überSetze globale Tiefe t:=2
18 Beispiel für erweiterbares Hashing x d p h(x) 00 (2126, Russel, C4, 232) (2125, Sokrates, C4, 226) (2127, Kopernikus, C3, 310) 01 t´= 2 t´= 1 t = (2129, Descartes, C3, 312) t´= Sokrates Russel Kopernikus Descartes
19 Defizite beim Hashing Keine Sortierung Keine Bereichsabfragen
20 ISAM (Index sequential access method) Index-Datei mit Verweisen in die Hauptdatei. Index-Datei enthält Tupel, sortiert nach Schlüsseln. Liegt in der Index-Datei, so sind alle Record-Schlüssel im Block, auf den a zeigt, größer oder gleich v.
21 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 v 2 v. Suche in diesem Block das letzte Paar (v 3, a) mit v 3 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
22 Manfred einfügen Index-Organisation: Ausgangslage
23 Index-Organisation: nach Einfügen von Manfred
24 Sekundär-Index Sekundärindex besteht aus Index-File mit Einträgen der Form.
25 Sekundär-Index für Gewicht
26 Beispiel zur physikalischen Speicherung Gegeben seien Records mit folgenden Angaben: Die Blockgröße betrage 1024 Bytes. AttributBytes AttributBytes Pers-Nr.15 Vorname15 Nachname15 Straße25 PLZ 5 Ort25 Platzbedarf pro Record: 100 Bytes.
27 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? / (15+4) = 53 Wieviel Schlüssel / Adresspaare passen in einen zu 75% gefüllten Indexblock? / (15+4)*0,75 40
28 Heapfile versus ISAM Welcher Platzbedarf entsteht beim Heapfile? / 10 = Blöcke Wieviel Blockzugriffe entstehen im Mittel beim Heapfile? / 2 = Welcher Platzbedarf entsteht im Mittel bei ISAM? / 7, zu 75% gefüllte Datenblöcke / zu 75% gefüllte Indexblöcke Wieviel Blockzugriffe entstehen im Mittel bei ISAM? log 2 (1.000) Blockzugriffe
29 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.
30 B*-Baum-Adressierung Ein Knoten wird auf einem Block gespeichert Ein Knoten mit j Nachfolgern (j 2k) speichert j Paare von Schlüsseln und Adressen (s 1, a 1 ),..., (s j, a j ). Es gilt s 1 s 2... s j. 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
31 Einfügen in B*Baum eingefügt werden soll:
32 Einfügen in B*Baum eingefügt werden soll: 45 Block anfordern Überlaufblock verteilen
33 Einfügen in B*Baum eingefügt werden soll: 45 Vorgänger korrigieren
34 Einfügen in B*Baum eingefügt wurde:
Sequenz für B*-Baum mit k=2
36 27
Sequenz eingefügt
69 Löschen in B*Baum Entferne 53
70 Löschen in B*Baum Entferne 79
71 Löschen in B*Baum Entferne 47
72 Löschen in B*Baum Entferne 77
73 Löschen in B*Baum Entferne 22
74 Löschen in B*Baum
75 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 ? / 7,
76 Platzbedarf B*Baum Wieviel Blöcke belegt der B*Baum ? HöheKnotenZeiger aus Knoten * 39 = *3926*39*39 = drei Ebenen reichen aus Platzbedarf = * Blöcke Wieviel Blockzugriffe sind erforderlich ? 4
77 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 / 45 = 6666 Buckets erforderlich 6666 / (1024 / 4) = 26 Directory-Blöcke Platzbedarf = * =
78 B*Baum versus Hashing B*BaumHashing VorteileDynamischSchnell Sortierung möglichplatzsparend NachteileSpeicheroverheadkeine Sortierung kompliziertNeuorganisation
79 Mehrdimensionale Suchstrukturen Alterzwischen 20 und 30 Einkommenzwischen 2000 und 3000 PLZzwischen und 50000
80 Query-Rechteck y2y2 y1y1 y x x1x1 x2x2 E D C B G F HI K A J
81 k-d-Baum zur Verwaltung von mehrdimensionalen Datenpunkten Verallgemeinerung des binären Suchbaums mit k-dimensionalem Sortierschlüssel Homogene Variante: Baumknoten enthält Datenrecord + Zeiger Inhomogene Variante: Baumknoten enthält Schlüssel + Zeiger Blätter enthalten Zeiger auf Datenrecord Ebene i modulo k diskriminiert bzgl. Dimension i x y z
82 2-d-Baum Im 2-dimensionalen Fall gilt für Knoten mit Schlüssel [x/y]: im linken Sohnim rechten Sohn Auf ungerader Ebenealle Schlüssel xalle Schlüssel > x Auf gerader Ebenealle Schlüssel yalle Schlüssel > y
83 2-d-Baum A C B D E F G H
84 Beispiel für 2-d-Baum D 6/2H8/5 C 9/4 B14/3 B A 5/6 G1/8 F 12/7 E 7/9 bzgl. y kleiner bzgl.x kleiner bzgl. y kleiner bzgl. y grösser bzgl. y grösser bzgl.x grösser bzgl.x grösser Ebene 0
85 Beispiel für 2-d-Baum D 6/2H8/5 C 9/4 B14/3 B A 5/6 G1/8 F 12/7 E 7/9 bzgl. y kleiner bzgl.x kleiner bzgl. y kleiner bzgl. y grösser bzgl. y grösser bzgl.x grösser bzgl.x grösser Insertz.B. füge Record [3/9] I 3/9
86 Beispiel für 2-d-Baum D 6/2H8/5 C 9/4 B14/3 B A 5/6 G1/8 F 12/7 E 7/9 bzgl. y kleiner bzgl.x kleiner bzgl. y kleiner bzgl. y grösser bzgl. y grösser bzgl.x grösser bzgl.x grösser Exact Matchz.B. finde Record [15/5]
87 Beispiel für 2-d-Baum D 6/2H8/5 C 9/4 B14/3 B A 5/6 G1/8 F 12/7 E 7/9 bzgl. y kleiner bzgl.x kleiner bzgl. y kleiner bzgl. y grösser bzgl. y grösser bzgl.x grösser bzgl.x grösser Partial Matchz.B. finde alle Records [x/y] mit x=7
88 Beispiel für 2-d-Baum D 6/2H8/5 C 9/4 B14/3 B A 5/6 G1/8 F 12/7 E 7/9 bzgl. y kleiner bzgl.x kleiner bzgl. y kleiner bzgl. y grösser bzgl. y grösser bzgl.x grösser bzgl.x grösser Range-Queryz.B. finde alle Records [x/y] mit 8 x 13, 5 y 8
89 Beispiel für 2-d-Baum D 6/2H8/5 C 9/4 B14/3 B A 5/6 G1/8 F 12/7 E 7/9 bzgl. y kleiner bzgl.x kleiner bzgl. y kleiner bzgl. y grösser bzgl. y grösser bzgl.x grösser bzgl.x grösser Best Matchz.B. finde nächsten Nachbarn zu [7/3]
90 2-d-Baum A C B D E F G H
91 Inhomogene Variante
92 Partitionierungen
93 Gitterverfahren mit konstanter Gittergröße
94 Grid File Alternative zu fester Gittergröße 1981 vorgestellt von Hinrichs & Nievergelt 2-Platten-Zugriffsgarantie Bei k-dimensionalen Tupeln: k Skalen zum Einstieg ins Grid-Directory (im Hauptspeicher) Grid Directory zum Finden der Bucket-Nr. (Hintergrundspeicher) Bucket für Datensätze (Hintergrundspeicher)
95 Grid File im 2-dimensionalen Fall Alle Records der roten Gitterzelle sind im Bucket mit Adresse G[1,2] 0 y[i],i=0,.. max_y y x x x[i],i=0,.. max_x y Region:benachbarte Gitterzellen Gitterzelle: rechteckiger Teilbereich Bucket:speichert Records einer Region
96 Bucket Directory Suche Record [35 / 2400] Befrage Skalen asp07nk99jh aasdf0cß03j400d0v 9v8asßfimo98csi98a dxcvß98dspa0s9fxc0 wi00808ß3jsßsa9ßß Lade G[1,2] vom Bucketdirectory Lade Datenblock
Datenrecords 4 Datenrecords passen in ein Bucket X-Achse und Y-Achse habe 500 Unterteilungen Einträge im Bucketdirectory 4 Bytes pro Adresse Bytes pro Block 250 Zeiger pro Directory-Block Directory-Blöcke i 249: G[i,j] befindet sich auf Block 2*j als i-te Adresse i > 249: G[i,j] befindet sich auf Block 2*j+1 als (i-250)-te Adresse Beispiel für Bucket Directory G[280,2] auf Block 5 an Position
98 Bucket-Überlauf Eine Zelle in Region Mehrere Zellen in Region
99 Aufspalten der Regionen Insert A = [5 / 6]
100 Aufspalten der Regionen A A Insert B = [14 / 3]
101 Aufspalten der Regionen A B A B Insert C = [9 / 4]
102 Aufspalten der Regionen A C B B C A Insert D = [6 / 2]
103 Aufspalten der Regionen A C B B C A D D Insert E = [7 / 9]
104 Aufspalten der Regionen Insert F = [12 / 7]
105 Aufspalten der Regionen Insert G = [1 / 8]
106 Aufspalten der Regionen B C E A C B F F D G A E D G Insert A = [5 / 6]
107 Dynamik des Grid Directory Insert A=[12 / 280] 3 Datenrecords pro Bucket
108 Dynamik des Grid Directory A Insert B=[25 / 220]
109 Dynamik des Grid Directory A B Insert C=[45 / 270]
110 Dynamik des Grid Directory A B C Insert D=[22 / 275]
111 Dynamik des Grid Directory A B C D Insert E=[24 / 260]
112 Dynamik des Grid Directory C A B D E 250 Insert F=[26 / 280]
113 Dynamik des Grid Directory A B C D E F Directory Block vergröbern
114 Dynamik des Grid Directory A B C D E F
115 Vereinigung von Regionen bei zu geringer Bucketauslastung: Benachbarte Regionen vereinigen Vereinigung muß Rechteck ergeben Vereinigung wird ausgelöst wenn Bucket < 30 % Auslastung wenn vereinigtes Bucket < 70 % Auslastung
116 Nearest Neighbor Q P R
117 Verwaltung von geometrischen Objekten Grid File unterstützt Range-Query bisher:k Attribute Jetzt:k-dimensionale Punkte
118 Verwaltung von Intervallen E A B C D F A [Anfang / Ende] E A B C D F Besser: [Mittelpunkt / halbe Länge]
119 Query-Punkt gegen Intervall Punkt p liegt im Intervall mit Mitte m und halber Länge d m-d p m+d m-d m+d m
120 Query-Punkt gegen Intervall E A B C D F E A B C D F Punkt p liegt im Intervall mit Mitte m und halber Länge d m-d p m+d p=5 m-d 5 m+d
121 Query-Intervall gegen Intervall Intervall mit Mitte s und halber Länge t schneidet Intervall mit Mitte m und halber Länge d m-d s+t und s-t m+d m-dm+d s+ts-t
122 Query-Intervall gegen Intervall E A B C D F E A B C D F Intervall mit Mitte s und halber Länge t schneidet Intervall mit Mitte m und halber Länge d m-d s+t und s-t m+d s=10, t=1 m-d 11 und 9 m+d
123 Query-Rechteck gegen Rechteck Stelle Rechteck durch vierdimensionalen Punkt dar