Daten- und Tabellenkompression

Datenkompression in SQL-Datenbanken

Textdaten – Umstieg auf Unicode

Verfolgt man das Ziel einer „ganzheitlichen“ Senkung des Speicherbedarfs, spielen neben der eigentlichen Datenkompression schon ganz simple Aspekte eine Rolle. Beispielsweise die Frage, wie effizient eine Datenbank textliche und numerische Werte speichert.

Textdaten werden heute meist im Unicode-Zeichencode gespeichert. Im Gegensatz zu früheren Zeichenkodierungen, welche in der Regel nur ein bestimmtes Schriftsystem kodierten, ist es das Ziel von Unicode, alle in Gebrauch befindlichen Schriftsysteme und Zeichen abzubilden.

Viele Datenbank-Produkte basieren heute auf Unicode. So setzen beispielsweise einige SAP-Installationen wie das SAP Portal bereits zwingend Unicode voraus. Ab dem nächsten SAP ERP Release 2010 unterstützt SAP nur noch Unicode-basierte Systeme.

Unicode wirkt sich leider negativ auf den Storage-Bedarf aus – CPU- und RAM-Ressourcen werden durch Unicode stärker ausgelastet. Wie stark der Storage-Bedarf tatsächlich steigt, hängt jedoch wesentlich vom verwendeten Unicode-Zeichensatz ab.

Eingesetzt werden bei Datenbanken in der Regel das Unicode Transformation Format UTF-8 und UTF-16. Dabei ist UTF-8 das gebräuchlichere und wird beispielsweise im Internet und in fast allen Betriebssystemen verwendet. Der entscheidende Unterschied zwischen beiden Zeichensystemen ist, dass UTF-8 für die meisten Buchstaben des lateinischen Alphabets nur ein Byte für die Kodierung verwendet. Weniger gebräuchliche Zeichen wie die deutschen Umlaute belegen zwei Byte. Für das relativ neue Euro-Zeichen fand man nur noch eine Kodierung mit drei Byte. Exotische Symbole wie der Violinschlüssel belegen bis zu vier Byte.

Neben UTF-8 hat UTF-16 aber ebenfalls eine große Bedeutung, zum Beispiel als Zeichenkodierung in Java. UTF-16 kodiert standardmäßig mit zwei Byte. Damit lassen sich dann rund 65.000 der häufigsten weltweit benutzen Zeichen darstellen. Für exotische antike oder fernöstliche Zeichensätze weicht UTF-16 auf vier Byte aus.