6.3 Erzeugung von Fragment-Anfragen

6.3.2 Daten-Lokalisierung bei abgeleiteter horizontaler Fragmentierung

Eine ähnliche, jedoch noch weitergehende Optimierung von Join-Anfragen wird bei der abgeleiteten horizontalen Fragmentierung möglich, wie bereits in Kap. 5.3.2 erwähnt. In diesem Fall wird die Fragmentierung einer Relation auf die Fragmentierung einer "übergeordneten" Relation abgestimmt, zu der eine funktionale (hierarchische) Beziehung über die Werte eines gemeinsamen Attributs besteht (i.a. Fremd-/Primärschlüssel-Beziehung). Es ergibt sich daher in der Regel für beide Relationen die gleiche Anzahl von Fragmenten. Werden die zusammengehörigen Fragmentpaare der beiden Relationen jeweils demselben Rechner zugeordnet, so können die einzelnen Teil-Joins jeweils lokal (und parallel) berechnet werden. Kommunikation fällt nur zum Starten der Teil-Joins sowie zum Mischen der Teilergebnisse an.

Beispiel 6-5

Wir unterstellen die in Beispiel 5-2 verwendeten Fragmentierungen nach Filialzugehörigkeit. Dabei wird KUNDE horizontal in drei Fragmente unterteilt; für KONTO wird darauf aufbauend eine abhängige Fragmentierung definiert:
KUNDE1 = FILIALE="L" (KUNDE)
KUNDE2 = FILIALE="F" (KUNDE)
KUNDE3 = FILIALE="KL" (KUNDE).

KONTO1 = KONTO KUNDE1
KONTO2 = KONTO KUNDE2
KONTO3 = KONTO KUNDE3.

Folgende Join-Anfrage sei wiederum zu beantworten:
SELECT * FROM KUNDE, KONTO
WHERE KUNDE.KNR=KONTO.KNR.

Abb. 6-9: Join-Berechnung bei abgeleiteter horizontaler Fragmentierung

Der Operatorbaum des initialen Fragment-Ausdrucks für diese Anfrage ist in Abb. 6-9a dargestellt. Nach Vorziehen der Join-Berechnungen können von den insgesamt 9 Teil-Joins 6 eliminiert werden, da sie aufgrund der abhängigen horizontalen Verteilung leere Ergebnismengen liefern. Lediglich die in Abb. 6-9b gezeigten Teil-Joins, die jeweils zusammengehörige Fragmentpaare betreffen, sind noch auszuführen. Die Teil-Joins sind jeweils an einem Rechner lokal ausführbar und können parallel berechnet werden.

Das Beispiel zeigt, daß für die abgeleitete horizontale Fragmentierung eine ähnliche Zerlegung der Join-Bearbeitung wie für übereinstimmende primäre horizontale Fragmentierungen (Beispiel 6-4) möglich ist. Allerdings ist jetzt gewährleistet, daß jedes Fragment der einen Relation nur mit genau einem Fragment der zweiten Relation zu verknüpfen ist, während dies ansonsten nur in Spezialfällen erreichbar ist. So war in Beispiel 6-4 für Fragment KUNDE2 eine Join-Berechnung mit zwei KONTO-Fragmenten erforderlich.

Selektionsbedingungen auf Fragmentierungsattributen können auch bei abgeleiteter horizontaler Fragmentierung zur weitergehenden Reduzierung der Verarbeitung genutzt werden. Wird in Beispiel 6-5 etwa die WHERE-Klausel um die Bedingung FILIALE="F" erweitert, kann die Anfrage auf die lokale Join-Berechnung zwischen KUNDE2 und KONTO2 reduziert werden.