5.3 Horizontale Fragmentierung

5.3.3 Unterstützung von Parallelverarbeitung

Die horizontale Fragmentierung ist hervorragend geeignet, eine parallele Anfragebearbeitung zu unterstützen. Denn Operationen auf einer derart fragmentierten globalen Relation lassen sich leicht in eine Menge parallel ausführbarer Teiloperationen auf den einzelnen Fragmenten zerlegen. Das Gesamtergebnis erhält man durch anschließendes Mischen der Teilergebnisse. Bei einer abgeleiteten horizontalen Fragmentierung läßt sich auch die Join-Berechnung einfach parallelisieren. Hierzu genügt es, den Join auf jedem der n Fragmentpaare der beiden Relationen lokal und parallel durchzuführen und anschließend die lokalen Join-Ergebnisse zu mischen.

Beispiel 5-4

Auf der KONTO-Relation aus Beispiel 5-2 sei die Summe sämtlicher Kontostände zu berechnen. Da dies das Lesen jedes Kontosatzes erfordert (Relationen-Scan), ergibt sich bei sequentieller Bearbeitung eine sehr hohe Bearbeitungsdauer. Eine horizontale Fragmentierung wie in Abb. 5-3 erlaubt eine parallele Bearbeitung der Anfrage. Dabei wird auf jedem Fragment (für jede Filiale) parallel die lokale Summe der Kontostände ermittelt. Das Gesamtergebnis ergibt sich durch die abschließende Summenbildung der lokalen Zwischenergebnisse.

Zur Unterstützung einer parallelen Anfragebearbeitung werden vor allem zwei Arten einer horizontalen Fragmentierung bevorzugt, eine sogenannte Bereichsfragmentierung sowie eine Hash-Fragmentierung. In beiden Fällen erfolgt die Zerlegung i.a. auf einem ausgezeichneten Fragmentierungsattribut. Bei der Bereichsfragmentierung wird durch Festlegung von Wertebereichen für dieses Attribut die Zuordnung von Tupeln zu Fragmenten festgelegt, während bei der Hash-Fragmentierung die Zuordnung über eine Hash-Funktion definiert wird. Die in Beispiel 5-2 verwendete Fragmentierung entspricht einer speziellen Bereichsfragmentierung auf dem Fragmentierungsattribut "Filiale". Generell wird versucht, etwa gleich große Fragmente zu erzeugen, damit bei der Parallelverarbeitung eine in etwa gleich schnelle Bearbeitung auf den einzelnen Fragmenten ermöglicht wird. Wir werden auf die Datenverteilung zur Unterstützung von Parallelverarbeitung in Kap. 17 noch näher eingehen.