Performance der SCD2-Lösung

Der Einsatz der von mir beschriebenen Lösung zur „Emulation“ von Slowly Changing Dimensions macht nur dann Sinn, wenn der Durchsatz von Daten akzeptabel hoch ist. Um das zu überprüfen, habe ich einige Performancetests auf MySQL-Basis gemacht.

Erzeugen von Datasets

Zuerst benötigen wir Daten, die wir dann per Bulkload in unsere Schattentabelle laden können. Dazu erstellen wir mit einem einfachen PHP-Skript randomisierte Datensätze. Der Quellcode für das PHP-Skript ist an diesen Artikel angehängt. Ergebnis nach Ausführung ist eine Reihe von Dateien von jeweils n Datensätzen – mit dem Namen n.txt.

Standardmäßig habe ich die folgenden Datenmengen erstellt: 100,500,1000,5000,10000,50000,100000. Für die Darstellung der Ergebnisse und die Zeitmessung sind noch weitere Dateien hinzugekommen.

Testreihe 1 – Laden der Dateien nach MySQL

Die Dateien werden dann nacheinander in die Datenbank geladen. Dies geschieht über den Befehl

LOAD DATA INFILE './n.txt' INTO TABLE cds_schatten FIELDS TERMINATED BY ';' LINES TERMINATED BY 'rn';

Nach einem Load werden die Daten wieder entfernt.

Die Ergebnisse sind ernüchternd. Ohne zusätzliche Strukturen wie Indizes verhundertfacht sich die Ausführungszeit bei der Verzehnfachung der Testdatenmenge. Abhilfe schafft ein kombinierter UNIQUE-Index über die Felder ean und gueltig_bis (in genau dieser Reihenfolge) in der Tabelle cds. Dieser Index bringt zwei Vorteile: Zum einen wird dadurch sichergestellt, dass es pro EAN keine zwei gültigen Datensätze gibt, da gültige Datensätze ja immer denselben Wert in der Zukunft haben. Zum anderen wird dadurch das Attribut ean über den Index auswertbar – eine Eigenheit von MySQL ist, dass bei kombinierten Indizes Anfragen auf die zuerst definierten Indexteile davon profitieren. Mehr zu den MySQL-Index-Eigenschaften unter nebenstehendem Link.

Testreihe 2 – Laden der Dateien in Tabellen mit Indizes

Das Vorgehen bei dieser zweiten Testreihe bleibt natürlich das gleiche. Der Index verfehlt seine Wirkung nicht. Die Zeit zum Laden der Daten steigt nun proportional zur Datenmenge. Der Durchsatz liegt bei auswertbaren Datenmengen gleichbleibend hoch bei über 5000 Rows pro Sekunde. Alle Ergebnisse sind im nebenstehende PDF tabellarisch und grafisch zusammengefasst.

Advertisements