- Schnittmengenbildung - Aufgabe 2 - Schnittmengenbildung -
Übung Data Warehousing Problem Vergleich zweier Listen (von Tupeln) auf Duplikate Bildung der Schnittmenge Listen jeweils deutlich größer als Hauptspeicher Anwendung: ETL Berechnung differentieller Snapshots 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing Lösungen Naiv Nested Loop Besser Sort Merge Join Noch besser ? Partition Hash Join 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing HashJoin Trick: es werden nicht mehr alle Tupel miteinander verglichen Vergleich findet statt zwischen Tupeln mit dem gleichen HashCode Dazu kann über ein beliebiges Attribut gehashed werden (meist: ID) bei uns gibt es ohnehin nur ein Attribut Hashfunktion für Zahlenwert 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing HashJoin: Schritt 1 Value1 Value2 Value3 Value4 Value5 Value6 Value7 Value8 Value1 Value4 Value8 Value5 Value6 Value9 Value3 Value7 Bucket 1 Bucket 1‘ Bucket 2 Bucket 2‘ Bucket 3 Bucket 3‘ Bucket 4 Bucket 4‘ Bucket 5 Bucket 5‘ Bucket 6 Bucket 6‘ 4. Juni 2003 Übung Data Warehousing
Vergleich der Elemente mittels neuer Hashfunktion HashJoin: Schritt 2 Bucket 1 Vergleich der Elemente Bucket 1‘ Bucket 2 mittels neuer Hashfunktion Bucket 2‘ Bucket 3 Bucket 3‘ Bucket 4 Bucket 4‘ Bucket 5 Bucket 5‘ Bucket 6 Bucket 6‘ 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing Vorgehensweise Im konkreten Fall: Beschränkung des Hauptspeichers Zwischenspeicherung der Buckets (1..n, 1..n‘) als Dateien Laden von zwei korrespondierenden Buckets (i, i‘) Vergleich der Elemente 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing Zu beachten Die erste Hashfunktion sollte die Tupel gleichmäßig auf die Buckets verteilen modulo Primzahl Es sollten beim ersten Schritt nicht zu viele Buckets entstehen, da jeweils ein Filehandle nötig ist Bei zu wenigen Buckets enthält aber jedes zu viele Daten für den späteren Vergleich im Hauptspeicher 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing Zeitaspekt Bezüglich der benötigten Zeit für die Berechnung lohnt es sich, vieles selber zu programmieren Java bietet die Klasse util.Hashtable, die aber langsamer ist als ein eigener Array-Hash Benutzung einer eigenen Hash-Funktion, und nicht des JAVA Standards Besondere Beachtung auf den IO Funktionen, da hier die Hauptlast entsteht 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing Lösung von Aufgabe 2 Es existieren 132357 Duplikate z.B. 2x 97 Buckets, je ca. 1MB mit HashJoin etwa 2:30 Minuten sort –n data1 data2 | uniq –d auf der Konsole dauert ca. 5 Minuten 4. Juni 2003 Übung Data Warehousing
Algorithmus: Sort-Merge ... 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing Vergleich Hash-Join versus Sort-Merge Join Sei |F|/HS = X (Anz. Buckets) HJ braucht für das Hashen X+1 Files für das Mergen 2 Files Schreibt beim Hashen ungeordnet SM braucht für das Sortieren 1+1 Files Für das Mergen 2*X Files Liest beim Mergen ungeordnet 4. Juni 2003 Übung Data Warehousing
Übung Data Warehousing Anhang: Hashfunktion int[] hash = new int[hashgroesse]; int linearHashing (int key) { // den Hashcode bestimmen code = (key / primzahl) % hashgroesse; // ist der Hash an dieser Stelle schon belegt? while (hash[code] != 0) { // dann um einen Platz weiterrücken code++; // aber bitte im Array bleiben code = code % hashgroesse; } // Hash belegen und Code zurückgeben hash[code] = code; return code; 4. Juni 2003 Übung Data Warehousing