Im Team Data & Analytics arbeiten wir tagtäglich mit Datenbanken. Wir beraten Kunden und helfen ihnen zu ihrer Analytics Lösung. Dabei ist es essenziell, dass wir gängige Datenbank-Technologien genauestens kennen. Ich bin als Lernender im Team und untersuche Technologien, oder unterstütze verschiedene Projekte. Dafür habe ich in einer semestrigen Arbeit des Studiums einen Vergleich erstellt.
Das Ziel ist es mit diesem Vergleich den Aspekt Performance zwischen den Technologien genauer zu untersuchen. Damit erhöhen wir unser Verständnis und haben wissenschaftliche Begründungen für unsere Empfehlungen an die Kunden.
Der Anfang des Projekts bestand darin ein Szenario zu definieren. Im Rahmen der Arbeit beschränkte ich mich auf ein kleines Stern-Schema. Dieses entspricht einem typischen Fall in unserem Team, in etwas verkleinerter Form.
Das Diagramm zeigt den Aufbau der Datenbank. Die Faktentabelle “sales” hat 1’000’000 Datensätze, während die kleineren Dimensionstabellen zwischen 20 und 5’000 Einträge hatten. Die Daten wurden zufällig mithilfe von Vertica generiert und in beide Datenbanken geladen:
Die Experimente konnten nun starten. Ich habe mich für vier Abfragen (Queries) mit steigender Komplexität entschieden. Die Untersuchungen führte ich für zwei Fälle durch: Seriell und parallel. Gemessen wurde die Gesamtdauer für die Ausführungszeit der Queries, also vom Absenden der Anfrage bis zur Ankunft des letzten Pakets. Als Beispiel folgt der Query 3. Die Syntax unterscheidet sich zwischen Azure Synapse Analytics und Vertica.
Damit die Resultate aussagekräftig sind mussten wir noch gleiche Bedingungen für alle Datenbanken schaffen. Als Host der Datenbanken haben wir Azure verwendet. Dadurch konnten wir die Resultate mit den entstanden Kosten pro Tag für die Hardware in Azure abgleichen. Dieses Ergebnis ist dann Grundlage für die Interpretationen und die Entscheidung.
Die Kosten entstanden auf unterschiedliche Weise. Bei Azure Synapse Analytics (PaaS) entstanden die Kosten primär durch die Rechner. Die Einheit für die Leistungsfähigkeit in Azure Synapse nennt sich Data Warehouse Unit. Dies entspricht einer Mischung von Memory und Arbeitsspeicher. Im Test wurde die kleinste Einstellung von 100 DWU’s verwendet.
Der Datenspeicher in Synapse ist mit sogenannten Storage Accounts gelöst. Der Vorteil davon ist, dass nur für die gespeicherte Menge an Daten bezahlt wird. Diese belief sich auf ca. 300 MB, wodurch Kosten <0.01 CHF entstanden.
Für Vertica wurde die vorgefertigte Ressource von Azure verwendet, die einen beim Aufsetzen unterstützt. Die grössten Kosten entstanden durch den Datenspeicher, der über Premium SSD’s lief. Die virtuelle Maschine war vergleichsweise günstig. Im Gegensatz zu Azure Synapse hatte ich hingegen direkten Zugriff (IaaS).
Ein weiterer Punkt ist die Lizenz. Für Azure Synapse ist die Lizenz im Preis für die Rechenleistung miteinbegriffen. Wenn grössere Projekte mit Vertica (ab 1TB) gemacht werden, muss hingegen eine Lizenz gelöst werden, was zusätzliche Kosten verursacht.
Alle Details zu Kosten und Hardware sind in der Arbeit noch beschrieben, dafür reicht dieser Blog Beitrag nicht aus.
Damit die Resultate aussagekräftig sind mussten wir noch gleiche Bedingungen für alle Datenbanken schaffen. Als Host der Datenbanken haben wir Azure verwendet. Dadurch konnten wir die Resultate mit den entstanden Kosten pro Tag für die Hardware in Azure abgleichen. Dieses Ergebnis ist dann Grundlage für die Interpretationen und die Entscheidung.
Für Vertica wird das auch gemacht aber mit den Kosten für Vertica im Zähler. Für Synapse gab das einen Wert von ca. einem Drittel und für Vertica zwei Drittel. Die orangen Säulen entstehen, wenn die blaue Säule mit diesem Faktor multipliziert wird.
Vertica ist leicht besser als Synapse in allen Kategorien bis auf Query 1. Ausserdem fällt die sehr kurze Dauer von Vertica in Query 2 auf. Es gibt mehrere Begründungen für diese Resultate, die ausführlicher in der Arbeit besprochen werden. Darunter befinden sich z.B. unterschiedliche Architekturen oder Messfehler durch die Experimente.
Die parallelen Abfragen konnten aufgrund der Unterschiede zwischen den Architekturen nicht so einfach gemessen werden. Stattdessen bei beiden Datenbanken das Verhältnis zwischen seriellen und parallelen Abfragen gebildet und die Verbesserung dazwischen verglichen.
In einer Formel sieht das folgendermassen aus:
Es gibt Vorgaben, wie viele parallele Queries gleichzeitig verarbeitet werden können. Dies ändert sich mit der Grösse der Datenbank. Bei Synpase war das Limit auf 4 parallelen Abfragen. Vertica hatte kein Limit, jedoch änderte sich die Performance nicht stark ab 10 Threads.
Synapse überholt Vertica in Queries eins und zwei leicht. Dennoch ist Vertica in den letzten beiden Abfragen besser. Die Resultate sind bei beiden Abfragen nahe bei einander. Die Kosten wurden gleichbehandelt, wie bei den seriellen Ergebnissen.
Beide Technologien haben ihre Stärken und Schwächen, die im Rahmen der Arbeit auch nicht immer zum Vorschein kamen. Ausserdem gibt es andere Aspekte als die Performance, die entscheidend für die Wahl einer Datenbank ist.
Grundsätzlich können wir aber unserem Vergleich entnehmen, dass Vertica eine sehr gute Wahl betreffend Performance ist. Abschliessend möchte ich aber noch festhalten, dass für die Entscheidung einer Datenbank auch noch andere Eigenschaften, als Performance wichtig sind.
Bei Interesse an der Arbeit kann man mich per E-Mail erreichen:
Lukas Meier
Student PiBS Informatik
Find the job or career to suit you. A career where you can make a difference and continue your personal development.
What you do is who we are.