Spaltenorientierte Datenbanken (z.B. C-Store) stehen im Gegensatz zu den am meisten verbreiteten zeilenorientierten Datenbanken (z.B. MySQL). Im Gegensatz zu den zeilenorientierten Datenbanken werden bei ihnen nicht die einzelnen Zeilen beieinander gespeichert, sondern die Spalten. Diese Speicherform bietet sich insbesondere bei analytischen Vorgängen von großen Datenmengen an, da hierbei häufig Aggregationsfunktionen auf einzelne Spalten berechnet werden müssen.

Speicherung auf der Festplatte

Allerdings kommt bei spaltenorientierten Datenbanken ebenso wie bei den zeilenorientierten SQL als Abfragesprache zum Einsatz. Der Aufbau der Datenbank bleibt im Grunde gleich, lediglich die Speicherung der Daten auf der Festplatte erfolgt in einer anderen Form. Einfach gesagt kann man sagen, dass bei spaltenorientierten Datenbanken alle Spalten hintereinander stehen, bei zeilenorientierten alle Zeilen. Nehmen wir als Beispiel eine Tabelle mit Zugstrecken (Hamburg, München, 6:52, 12:47; Köln, Frankfurt, 6:44, 7:48). Bei einer zeilenorientierten Datenbank würde diese auf der Festplatte in folgender Reihenfolge gespeichert:

Hamburg, München, 6:52, 12:47, ICE
Köln, Frankfurt, 6:44, 7:48, ICE

Bei einer spaltenorientierten hingegen:

Hamburg, Köln
München, Frankfurt
6:52, 6:44
12:47, 7:48
ICE, ICE

Einsatzzweck von Spaltenorientierten Datenbanken

Der Vorteil für das Datenbanksystem besteht nun darin, wenn man für eine oder mehrere Spalten alle Zeilen auslesen will, nicht in der kompletten Datei nach den richtigen Spalten suchen zu müssen, sondern einfach den kompletten Block (z.B. der Start- und Zielbahnhöfe) auslesen zu können. Oder wie heise open es erklärt: Zeilenorientierte Datenbanken entsprechen einem Karteikartensystem. Will man eine Berechnung über alle Karteikarten machen, muss man jede einzeln ansehen und sich die Informationen dort merken. Spaltenorientierte Datenbanken sorgen dafür, dass alle gleichartigen Informationen (z.B. Startbahnhof) auf einer Karte stehen. Solch eine spaltenorientierte Abfrage wäre z.B. dann möglich, wenn man prüfen will, wie viel Prozent der Züge der Deutschen Bahn in welchem Bahnhof starten. Für diese Abfrage würde man eine einzelne Spalte von jedem Datensatz (Startbahnhof) benötigen, was der spaltenorientierten Speicherform entgegenkommt, da bei ihr alle Startbahnhöfe an einem Ort gespeichert sind.

Die zeilenorientierte Speicherung eignet sich hingegen wiederum besser für das Anzeigen von gefundenen Verbindungen mit deren gesamten Informationen wie Abfahrtszeit, Zielzeit und Zugtyp, da man hier viele Spalten von nur einer einzelnen Zeile benötigt und es daher von Vorteil ist, wenn alle Daten einer Zeile zusammen stehen. Einfach gesagt ist eine zeilenorientierte Datenbank immer dann vorzuziehen, wenn man viele verschiedene Spalten oder einzelne Zeilen benötigt, eine spaltenorientierte, wenn man viele Zeilen oder einzelne Spalten braucht. Außerdem eignen sich spaltenorientierte Datenbanken dann eher, wenn man wenige Änderungen an den Datensätzen vornehmen muss.

In der Realität wird die oben stark vereinfachte Speicherform natürlich durch jedes Datenbanksystem und seine Kompressions- und Optimierungsalgorithmen wieder verändert. Die grundsätzliche Tendenz bleibt jedoch erhalten.

I do not maintain a comments section. If you have any questions or comments regarding my posts, please do not hesitate to send me an e-mail to blog@stefan-koch.name.