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