1 J4 Hash-Join R und S werden mittels der gleichen Hashfunktion h – angewendet auf R.A und S.B – auf (dieselben) Hash- Buckets abgebildet Hash-Buckets sind i.Allg. auf Hintergrundspeicher (abhängig von der Größe der Relationen) Zu verbindende Tupel befinden sich dann im selben Bucket Wird (nach praktischen Tests) nur vom Merge-Join geschlagen, wenn die Relationen schon vorsortiert sind Implementierung der Verbindung: Strategien
2 RS r1r1 5 s1s1 5 r4r4 5 s4s4 5 10s3s3 r2r2 7 s2s2 7 r3r3 8 h(A)h(A)h(B ) Bucket 3 Bucket 2Bucket 1
3 Normaler blockierender Hash- Join mit Überlauf: Partitionieren Send R Send S receive P1 P2P3 Partition h(R.A) P1 P2 P3 Partition h(S.A) receive
4 Normaler blockierender Hash-Join mit Überlauf: Build/Probe Send R Send S P1 P2P3 Partition h(R.A) P1 P2 P3 build Hashtabelle probe Lade Blöcke von P1
5
6
7
8
9 Mengendurchschnitt (~Join) mit einem Hash/Partitionierungs-Algorithmus R S R S Nested Loop: O(N 2 ) Sortieren: O(N log N) Partitionieren und Hashing
10 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S R Mod 3
11 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S R S Mod 3
12 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S R S Mod 3
13 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S Mod 5 Build- Phase Hashtabelle
14 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R S Mod 5 Probe- Phase
15 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R S Mod 5 Build-Phase 2. Partition
16 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, } R S Mod 5 Probe-Phase 2. Partition
17 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S = {3, 13 } R S Mod 5 Probe-Phase 2. Partition
18 Mengendurchschnitt mit einem Hash/Partitionierungs-Algorithmus R S R S Mod 3 R S = {3, 13, 2, 44, 17 }
19 Vergleich: Sort/Merge-Join versus Hash-Join R run S merge R partition S
Radix-Join: Erhöhung der Cache- Lokalität durch Partitionierung
Wiederholte Partitionierung
Technische Universität München Range partitioning of private input chunk of worker W 1 chunk of worker W 2 histogram of worker W 1 7 = < = histogram of worker W 2 < prefix sum of worker W prefix sum of worker W W1W1 W2W2 W1W1 W2W = =
Technische Universität München Range partitioning of private input chunk of worker W 1 chunk of worker W 2 histogram of worker W 1 7 = <16 17 = histogram of worker W 2 < prefix sum of worker W prefix sum of worker W W1W1 W2W2 W1W1 W2W = =00010
Technische Universität München Real C hacker at work …
Technische Universität München Paralleler Hash-Join ohne Partitionierung 25