Spaltenorientierte Datenbank
Eine spaltenorientierte Datenbank ist ein Datenbank-Management-System (DBMS), das Daten in Spalten anstatt wie normalerweise in Zeilen speichert. Das Ziel von spaltenorientierten Datenbanken ist, Daten auf dem Festplattenspeicher effizienter zu schreiben und damit auch effizienter davon zu lesen und so die Zeit für eine Datenbankabfrage zu reduzieren. Das hat Vorteile insbesondere bei Anwendungen wie Data Warehousing, wo Aggregate über große Zahlen ähnlicher Elemente gebildet werden.
Ein Beispiel macht den Unterschied zwischen zeilen- und spaltenorientierten Datenbanken verständlicher: Eine relationale Datenbank stellt ihre Daten als zweidimensionale Tabelle aus Zeilen und Spalten dar:
Personalnummer |
Nachname |
Vorname |
Gehalt |
1 |
Huber |
Josef |
30000 |
2 |
Müller |
Maria |
50000 |
3 |
Meier |
Sabine |
45000 |
Beide Speicherarten, die zeilenorientierte und die speicherorientierte, haben gemeinsam, dass die Daten aus der Sicht des Betriebssystems in einer eindimensionalen Folge von Bytes angeordnet sind. Dabei muss die zweidimensionale Struktur einer Datenbanktabelle in die eindimensionale Folge von Bytes abgebildet werden.
Eine zeilenorientierte Datenbank hängt alle Datenwerte einer Zeile aneinander, es folgt die nächste Zeile und so weiter. Die Datenbank von oben wird zeilenorientiert also wie folgt gespeichert:
1,Huber,Josef,30000; 2,Müller,Maria,50000; 3,Meier,Sabine,45000;
Bei einer Abfrage müssen in zeilenorientierten Datenbanken alle Spalten gelesen werden. Das ist bei großen Datenmengen, also vielen Zeilen, ineffizient.
Der gleiche Datensatz Spalte für Spalte in einer spaltenorientierten Datenbank gespeichert sieht so aus:
1,2,3;Huber,Müller,Meier;Josef,Maria,Sabine;30000,50000,45000;
Bei spaltenorientierten Datenbanken wird der Zugriff lediglich auf die Spalten beschränkt, die für die Abfrage relevant sind, also zum Beispiel „Gehalt“. Da es nur wenige Spalten pro Datensatz gibt, kann die ganze Spalte in einem Schritt gelesen werden. Die zu lesende Datenmenge lässt sich so erheblich reduzieren.
Bei Abfragen in spaltenorientierten Systemen müssen also nicht alle Zeilen, sondern nur die Spalten durchsucht werden, die für die Auswertung notwendig sind. Dieses nur scheinbar nebensächliche Implementierungsdetail hat zur Folge, dass sich gewisse Arten von Abfragen effizienter abarbeiten lassen. Das sind im wesentlichen Aggregierungen von Werten über viele Zeilen hinweg, wie sie in Data Warehouses und anderen analytischen Applikationen häufig vorkommen.
In der Praxis sind spaltenorientiere Datenbanken gut für OLAP-Aufgaben geeignet wie analytische Informationssysteme, die typischerweise durch eine kleine Anzahl sehr komplexer Abfragen über alle Datensätze charakterisiert sind.
Da Spaltendaten einen einheitlichen Typ haben, stehen in spaltenorientierten Systemen zudem Komprimierungsoptionen zur Verfügung, die bei zeilenorientierten Daten nicht möglich sind. Durch die spaltenorientierte Speicherung der Daten in den Tabellen kann eine zusätzliche Komprimierung um etwa den Faktor 5-10 erzielt. Die Kompression macht es möglich, dass Spaltenoperationen - wie MIN, MAX, SUM, COUNT und AVG - sehr schnell ausgeführt werden. Laut IBM haben Kundenerfahrungen gezeigt, dass die Ausführungszeiten von langlaufenden SQL Queries um den Faktor 25 - 40 verkürzt werden konnten.
Ein weiterer Vorteil besteht darin, dass sich spaltenbasierte Datenbanksystemen selbst indexieren können. Dadurch ist weniger Speicherplatz notwendig als bei den klassischen relationalen Datenbank-Management-Systemen (RDBMS), welche die gleichen Daten enthalten.
Da aktuell der Einsatz von In-Memory-Analytics zunimmt, werden allerdings die relativen Vorteile der spaltenorientierten Datenbanken immer unwichtiger. Der Grund ist, dass bei In-Memory-Analytics das Lesen und Schreiben von Daten auf beziehungsweise von Festplatte keine Rolle spielt, da die Daten alle im Hauptspeicher liegen.