Datenbanksysteme 1 - Übung 0 Andreas Göbel Friedrich-Schiller-Universität Jena Lehrstuhl für Datenbanken und Informationssysteme Vorstellung Dipl.-Inf. Andreas Göbel • Bis 31.03.2009: Informatik-Studium an der FSU • Seit 01.04.2009: Wissenschaftlicher Mitarbeiter an der FSU – – – – Lehrstuhl für Datenbanken und Informationssysteme Raum: 3233 Telefon: 03641/946363 E-Mail: [email protected] • Forschungsgebiete: – Database as a Service (DaaS) – NoSQL-Datenbanken – Multi-Tenancy-Datenbanken 2 DBS1-Übung 24./27.10.2011 Organisatorisches (I) • 2 Übungsgruppen – Mo, 14:15 – 15:45 Uhr – Do, 08:15 – 09:45 Uhr – Einschreibung über Friedolin erforderlich • Je 7 Übungstermine – Vertiefung und praktische Erprobung des Vorlesungsstoffes – Vorbereitung auf die Klausur • 1. Übungstermin: Zugriffspfade – Mehrwegbäume (B-Bäume, B*-Bäume) – Streuspeicherverfahren (Hashing, Extendible Hashing) • 2. - 7. Übungstermin: – Besprechung der Aufgabenblätter 3 DBS1-Übung 24./27.10.2011 Organisatorisches (II) • http://www.informatik.uni-jena.de/dbis/lehre/ws2011 /dbs1/index.html – Prüfungsmodalitäten – Organisatorisches und Hinweise – Ergänzende Materialien zur Vorlesung und Übung • Klausur: 07. Februar 2012 16.00 - 17.30 Uhr HS 2, Carl-Zeiss-Str. 3 • Klausurteilnahme nur für angemeldete Studenten: – – – – 4 B.Sc.-Studiengänge: Diplom-Studiengänge: M.Sc. Bio-Informatik: M.Sc. Wirt.-Informatik: elektronisch über Friedolin schriftlich über Formular schriftlich über Formular schriftlich über Liste (3329, EAP2) DBS1-Übung 24./27.10.2011 Zugriffspfade - Motivation • Ablage von Daten soll einfachen, schnellen und inhaltsbezogenen Zugriff ermöglichen – Bsp: "Gib mir alle Angestellten, die mehr als 3 Kinder haben und vor dem 01.01.2010 in die Firma eingetreten sind.“ • Randbedingungen – Datensätze werden blockweise gespeichert in sog. Seiten (Dateneinheit fester Größe auf Extern- oder Arbeitsspeicher) – Große Datenmengen nicht komplett im Hauptspeicher ablegbar – I.d.R. mehr Suchanfragen als Änderungen auf Informationen • Wozu Zugriffspfade? – Sequentielle Suche über GB/TB an Daten nicht akzeptabel – Minimierung der Anzahl von Externspeicherzugriffen (Latenz um Faktor 106 langsamer als beim Arbeitsspeicher) – Zielkonflikt: Zugriffsbeschleunigung vs. Aktualisierungsaufwand 5 DBS1-Übung 24./27.10.2011 Speicherstrukturen Entnommen aus Datenbanksysteme: Konzepte und Techniken der Implementierung von Theo Härder, Erhard Rahm 6 DBS1-Übung 24./27.10.2011 Mehrwegbäume • Ausgangspunkt: balancierte binäre Suchbäume – Pro Knoten nur ein Schlüsselwert geringer Verzweigungsgrad und große Baumhöhe viele Seitenzugriffen und somit viele Externspeicherzugriffe • Zielstellung der Mehrwegbäume – Zusammenfassung mehrerer Sätze/Schlüssel zu einem Knoten – Höherer Verzweigungsgrad führt zu niedriger Baumhöhe – Kompromiss für wahlfreien Schlüsselzugriff und sortierte Verarbeitung – Aufwand von Änderungsoperationen akzeptabel • Beispiele: B- und B*-Baum 7 DBS1-Übung 24./27.10.2011 B-Baum • Vorschlag von R. Bayer und E. McCreight (1970) • Daten und Suchinformationen in Baumstruktur angeordnet • Baumknoten werden auf Seiten abgebildet, die vom DBMS verwaltet werden • Typische Seitengrößen: 4, 8, 16, 32 KB • Seiten- bzw. Knotenaufbau: • Beispielknoten: ... 8 ... DBS1-Übung ... 24./27.10.2011 B-Baum • Definition eines B-Baums mit Ordnung n: – Jeder Weg von der Wurzel zum Blatt hat die gleiche Länge h – Jeder Knoten (außer Wurzel und Blätter) hat mindestens n+1 Söhne. Die Wurzel ist ein Blatt oder hat mindestens 2 Söhne. Jedes Blatt besitzt mindestens n Einträge. – Jeder Knoten hat höchstens 2n+1 Söhne • Beispiel mit n=2: • Beschränkung der Höhe für N Datensätze (N>0): N +1 log2 n +1 ( N + 1) ≤ h ≤ logn +1 ( ) 2 9 DBS1-Übung 24./27.10.2011 DBS1-Übung 24./27.10.2011 Suchen im B-Baum 10 Einfügen im B-Baum (I) 11 DBS1-Übung 24./27.10.2011 Einfügen im B-Baum (II) 12 DBS1-Übung 24./27.10.2011 Löschen im B-Baum (I) 13 DBS1-Übung 24./27.10.2011 Löschen im B-Baum (II) 14 DBS1-Übung 24./27.10.2011 Löschen im B-Baum (III) 15 DBS1-Übung 24./27.10.2011 Löschen im B-Baum (IV) 16 DBS1-Übung 24./27.10.2011 Löschen im B-Baum (V) 17 DBS1-Übung 24./27.10.2011 Bewertung • B-Baum ist robust gegen Entartung durch Reorganisation • Ordnung n beeinflusst Effizienz – großes n niedrige Baumhöhe bessere Performance • Jede zusätzliche Seitenanforderung kostet viel Zeit ( Pufferverwaltung) • Wurzelknoten möglichst im Hauptspeicher halten – ABER: n ist durch Seitengröße beschränkt (z.B. 4, 8, 16 KB) • Doppelrolle der Schlüsselwerte si – si bildet ab auf Datensatz di und ist Weiche zur Suchsteuerung – Datenteil für Suchsteuerung nicht erforderlich – Idee: Datenteile nur auf Blattebene speichern B*-Baum 18 DBS1-Übung 24./27.10.2011 B*-Baum 19 DBS1-Übung 24./27.10.2011 B*-Baum • Vorschlag von Donald Knuth (1973) • Häufigste Art der Index-Implementierung in DBMS • Indexbaum: – keine Datensätze, sondern Schlüssel und Zeiger auf Kinder – Datensätze befinden sich ausschl. in der Blattebene des B*-Baums – Gesamtbaum somit flacher als B-Baum Platz für mehr Schlüssel bei fester Seitengröße • Lösch-Vorgang einfacher als im B-Baum – Daten werden nur in Blättern entfernt – Schlüssel in inneren Knoten bleiben als Wegweiser erhalten Weniger Seiten müssen geändert werden 20 DBS1-Übung 24./27.10.2011 Verkettung der Blätter im B*-Baum • Blattfolge entspricht sequentieller Datei, üblicherweise mit (doppelter) Verkettung zwischen den Seiten Gleiche logarithmische Zugriffszeit für alle Daten sequentieller sortierter Zugriff und wahlfreier Schlüsselzugriff sind effizient Bereichsanfragen, Extremwertanfragen 21 DBS1-Übung 24./27.10.2011 B*-Bäume in der Praxis • Typische Werte: • Ordnung: 100 • Höhe: 3 - 4 • Füllfaktor: 70% • Durchschnittliche Anzahl von Söhnen: ~133 • Daraus resultierende Kapazitäten: – Höhe 3: 1333 = 2,352,637 Sätze – Höhe 4: 1334 = 312,900,700 Sätze • Pufferung der obersten Stufen: – Ebene 0: 1 Seite = 8 KB – Ebene 1: 133 Seiten = 1 MB – Ebene 2: 17,689 Seiten = 133 MB 22 DBS1-Übung 24./27.10.2011 Historie und Terminologie • Überblick der Baumarten: – D. Comer: The Ubiquitous B-Tree. ACM Computing Surveys, 11:2, Juni 1979, pp. 121-137. • Originalpublikation B-Baum: – R. Bayer, E. M. McCreight: Organization and Maintenance of Large Ordered Indexes. Acta Informatica, 1:4. 1972. 290306. • Originalpublikation B*-Baum: – D. E. Knuth: The Art of Computer Programming, Vol. 3, Addison-Wesley, 1973. • Heutige Literatur: B*-Baum = B+-Baum 23 DBS1-Übung 24./27.10.2011 Speicherstrukturen Entnommen aus Datenbanksysteme: Konzepte und Techniken der Implementierung von Theo Härder, Erhard Rahm 24 DBS1-Übung 24./27.10.2011 Statisches Hashing: Beschreibung • Hashtabelle als Indexstruktur ("Von der Ordnung ins Chaos") • Verwendung von Streuspeicherverfahren bzw. Hashfunktionen – Berechnung der Speicheradresse eines Datensatzes über den Schlüssel (Schlüsseltransformation) – Hashfunktion h(x) liefert die Seite (Bucket) bzw. Speicheradresse mit dem Dateneintrag zu Schlüssel x • Beispiel einer Hashfunktion: "Divisionsrestverfahren" – Geeignete Division des Schlüssels – Rest der Division ergibt die relative Adresse in der Hashtabelle 25 DBS1-Übung 24./27.10.2011 Statisches Hashing: Hashfunktion • Hashfunktion h: S {1, 2, ..., n} – S = Schlüsselraum, n = Größe des statischen Hash-Bereichs (Anzahl der Buckets) – Idealfall: h ist injektiv (keine Kollisionen) • Nur in Ausnahmefällen möglich • Jeder Satz kann mit einem Seitenzugriff referenziert werden – Ziel: möglichst gute Gleichverteilung einer konkreten Schlüsselmenge 26 DBS1-Übung 24./27.10.2011 Statisches Hashing: Operationen (vereinfacht) • Gegeben: – Hashfunktion h, Wertebereich der Hashfunktion W, mit h: S – Datensatz Di mit Schlüssel Ki W • Einfügen – Generierung der zukünftigen Speicheradresse: h(Ki) = Wi – Datensatz Di mit Schlüssel Ki wird auf Adresse Wi gespeichert • Direkte Suche – Ermittlung der zugehörigen Speicheradresse: h(Ki) = Wi – Bereitstellung von Datensatz Di mit Schlüssel Ki von Adresse Wi 27 DBS1-Übung 24./27.10.2011 Statisches Hashing: Operationen (vereinfacht) II • Gegeben: – Hashfunktion h, Wertebereich der Hashfunktion W, mit h: S – Datensatz Di mit Schlüssel Ki • Löschen – Ermittlung der zugehörigen Speicheradresse: h(Ki) = Wi – Datensatz Di mit Schlüssel Ki wird auf Adresse Wi gelöscht • Sequentielle Suche – Sequentieller Durchlauf des Wertebereichs W = W1 ... Wn – Keine geordnete Schlüsselfolge keine sequentielle Suche möglich! 28 DBS1-Übung 24./27.10.2011 W Statisches Hashing: Kollision • Definition: – Zwei Schlüssel Ki und Kn kollidieren bezüglich einer Hashfunktion h, wenn gilt: h(Ki) = h(Kn) – Ki und Kn nennt man dann auch Synonyme, sie gehören zu einer Kollisionsklasse • Kollisionsbehandlung umfasst folgende Aufgaben – Einfügen: Finden einer freien Speicheradresse beim Einfügen – Suchen: Auffinden eines Schlüssels, der nicht auf der Adresse gespeichert wurde, die die Hashfunktion bestimmt Alle Operationen werden durch Kollisionsbehandlung komplexer • Viele Hashfunktionen (z.B. Modulo) bilden eine größere Schlüsselmenge in einen kleineren Wertebereich ab Kollision ist dann zwangsläufig 29 DBS1-Übung 24./27.10.2011 Statisches Hashing: Kollisionsbehandlung • Offenes Hashen – Kollisionen werden im Primärbereich untergebracht • Suche einer anderen noch nicht belegten Adresse in der Hashtabelle • Lineares/quadratisches Sondieren, Doppeltes Hashen – Gleiche Strategie beim Wiederauffinden – Lösch-Problematik: Einträge dürfen nicht einfach gelöscht werden, sonst herrschen veränderte Voraussetzungen (Lösung: Delete-Flag) h(Kx) = h(Km) Kx 30 Km Ki Kx Ko DBS1-Übung 24./27.10.2011 Statisches Hashing: Kollisionsbehandlung II • Geschlossenes Hashen – Kollisionen werden im separaten Überlaufbereich gespeichert • Überlaufbereich für alle Kollisionen • Überlaufbereich pro Adresse – Gefahr der Entartung • Überlauflisten werden zu lang • Performance sinkt (Suche in einer Liste!) h(Kx) = h(Km) Kx Km Ki Kx Ko 31 DBS1-Übung 24./27.10.2011 Statisches Hashing: Fazit • Vorteile: – Bei Kollisionsfreiheit: Suchen/Einfügen/Löschen in O(1) • Nachteile: – Meist Kollisionsbehandlung nötig: Suchen/Einfügen/Löschen in O(n) – Kein sequentieller Zugriff auf Daten möglich – Hashfunktion entscheidend für die Qualität des Hashverfahrens • beeinflusst Performance, Berechnungs-Komplexität, Datenverteilung und Kollisions-Wahrscheinlichkeit • Es gibt keine optimale Hashfunktion für beliebige Schlüsselmengen! – Ineffizienz bei unvorhersehbaren / stark wachsenden Datenmengen • Primärbereich anfangs überdimensioniert (a priori Allokation des benötigten Speichers), Freihalten von Leerstellen • Wachsende Überlaufketten verschlechtern Laufzeitverhalten • Nachträgliche Vergrößerung der Hashtabelle (Re-Hash) teuer / nicht möglich (24h-Dauerbetrieb!) Übergang zum Erweiterbaren Hashing (Fagin et al, 1979) 32 DBS1-Übung 24./27.10.2011 Erweiterbares Hashing: Ziele • Dynamisches Wachsen und Schrumpfen des Wertebereichs der Hashfunktion – Buckets werden erst bei Bedarf bereitgestellt – Dichte Speicherplatzbelegung möglich – Vermeidung von Überlaufmechanismen und totaler Reorganisation • Konstantes Laufzeitverhalten – Zugriffszeit unabhängig vom Umfang des Datenbestands – Auffinden eines Satzes soll nicht mehr als zwei Seitenzugriffe erfordern 33 DBS1-Übung 24./27.10.2011 Erweiterbares Hashing: Beschreibung • Hashtabelle gegliedert in zwei Bereiche – Directory (Inhaltsverzeichnis) – Eigentliche Hashbuckets • Zugriff zu den Werten in den Hashbuckets nur über Directory möglich – Zusätzliche Indirektion (evtl. Externspeicherzugriff!) – Notwendiges Hilfsmittel für die gewünschten Erweiterungseigenschaften • Bucket mit fester Länge (z.B. Seitengröße 4KB) und Kapazität b – Abhängig von den zu hashenden Daten (Wertlänge) – Abhängig von Datenintegration (Einbettung vs. Auslagerung) • Hashfunktion h generiert Pseudoschlüssel zu einem Satz x 34 DBS1-Übung 24./27.10.2011 Erweiterbares Hashing: Realistische Werte • Bucketkapazität: b=100, b=1000 – Abhängig von der Seitengröße (2, 4, 8, 16 KB, etc.) – Abhängig von Wahl der Einbettung (eingebetteter vs. ausgelagerter Ansatz) • h(x) mit h: S [0, 232-1] – Gewährleistet hinreichend viele Bitpositionen 35 24./27.10.2011 DBS1-Übung Erweiterbares Hashing: Beispiel (1) • Ein leeres Bucket mit Bucket-Kapazität b = 4 • Hashfunktion h(x) = x mod 32 • Lokale Tiefe eines Bucket d‘: Anzahl von Bits, die benötigt wird, um zu entscheiden, ob ein Eintrag in dieses Bucket gehört • Globale Tiefe des Directory d: Maximale Anzahl Bits, die benötigt wird, um zu entscheiden, in welches Bucket ein Eintrag gehört (d = max(d‘)) d‘ = 0 d=0 36 DBS1-Übung B1 24./27.10.2011 Erweiterbares Hashing: Beispiel (2) • Schrittweiser Aufbau einer Hashtabelle durch sukzessives Einfügen einiger Werte in der vorgegebenen Reihenfolge: • Einfügen von Werten 134, 8, 113 und 89 – Alle Werte in Bucket B1 37 x h(x) [h(x)]2 134 6 00110 8 8 01000 113 17 10001 89 25 11001 20 20 10100 118 22 10110 30 30 11110 107 11 01011 37 5 00101 77 13 01101 0 0 134 8 113 89 6 [00110] 8 [01000] 17 [10001] 25 [11001] 134 8 6 [00110] 8 [01000] 113 17 [10001] 20 [10100] 25 [11001] B1 24./27.10.2011 DBS1-Übung Erweiterbares Hashing: Beispiel (3) / Split 1 • Im Beispiel: Einfügen von Wert 20 – Bucket-Überlauf in B1 – Splitting von B1 1 B1 0... 1... 1 • Allokation eines neuen Buckets B2 20 B2 mit d‘(B2) = d‘(B1) 89 • Erhöhung der lokalen Tiefen von B1 und B2 um 1 Hinweis: mögliche weitere lokale Tiefen werden nicht verändert • Hashfunktion h generiert Pseudoschlüssel der Einträge • Füllen der Buckets: jedes Bucket enthält nur Sätze, deren Pseudoschlüssel in den ersten d' Bits übereinstimmen • Falls d ≠ max(d‘): – Erhöhung der globalen Tiefe um 1 – Directory enthält 2d Einträge verdoppelt sich mit jedem zusätzlichen Bit 38 DBS1-Übung 24./27.10.2011 Erweiterbares Hashing: Beispiel (4) 1 • Einfügen des Werts 118 – Suche des zugehörigen Buckets ergibt B2 aufgrund 1. Bitposition – Freie Kapazität in B2 (|B2| < b) 1 B1 • Erhöhung globaler Tiefe (d=2) • Directory-Verdopplung 1 1... B2 1 2 113 20 118 89 17 [10001] 20 [10100] 22 [10110] 25 [11001] 134 8 6 [00110] 8 [01000] B1 113 20 118 17 [10001] 20 [10100] 22 [10110] 89 30 25 [11001] 30 [11110] 37 134 5 [00101] 6 [00110] 8 107 77 8 [01000] 11 [01011] 13 [01101] 113 20 118 17 [10001] 20 [10100] 22 [10110] 89 30 25 [11001] 30 [11110] 00... 2 01... B2 10... 11... 2 B – Differenzierung bei Neuverteilung gemäß ersten zwei Bits im Hashwert – Bucket B1 bleibt unverändert mit lokaler Tiefe d'=1 39 6 [00110] 8 [01000] 0... • Einfügen des Werts 30 – Bucket-Überlauf in B2 Splitting und Erhöhung der lokalen Tiefe (d'=2) in Buckets B2 und B3 134 8 3 24./27.10.2011 DBS1-Übung Erweiterbares Hashing: Beispiel (5) • Einfügen der Werte 107, 37 und 77 – Wert 107 wird in Bucket B1 abgelegt durch Zuordnung über "01..." – Wert 37 wird in Bucket B1 abgelegt durch Zuordnung über "00..." – Bucket-Überlauf in B1 bei Wert 77, Splitting in B1 und B4 – Erhöhung der lokalen Tiefe für Bucket B1 und B4 (d'=2) – Keine Directory-Verdopplung, da weiterhin die globale Tiefe mit d=2 (d=max(d')) bleibt 40 DBS1-Übung 2 B1 2 2 00... B4 01... 10... 2 B2 11... 2 B3 24./27.10.2011 Erweiterbares Hashing: Operationen • Gegeben: – Hashfunktion h, Buckets B1 ,… , Bn mit Kapazität b – Datensatz D mit Schlüssel K • Suche von D: – Anwendung der Hashfunktion h(K) ergibt Pseudoschlüssel für Directory – Ermittlung des zugeordneten Buckets Bi über das Directory – Durchsuchen von Bucket Bi nach K (z.B. mit binärer Suche) • Einfügen von D: – Suche von D gefunden? • Ja: Fehlermeldung, fertig! • Nein: Ist noch Platz im Bucket Bi, also |Bi|<b? – Ja: Einfügen von D in Bucket Bi – Nein: Splitting von Bucket Bi zwei neue Buckets » Lokale Neuverteilung der Einträge aus Bi und Verweiskorrektur » Eventuell Verdopplung des Directory wegen Selektivität 41 DBS1-Übung 24./27.10.2011 Erweiterbares Hashing: Fazit • Hashfunktion sollte gut gewählt sein – Möglichst "zufälliges" Ergebnis – h(x) sollte an jeder Bitposition den Wert 0/1 mit gleicher Wahrscheinlichkeit (0.5) generieren – Hashverfahren reagieren empfindlich auf unausgewogene Hashfunktionen 42 DBS1-Übung 24./27.10.2011 Erweiterbares Hashing: Sonderfall 1 (Entartung) • Eine Einfügung kann mehrere Directory-Verdopplungen zur Folge haben – Alle betrachteten b+1 Hashwerte h(x) haben an Position i den gleichen Wert 0 oder 1 – Bei guter Hashfunktion und großer Bucketkapazität b sehr selten – Beispiel: • b=2, h(x): S [0, 31] • Einfügereihenfolge: 2 (00010), 3 (00011), 6 (00110) 43 DBS1-Übung 24./27.10.2011 Extendible Hashing vs. B*-Baum • Speicherplatzbelegung: – Extendible Hashing: ≈ 70% [ln2] für gesamten (!) HashBucket-Bereich (nur Einfügen, ideale Hashfunktion) Zusatzaufwand (Speicher) für Directory moderat (anwachsend) – B*-Baum: ≈ 70% [ln2] Füllgrad der Baumknoten • Wahlfreier Zugriff – Extendible Hashing: O(1) durch Anwenden der Hashfunktion – B*-Baum: O(log n N) durch Abstieg im Indexbaum • Sequentieller Zugriff: – Extendible Hashing: Keine direkte Unterstützung – B*-Baum: Abstieg im Baum und Nutzung der verketteten Blattebene 44 DBS1-Übung 24./27.10.2011 Nächste Termine der DBS1-Übung • Ausgabe des 1. Übungsblatts: • Besprechung Gruppe 1: • Besprechung Gruppe 2: 45 DBS1-Übung 01.11.2011 07.11.2011 10.11.2011 24./27.10.2011