6.2 Partitionierung
Partitionierung kann unabhängig von und ergänzend zu Indexverfahren ge-
nutzt werden, um die Performanz von Data-Warehouse-Systemen zu steigern.
6.2.1 Partitionierung in relationalen Datenbanken
Die Partitionierung ist die Aufteilung von Daten, etwa um diese Teile verteilt
speichern zu können. Speziell in RDBMS ist Partitionierung die Aufteilung
umfangreicher Relationen in kleinere Teilrelationen (die sogenannten Parti-
tionen oder Fragmente). In RDBMS richtet sich Größe und Inhalt der Parti-
tionen nach der Anfrage- und Aktualisierungscharakteristik. Partitionierung
wurde ursprünglich für verteilte Datenbanken eingeführt, um Lastverteilung
auf mehrere Knoten zu unterstützen, wird aber heutzutage auch für die Opti-
mierung anderer Auslastungscharakteristika genutzt. Im engeren Sinne um-
fasst die Partitionierung eigentlich nur die logische Aufteilung von Relationen,
die physische Verteilung ist dann Aufgabe der Allokation, also der Zuordnung
zu physischen Ressourcen.
In RDBMS werden zwei Arten der Partitionierung unterschieden: die hori-
zontale und die vertikale Partitionierung. In beiden Fällen wird eine Relation
R in kleinere Teile aufgeteilt. R wird dabei auch als Masterrelation bezeichnet.
Horizontale Partitionierung
Bei der horizontalen Partitionierung wird eine Relation R vollständig in paar-
weise disjunkte Teilrelationen R
1
, ..., R
n
aufgeteilt:
R = R
1
... R
n
; R
i
R
j
= für i 6= j
Alle Teilrelationen haben dasselbe Relationenschema. Es sind verschiedene
Formen der Aufteilung möglich:
Die Range-Partitionierung oder Bereichspartitionierung teilt die Tabelle
anhand eines Attributs in Bereiche auf, z.B. eine Aufteilung in Jahresschei-
ben. Jede Partition wird also durch ein Selektionskriterium definiert, also
R
i
:= σ
ϕ
(R) wobei ϕ eine Selektionsbedingung ist, die einen Bereich fest-
legt (die range restriction).
Bei der Hash-Partitionierung wird eine Hash-Funktion (angewendet auf
das ganze Tupel oder einzelne Attribute) festgelegt, die bestimmt, zu wel-
cher Partition ein Tupel gehört. Tupel mit gleichem Hash-Wert (oder Hash-
Werten in einem vorgegebenen Bereich) befinden sich in derselben Partiti-
on.
6.2 Partitionierung 167
Masterrelation Partitionen
Abbildung 6.9: Horizontale Partitionierung
Abbildung 6.9 verdeutlicht das Prinzip der Range-Partitionierung.
Als Variante der horizontalen Partitionierung ist noch die sogenannte ab-
geleitete Partitionierung bekannt. Der Begriff „abgeleitet“ bezieht sich darauf,
dass das Prädikat für die Partitionierung im Rahmen einer Verbundanfrage
aus einer anderen Tabelle übernommen wird. Die abgeleitete Partitionierung
erreicht eine gemeinsame Zuordnung von Verbundpartnern, etwa bei Fremd-
schlüsselbeziehungen, zur selben Partition und ermöglicht dort eine lokale Ver-
bundberechnung.
Vertikale Partitionierung
Bei der vertikalen Partitionierung erfolgt eine Verteilung der einzelnen Attribu-
te (Spalten) auf die Partitionen. Damit entspricht eine Partition R
i
einer Pro-
jektion auf die Masterrelation:
R
i
:= π
attrl ist
(R)
Um die Masterrelation rekonstruieren zu können, muss ein gemeinsames Attri-
but bzw. eine gemeinsame Attributkombination in den Partitionen existieren,
von der jeweils die restlichen Attribute funktional abhängig sind. Die Rekon-
struktion erfolgt dann über den natürlichen Verbund:
R :=
i
R
i
In der Regel ist dies der Primärschlüssel von R, der somit in allen Partitionen
enthalten sein muss. Ist R in dritter Normalform, so muss es der Primärschlüs-
sel sein.
Abbildung 6.10 verdeutlicht das Prinzip der vertikalen Partitionierung.
Unter einer gemischten Partitionierung versteht man die Kombination einer
horizontalen und einer vertikalen Partitionierung.
168 6 Speicherung
Projektion
A B CK
001
002
003
004
005
006
D
A BK
001
002
003
004
005
006
C DK
001
002
003
004
005
006
Abbildung 6.10: Vertikale Partitionierung
Partitionierung in Oracle
Die Partitionierung in RDBMS ist Teil der physischen Datendefinition und da-
her nicht Teil des SQL-Standards.
JBeispiel 6-7I Wir zeigen exemplarisch die Definition von Partitionierungen
im Oracle-System. Eine Bereichspartitionierung kann wie folgt deklariert wer-
den:
CREATE TABLE Verkauf (
Datum DATE NOT NULL,
...)
PARTITION BY RANGE(Datum) (
PARTITION Verkauf2009
VALUES LESS THAN (to
_
date(’2010-01-01’)),
PARTITION Verkauf2010
VALUES LESS THAN (to
_
date(’2011-01-01’)),
PARTITION Verkauf2011
VALUES LESS THAN (to
_
date(’2012-01-01’)));
Eine Hash-Partitionierung wird in Oracle wie folgt definiert:
CREATE TABLE Verkauf (
ArtikelID INT NOT NULL,
FilialID INT NOT NULL,
...)
PARTITION BY HASH(ArtikelID, FilialID) PARTITIONS 5;
2
6.2 Partitionierung 169

Get Data Warehouse Technologien now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.