Spaltenweise Speicherung - Amazon Redshift

Amazon Redshift unterstützt UDFs ab Patch 198 nicht mehr die Erstellung von neuem Python. Das bestehende Python UDFs wird bis zum 30. Juni 2026 weiterhin funktionieren. Weitere Informationen finden Sie im Blog-Posting.

Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.

Spaltenweise Speicherung

In diesem Abschnitt wird die spaltenorientierte Speicherung beschrieben. Dabei handelt es sich um die Methode, die Amazon Redshift verwendet, um Tabellendaten effizient zu speichern.

Die spaltenorientierte Speicherung von Datenbanktabellen ist ein wichtiger Faktor bei der Optimierung der analytischen Abfrageleistung, da dadurch die I/O Gesamtfestplattenanforderungen drastisch reduziert werden. Die Menge an Daten, die von der Festplatte geladen werden müssen, verringert sich.

Die folgenden Abbildungen zeigen, wie durch die spaltenweise Datenspeicherung Effizienzen erzielt werden und wie sich diese in Effizienzen beim Abrufen von Daten in den Arbeitsspeicher niederschlagen.

Die erste Abbildung zeigt, wie Datensätze aus Datenbanktabellen in der Regel zeilenweise in Datenträgerblöcken gespeichert werden.

Datensätze aus einer Datenbanktabelle, die auf Festplattenblöcken nach Zeile gespeichert werden.

In einer typischen relationalen Datenbanktabelle enthält jede Zeile Feldwerte für einen einzelnen Datensatz. Bei der zeilenweisen Datenbankspeicherung speichern Datenblöcke Werte sequenziell für alle aufeinanderfolgenden Spalten der gesamten Zeile. Wenn die Blockgröße kleiner ist als die Größe eines Datensatzes, nimmt die Speicherung eines vollständigen Datensatzes möglicherweise mehr als einen Block ein. Wenn die Blockgröße größer ist als die Größe eines Datensatzes, nimmt die Speicherung eines vollständigen Datensatzes möglicherweise weniger als einen Block ein, was eine ineffiziente Nutzung von Speicherplatz bedeutet. Bei Anwendungen für die Onlineverarbeitung von Transaktionen (Online Transaction Processing, OLTP) beinhalten die meisten Transaktionen häufiges Lesen und Schreiben aller Werte für ganze Datensätze – in der Regel ein Datensatz oder eine kleine Anzahl an Datensätzen gleichzeitig. Folglich ist die zeilenweise Speicherung optimal für OLTP-Datenbanken geeignet.

Die nächste Abbildung zeigt, wie bei der spaltenweise Speicherung die Werte für alle Spalten sequenziell in Datenträgerblöcken gespeichert werden.

Datensätze aus einer Datenbanktabelle, die auf Festplattenblöcken nach Spalte gespeichert werden.

Bei der spaltenweisen Speicherung speichert jeder Datenblock die Werte einer einzelnen Spalte für mehrere Zeilen. Wenn Datensätze im System eintreffen, konvertiert Amazon Redshift die Daten transparent in die spaltenweise Speicherung für alle Spalten.

In diesem vereinfachten Beispiel für die spaltenweise Speicherung enthält jeder Datenblock Spaltenfeldwerte für bis zu dreimal so viele Datensätze wie bei der zeilenbasierten Speicherung. Das bedeutet, dass das Lesen derselben Anzahl von Spaltenfeldwerten für dieselbe Anzahl von Datensätzen im Vergleich zum zeilenweisen Speichern ein Drittel der I/O Operationen erfordert. In der Praxis ist die Speichereffizienz bei der Verwendung von Tabellen mit einer sehr hohen Anzahl an Spalten und Zeilen noch größer.

Ein weiterer Vorteil besteht darin, dass Blockdaten ein speziell für den Spaltendatentyp ausgewähltes Komprimierungsschema verwenden können, da alle Blöcke denselben Datentyp beinhalten. Dadurch werden der benötigte Speicherplatz und I/O weiter reduziert. Weitere Informationen zu Komprimierungsverschlüsselungen basierend auf Datentypen erhalten Sie unter Kompressionskodierungen.

Die Einsparungen an Speicherplatz für Daten auf der Festplatte gelten auch für das Abrufen und Speichern dieser Daten im Arbeitsspeicher. Da bei vielen Datenbankoperationen der Zugriff auf bzw. die Arbeit mit nur einer kleinen Anzahl an Spalten gleichzeitig erforderlich ist, lässt sich Speicherplatz einsparen, indem nur Blöcke für Spalten abgerufen werden, die Sie für eine Abfrage tatsächlich benötigen. Während OLTP-Transaktionen in der Regel die meisten Spalten in einer Zeile für eine kleine Anzahl an Datensätzen umfassen, lesen Data Warehouse-Abfragen in der Regel nur einige wenige Spalten für eine sehr große Anzahl an Zeilen. Das bedeutet, dass das Lesen derselben Anzahl von Spaltenfeldwerten für dieselbe Anzahl von Zeilen nur einen Bruchteil der I/O Operationen erfordert. Es wird nur ein Bruchteil des Arbeitsspeichers verwendet, der für die Verarbeitung zeilenweiser Blöcke erforderlich wäre. In der Praxis sind die Effizienzgewinne bei der Verwendung von Tabellen mit einer sehr hohen Anzahl an Spalten und Zeilen proportional größer. Nehmen wir beispielsweise an, eine Tabelle hat 100 Spalten. Eine Abfrage, die fünf Spalten verwendet, muss nur etwa fünf Prozent der in der Tabelle enthaltenen Daten lesen. Diese Einsparungen wiederholen sich bei großen Datenbanken für möglicherweise Milliarden oder sogar Billionen an Datensätzen. Im Gegensatz dazu würde eine zeilenweise Datenbank ebenfalls die Blöcke mit den 95 nicht benötigten Spalten lesen.

Typische Datenbankblock-Größen reichen von 2 KB bis 32 KB. Amazon Redshift verwendet eine Blockgröße von 1 MB, was effizienter ist und die Anzahl der I/O Anfragen weiter reduziert, die zum Laden von Datenbanken oder anderen Vorgängen erforderlich sind, die Teil des Abfragelaufs sind.