Dynamische Hashverfahren I. Einführung 1.1 Überblick 1.2 Prinzipien, Einsetzbarkeit 1.3 Probleme und Lösungen II. Extendible Hashing 2.1. Motivation 2.2. Struktur und Eigenschaften 2.3. Operationen III. Analyse und Betrachtungen 3.1. Zeitliches 3.2. Pro und Kontra IV. Ausblick 4.1. Weitere Verfahren 4.2. Alternativen? V. Anhang 5.1. Literaturquellen 5.2. Bildquellen 2 I Einführung 1.1. Überblick heutzutage große Speichermengen und Datenverwaltung erfordert hohe Konsistenz , wenig Speicherumfang und minimale Zugriffszeiten viele Verfahren, meist uneffektiv oder langsam Hashing Verfahren, um schnell auf gespeicherte Daten zuzugreifen 1.2. Prinzipien, Einsetzbarkeit Datensatz eindeutige Kennung (Schlüssel) Hashfunktion h:S A ordnet Schlüssel S einen genauen Speicherplatz (Adresse A) zu an dieser Stelle findet man den gesuchten, einzufügenden oder zu löschenden Datensatz 2 I Einführung 1.3. Probleme und Lösungen Problem: max. k Schlüsssel, d.h. Anzahl Schlüssel ≤ Anzahl Speicherplätze einer Adresse werden mehrere Schlüssel zugewiesen Kollisionen Kollisionsbehandlung etwa durch Listenerstellung mit Hilfe von Verkettung, etc. Listensuche langwieriger O(1) nicht mehr generell erreichbar evtl. neue Hashfkt. erhöht Aufwand beimUmkopieren nochmals Suche nach neuen Methoden evtl. Speichererweiterung Erweiterung der Hash-Tabelle nur durch Umkopieren möglich höherer Aufwand erneut gegeben (s.o.) dynamische Hashverfahren schaffen Abhilfe Speicherweiterung möglich 3 II Extendible Hashing 2.1. Motivation nötig: Verfahren mit konstanter Zugriffszeit (bezogen auf externen Speicherzugriff) und wenig Kollisionen unabhängig vom Datenumfang Kollisionsvermeidung und minimale Speicherumordnung benötigen dynamische Tabellen Wachsen und Schrumpfen entsprechend des benötigten Platzes ohne große Umordnung Extendible Hashing erfüllt diese Bedingungen K12 K34 K45 K57 K59 ... ... K98 Überlauf 4 II Extendible Hashing 2.2. Struktur und Eigenschaften Hash-Tabelle besteht aus 2 Teilen: Directory (Verzeichnis) und Leaf-Pages (Buckets) 5 II Extendible Hashing Directory: enthält globale Tiefe d (in dem Fall: 3) 2d Felder enthalten Zeiger auf Buckets Zeiger des i-ten Feldes zeigt auf Bucket mit ersten bzw. letzten d Bits des Pseudoschlüssels (Fkt. von S) Pseudoschlüssel S* entspricht der binären Darstellung von i entsteht bei Anwendung von Hashfunktion h auf Schlüssel S: S*=h(S) Speicherplatz der Information von S eindeutig, dh. nur ein Bucket pro Datensatz Buckets dienen zur Datensatzspeicherung (Bucket wird auf einer Seite abgebildet, die Buckets haben eine feste Größe, bezeichnet mit b) jedes Bucket besitzt Header, der die lokale Tiefe d* des Buckets enthält d* beschreibt Übereinstimmung in ersten bzw. letzten d* Stellen von S* ist d*<d, hat ein Bucket mehrere Zeiger 6 II Extendible Hashing 2.3. Operationen Standardoperationen Suchen, Einfügen und Löschen (SEARCH; INSERT, DELETE) Suchen nach Schlüssel S mit Datensatz Berechnung von S* nach der Formel: S*=h(S) Suche des Pointers auf Bucket mit Datensatz (S,D(S)) Algorithmus SEARCH: 1. S*=h(S) berechnen 2. Tiefe d lesen 3. erste d Bits von S* bestimmen (Directory) 4. Pointer zu Bucket LP folgen 5. Datensatz (S*, D(S*)) suchen alle Buckets max. vollbesetzt, was aber tun bei Überlauf nach Einfügen? 7 II Extendible Hashing Einfügen eines Datensatzes passende Position für Schlüssel S* suchen nach Suchalgorithmus bei genügendem Speicherplatz Datensatz (S,D(S)) einfügen Überlauf Aufspalten des Buckets LP in zwei Buckets LP und LP* mit Tiefe d* Tiefe von LP und LP* um 1 erhöhen Werte auf beide Blätter neu verteilen, sodass kein Überlauf mehr vorhanden ist ist d*>d d um 1 erhöhen, Directory verdoppeln Algorithmus INSERT: 1. SEARCH S* 2. INSERT (S;D(S)) 3. if Überlauf then 4. Split LP in LP und LP* 5. d*:=d*+1 6. if d*>d 7. then d:=d+1 AND DIR:=DIR*2 8 II Extendible Hashing Löschen eines Datensatzes Datensatz suchen erfolgreich Löschen bei vielen Löschvorgängen Speicherauslastung schlecht, zuviel frei Zusammenfassen zweier unterbesetzter Buckets gdw. Summe der Einträge < Kapazität und nur letzte Stelle unterschiedlich jedes Bucket mehr als 2 Pointer Directory halbieren und die Tiefe um eins verringern Algorithmus DELETE: 1. SEARCH S* 2. if S* not found 3. RETURN “ERROR” 4. else DELETE (S,D(S)) 5. if d*(LP,LP*)<b (b….Grenzwert) 6. d*(LP):=d*(LP)-1 7. INSERT all in LP 8. DELETE LP* 9. if all Buckets more than 2 Pointer then 10. d:=d-1 AND DIR:=DIR/2 AND refresh 9 III Analyse und Betrachtungen 3.1. Zeitliches optimaler Fall: O(1), nur geringe Abweichung, solang b (Grenzwert) günstig gewählt wird allg: 2 Zugriffe (Directory, Bucket) 3.2. Pro und Kontra haben gesehen, dass Extendible Hashing Wachsen und Schrumpfen möglich macht erreichen gute Belegung und Speicherausnutzung, keine Platzverschwendung zwei Seitenzugriffe pro Zugriff bleiben im Rahmen der Zeitvorgabe O(1) einziges Makel: Zusätzlicher Aufwand beim Verwalten des Directory und der Buckets ist aber in Relation zur Datenmenge sehr gering und somit vernachlässigbar im Gegensatz zum dynamischen Hashing (immer 2 Zugriffe) schafft stat. Hashing im besten Fall einen Zugriff muss wissen, ob man konst. Datenmenge hat dann stat. Hash-Tabelle mit best. Speicher-Anzahl ob man unbekannte Datenmenge hat dann dynamische, erweiterbare Hash-Tabelle 10 IV Ausblick 4.1. Weitere Verfahren a) Virtuelles Hashing prinzipgleich mit Extendible Hashing allerdings führt ein Bucket-Überlauf zur Speicherplatzverdopplung Bucket-Aufteilung wird durch einen Bitvektor angezeigt b) Dynamisches Hashing Adressverzeichnis als Binärbaum organisiert (Besuchen des Baums in O(log n)) Blätter des Baums speichern Adressen der zugehörigen Buckets Adressierung bring linearen Aufwand O(n) für 2n-1 Knoten und n Buckets für den Speicherplatz der Adressstruktur allerdings: bei größerem Speicherbedarf pro Knoten!!! 11 4.2. Alternativen? Extendible Hashing: trotz guter Lauf- und Zugriffszeiten nicht zu sequentiellem Lesen in der Lage d.h. etwa alphabetische Reihenfolge und sortierte Anordnung der Elemente nicht möglich nun lohnt es sich, über einige andere, weiterführende Verafhren nachzudenken Verfahren, die solche Zugriffe und Funktionen möglich machen Etwa: Verfahren ohne Indexnutzung und/oder Verfahren zur Kontrolle des Belegungsgrades nach Ortmann, R. Fagin, etc. bspw. das Lineare Hashing.... 12 V Anhang 5.1 Literaturquellen R. Fagin, J. Nievergelt, N. Pippenger und H. R.: Strong Extendible Hashing - A Fast Access Method For Dynamic Files, ACM Transactions On Database Systems, Vol. 4, No. 3, 1979, Pages 315-344 T.Ortmann, P. Widmayer: Algorithmen und Datenstrukturen, Spektrum Verlag, 4. Auflage,, 2002, Seiten 195-231 Theo Härder, Erhard Rahm : Datenbaksysteme, Springer Verlag München, 2. Auflage, 2001, Seiten 278-282 A. Heuer, G. Saake, Datenbanmken: Konzepte und Sprachen, International Thomson Publishing, Bonn, 1995, Seiten 1-35, 433-436 www..minet.uni-jena.de Skript: Informatik 3 Prof. Hecker; Seiten 37-45 5.2. Bildquellen alle Bilder sind aus dem Buch von: R. Fagin, J. Nievergelt, N. Pippenger und H. R.: Strong Extendible Hashing - A Fast Access Method For Dynamic Files, ACM Transactions On Database Systems, Vol. 4, No. 3, 1979, Pages 315-344 13