Daten- und Tabellenkompression

Datenkompression in SQL-Datenbanken

Mehrfach vorkommende Daten eliminieren – Tabellenkompression

Spricht man von Komprimierung, meint man in der Regel Tabellenkompression. Tabellenkompression ist eine seit mehreren Jahren übliche Methode, den Speicherbedarf in strukturierten Daten zu reduzieren. Dabei wird die Tatsache genutzt, dass selbst bei hoch normalisierten relationalen Datenbanken in einigen Attributen gleiche Werte in mehreren Datensätzen auftreten. Beispiele sind Felder mit eingeschränktem Wertebereich wie „Farbe“, „Geschlecht“ oder „Status“. Besonders viele Mehrfacheinträge befinden sich jedoch in schwach normalisierten Tabellen, wie sie im Data-Warehouse-Umfeld aus Performance-Gründen üblich sind.

Redundanz nutzen: Schwach normalisierte Datenbanken mit vielen Mehrfachwerten sind gute Kandidaten für den Table Compress.
Redundanz nutzen: Schwach normalisierte Datenbanken mit vielen Mehrfachwerten sind gute Kandidaten für den Table Compress.

Bei der Tabellenkompression wird Speicherplatz gespart, indem Mehrfacheinträge in einer Tabelle nur einmal abgelegt werden. Werte, die sich wiederholen, werden in einer eigenen Symboltabelle auf Blockebene gespeichert. An Stelle der sich wiederholenden Daten steht dann im jeweiligen Datensatz nur noch ein Zeiger auf diese Tabellenstruktur. Damit erfolgt praktisch eine automatische Normalisierung durch Zusammenfassen aller Mehrfacheinträge von Datenfeldern im Datenbank-Block.

Die Abbildung zeigt den Table Compress anschaulich anhand eines Beispiels mit fünf Datensätzen.

Speicher sparen: Bei der Tabellenkompression werden Werte, die sich wiederholen, in den Header einer Symboltabelle geschrieben; in den Datensätzen erscheint nur noch ein Zeiger auf die Werte.
Speicher sparen: Bei der Tabellenkompression werden Werte, die sich wiederholen, in den Header einer Symboltabelle geschrieben; in den Datensätzen erscheint nur noch ein Zeiger auf die Werte.

Die Komprimierung erfolgt beim Einfügen von Daten in die Tabelle. Die Platzersparnis ergibt sich aus der Verwendung der Zeiger, die weniger Speicherplatz als die Datenwerte erfordern. Dabei verringert sich nicht nur der Speicherplatzbedarf auf der Festplatte und im RAM, sondern es erhöht sich auch die Performance der Tabellenzugriffe. Der Komprimierungsalgorithmus ist sehr effizient, der CPU-Verbrauch für die Komprimierung beziehungsweise Dekompression gering. Für den Anwender ändert sich beim Zugriff auf die Daten nichts. Die Kompression ist für ihn vollständig unsichtbar.