5 Datenbankverteilung
5.1 Fragmentierung
In relationalen Datenbanksystemen stellen im einfachsten Fall ganze Relationen die kleinsten Verteilungsgranulate dar. In diesem Fall entfällt die Notwendigkeit einer expliziten Fragmentierung; durch die geringere Anzahl von Verteilungseinheiten vereinfacht sich auch das Allokationsproblem. Ein weiterer Vorzug liegt darin, daß Operationen auf einer Relation stets an einem Rechner ausführbar sind, also mit geringen Kommunikationskosten. Dies ist auch vorteilhaft zur Überprüfung von Integritätsbedingungen (z.B. Eindeutigkeit von Attributwerten, referentielle Integrität).
Auf der anderen Seite sprechen wichtige Gründe gegen eine Datenverteilung auf Relationenebene und für eine feinere Fragmentierung:
- Lastbalancierung
Die Allokation vollständiger Relationen ist meist zu inflexibel, um eine effektive Nutzung aller Rechner zu erlauben. Denn aufgrund der begrenzten Anzahl von Relationen sowie oft starker Schwankungen in den Relationengrößen und Zugriffshäufigkeiten wird es nur schwer möglich sein, diese so unter den Rechnern aufzuteilen, daß eine einigermaßen gleichmäßige Lastbalancierung erreicht wird.
- Nutzung von Lokalität
Die meisten Relationen werden an mehreren Knoten referenziert, wobei oft ein hoher Grad an (rechnerspezifischer) Zugriffslokalität vorliegt, so daß verschiedene Rechner vorwiegend disjunkte Teile einer Relation referenzieren. Durch eine Fragmentierung und partitionierte Allokation von Relationen kann dies zur Einsparung von Kommunikationsvorgängen genutzt werden. So dominieren in einer Bankanwendung in einzelnen Zweigstellen meist Zugriffe auf lokal eingerichtete Konten; die Speicherung der gesamten Kontorelation an einem Knoten würde ein Vielfaches an Kommunikation (sowie eine stark ungleiche Lastbalancierung) verursachen.
- Reduzierung des Verarbeitungsumfangs
Vielfach können Operationen auf ein Fragment (bzw. eine Teilmenge der Fragmente) beschränkt werden. Durch die Verringerung der zu verarbeitenden Datenmenge ergibt sich eine effizientere Bearbeitung gegenüber der Ausführung auf der gesamten Relation.
- Unterstützung von Parallelverarbeitung
Durch die Fragmentierung wird es möglich, Operationen auf einer Relation in Teiloperationen auf Fragmenten unterschiedlicher Rechner zu zerlegen, die zur Verkürzung der Bearbeitungszeit parallel ausgeführt werden können.
Zur Zerlegung einer globalen Relation in Fragmente kommen mehrere Alternativen in Betracht, die im weiteren Verlauf dieses Kapitels beschrieben werden. Insbesondere ist eine horizontale (zeilenweise) oder vertikale (spaltenweise) Fragmentierung möglich, die jeweils durch einen relationalen Ausdruck spezifizierbar sind. Bei der Fragmentierung sind drei Regeln zu beachten, um die Korrektheit der Zerlegung sicherzustellen [CP84]:
- Vollständigkeit
Jedes Datenelement (Tupel, Attributwert) der globalen Relation muß in wenigstens einem Fragment enthalten sein.
- Rekonstruierbarkeit
Die Zerlegung muß verlustfrei sein, so daß die globale Relation aus den einzelnen Fragmenten wieder vollständig rekonstruiert werden kann.
- Disjunktheit
Fragmente sollten möglichst disjunkt sein, da ihre Replikation im Rahmen der Allokation festgelegt wird. Bei der vertikalen Partitionierung ist jedoch die Disjunktheit von Fragmenten nicht vollständig einzuhalten, um Rekonstruierbarkeit zu gewährleisten (s. Kap. 5.4).