Softeq unterstützte ein großes US-amerikanisches Telekommunikationsunternehmen bei der Entwicklung einer maßgeschneiderten Media-Streaming-Lösung für Digital Signage. Die Lösung ermöglicht es Einzelhändlern und Agenturen, Werbeinhalte auf digitale Displays an öffentlichen Orten zu übertragen.
Neben der Verbreitung digitaler Inhalte hilft das System bei der Auswertung der Kampagnenleistung. Dafür sammeln die Gadgets Daten zu Ad Impressions für bestimmte Kampagnen und Inhaltstypen und senden die Daten jede Stunde an das Backend. Eine Werbeagentur kann die Daten zur Kampagnenleistung über einen bestimmten Zeitraum abfragen und die Daten über das Admin-Portal einsehen.
Zum Speichern der Daten wählten wir zunächst MongoDB, das für jede Datei eine eindeutige ID erstellt und die Dokumente in einer Tabelle anordnet. Mithilfe der MongoDB Aggregation Pipeline implementierten wir auch eine Funktion zur Erstellung von Berichten. Die Lösung funktionierte gut, bis die Datenbank auf 20 Millionen Datensätze anwuchs.
Mit diesen Optimierungen gelang es uns, die Leistung des Systems zu stabilisieren. Zur Unterstützung der wachsenden Anzahl von Geräten, mussten wir dann jedoch die Backend-Kapazität skalieren. Um die Abfragegeschwindigkeit zu optimieren, benötigten wir eine Backend-Lösung, die noch skalierbarer war.
Um MongoDB zu ersetzen, machten wir uns auf die Suche nach einer Backend-Lösung mit der wir diese Einschränkungen überwinden könnten.
Schließlich entschieden wir uns für AWS Redshift – einen vollständig verwalteten Data-Warehouse-Service mit Datenvolumen in Petabyte-Größe in der Cloud. Der Service ist kosteneffizient, stabil und DevOps-freundlich.
Ein AWS Redshift-Cluster enthält einen einzelnen Leader-Knoten, der Datenabfragen verarbeitet und Aufgaben auf Rechenknoten verteilt. Nachdem die Rechenknoten ihre Aufgaben abgeschlossen haben, fasst der Leader-Knoten die Ergebnisse zusammen und sendet die Daten an den Client. Redshift bietet Sortierschlüssel anstelle eines B-Baums. Dies hilft dabei, Suchkriterien zu präzisieren, Daten zu komprimieren und somit den Speicherplatz zu optimieren. Außerdem werden Informationen in Spalten und nicht in Zeilen gespeichert.
Zudem ist AWS Redshift mit der Lösung zur Datenspeicherung AWS S3 integriert. So können wir JSON-Daten aus MongoDB einfach in JSON-Dateien übertragen, sie in S3 hochladen und die Informationen aus S3 in AWS Redshift importieren. Auf die gleiche Weise können wir stillgelegte Daten nach einer bestimmten Zeit in S3 hochladen.
Die Media-Streaming-Lösung verwendet MongoDB zur Verarbeitung von Messdaten zur Anzeigen-Performance. ETL-Jobs übernehmen das Batch Loading der Kennzahlen von MongoDB/Postgres nach Redshift. Dank der Spalte modified_date_time wissen wir, wann die Daten geändert wurden. Um die ETL-Jobs zu implementieren, verwendeten wir Spring Boot mit dem Redshift JDBC-Treiber. Um Berichte zu erstellen, generiert die Anwendung Anfragen und sendet diese über den Redshift JDBC-Treiber direkt an Redshift.
Als wir unsere Lösung testeten, stellten wir außerdem fest, dass die maximal mögliche Anzahl der gespeicherten Daten für einen Cluster mit zwei Knoten 2 Milliarden Datensätze beträgt (für unseren Use Case). In diesem Fall bräuchte das System etwa fünf Minuten, um einen Bericht zu erstellen.
Um die Leistung von MongoDB und Redshift zu vergleichen, führen wir das Beispiel einer Datenbank an, die 25 Millionen Datensätze enthält. MongoDB braucht 12 Minuten, um nach der Anfrage eines Nutzers einen Bericht zu erstellen. AWS Redshift hingegen erledigt diese Aufgabe in etwa 20 Sekunden. So können wir die gleiche Datenverarbeitung und -analyse 36 Mal schneller durchführen.