Nach zwei bereichernden Jahren als Data Engineer hatte ich endlich die Gelegenheit, in das Buch Fundamentals of Data Engineering einzutauchen, das von Joe Reis und Matt Housley verfasst wurde.
Die Lektüre dieses Buches inspirierte mich dazu, meine Erfahrungen mit Daten mit dem theoretischen Verständnis zu verbinden. Die Ideen des Buches brachten mich dazu, über meine Arbeit als Data Engineer nachzudenken und halfen mir, die Lücke zwischen Theorie und Praxis zu schließen.
In diesem Blogbeitrag möchte ich 5 wichtige Erkenntnisse aus diesem Buch mit Ihnen teilen. Ich konzentriere mich auf einen Schlüsselaspekt aus jedem Kapitel, um diesen Blogbeitrag informativ zu halten.
Worum geht es in diesem Buch?
Fundamentals of Data Engineering ist das Grundlagenbuch Nr. 1, das von vielen erfahrenen Data Engineers empfohlen wird. Es hilft Dateningenieuren zu verstehen, wie sie die Konzepte der Datengenerierung, ‑aufnahme, ‑orchestrierung, ‑transformation, ‑speicherung und ‑verwaltung anwenden können, die in jeder Datenumgebung entscheidend sind, unabhängig von der zugrunde liegenden Technologie.
Was ist Data Engineering (Kapitel 1)
Data Engineering ist der Entwurf, die Implementierung und die Wartung von Systemen und Prozessen, die Rohdaten in hochwertige, konsistente Informationen umwandeln, um nachfolgende Anwendungsfälle wie Analysen und maschinelles Lernen zu unterstützen. Data Engineering ist der Schnittpunkt von Sicherheit, Datenmanagement, DataOps, Datenarchitektur, Orchestrierung und Software-Engineering. Ein Data Engineer verwaltet den Data-Engineering-Lebenszyklus, von der Beschaffung von Daten aus Quellsystemen bis zur Bereitstellung von Daten für Anwendungsfälle wie Analyse und maschinelles Lernen.
Data Engineering Life Cycle (Kapitel 2)
Der Lebenszyklus des Data Engineering gliedert sich in die folgenden fünf Phasen:
- Erzeugung: Quellsysteme: Ein Quellsystem ist der Ursprung der Daten, die im Lebenszyklus des Data Engineering verwendet werden. Der Data Engineer muss wissen, wie Quellsysteme funktionieren, wie sie Daten erzeugen, wie oft und schnell sie Daten erzeugen und welche Arten von Daten sie erzeugen.
- Speicherung: Die Wahl einer Speicherlösung ist der Schlüssel zum Erfolg im restlichen Datenlebenszyklus. Welche Art von Speichersystem Sie verwenden sollten, hängt von den Anwendungsfällen, dem Datenvolumen, der Häufigkeit der Dateneingabe, dem Datenformat und der Größe ab.
- Dateneingabe: Batch versus Streaming: Überlegen Sie, welche Anwendungsfälle und Vorteile das Streaming bietet, welches Tool in diesen Situationen am besten geeignet ist und wie Sie den Kompromiss begründen können. Streaming ist nicht immer einfach; es gibt immer zusätzliche Kosten und Komplikationen. Die Stapelverarbeitung eignet sich hervorragend für viele gängige Aufgaben, z. B. das Trainieren von Modellen und das Versenden von Wochenberichten.
- Umwandlung: In der Transformationsphase beginnen die Daten, einen Wert für die nachgelagerte Nutzung zu schaffen. In der Regel werden die Daten in den Quellsystemen oder während des Ingestion-Prozesses transformiert, wobei die Geschäftslogik eine wichtige Rolle bei der Datentransformation spielt.
- Daten bereitstellen: Daten haben einen Wert, wenn sie für praktische Zwecke verwendet werden. Zu den beliebten Verwendungszwecken von Daten gehören Analysen (einschließlich Business Intelligence, operative Analysen, die sich auf die feinkörnigen Details von Vorgängen konzentrieren, eingebettete Analysen), ML und Reverse ETL.
Entwurf einer guten Datenarchitektur (Kapitel 3)
Unternehmensarchitektur ist die Gestaltung von Systemen zur Unterstützung des Wandels in einem Unternehmen. Dazu müssen Entscheidungen getroffen werden, die flexibel sind und nach sorgfältiger Abwägung der Kompromisse geändert werden können. Zu den Grundsätzen der Gestaltung einer guten Datenarchitektur gehören:
- Gemeinsame Komponenten klug auswählen
- Planen Sie für Ausfälle
- Architektur für Skalierbarkeit
- Architektur ist Führung
- Immer architektonisch sein
- Lose gekoppelte Systeme bauen
- Treffen Sie reversible Entscheidungen
- Der Sicherheit Vorrang geben
- FinOps einbeziehen
Auswahl von Technologien für den gesamten Lebenszyklus der Datentechnik (Kapitel 4)
Bei der Auswahl von Datentechnologien für den gesamten Lebenszyklus der Datentechnik sind folgende Aspekte zu berücksichtigen:
- Teamgröße und Kapazitäten
- Geschwindigkeit der Markteinführung
- Interoperabilität: wie verschiedene Technologien oder Systeme miteinander verbunden sind, Informationen austauschen und interagieren
- Kostenoptimierung und Geschäftswert: Berücksichtigung der Gesamtbetriebskosten, der gesamten Opportunitätskosten, FinOps
- Heute vs. Zukunft: Unveränderliche vs. transitorische Technologien
- Unveränderliche Technologien können Teile der Cloud oder Sprachen sein, die es schon lange gibt, vorübergehende Technologien sind solche, die kommen und gehen.
- Standort: Vor-Ort vs. Cloud
- Build vs. Buy: Sie kennen Ihren Wettbewerbsvorteil und wissen, wo es sinnvoll ist, Ressourcen in die Anpassung zu investieren.
- Monolithisch vs. Modular: Monolithische Systeme sind in sich geschlossen und führen oft mehrere Funktionen in einem einzigen System aus.
- Serverless vs. Server: Zu den wichtigsten Überlegungen gehören Größe und Komplexität der Arbeitslast, Ausführungshäufigkeit und ‑dauer, Anfragen und Vernetzung, Sprache, Laufzeitbeschränkungen und Kosten.
- Optimierung, Leistung, Benchmark-Kriege
- Die Unterströmungen des Lebenszyklus der Datentechnik
- Dazu gehören Datenmanagement, DataOps und Datenarchitektur.
Data Generation in Source Systems (Kapitel 5)
Die Daten können von dort stammen:
- Dateien und unstrukturierte Daten
- APIs
- Anwendungsdatenbanken (OLTP-Systeme)
- Online-Analytisches Verarbeitungssystem (OLAP)
- Änderungsdatenerfassung – eine Methode zum Extrahieren jedes Änderungsereignisses (Einfügen, Aktualisieren, Löschen), das in einer Datenbank auftritt
- Protokolle: Erfassen von Informationen über Ereignisse, die in Systemen auftreten
- Datenbankprotokolle
- CRUD (Erstellen, Lesen, Aktualisieren und Löschen)
Speicherung (Kapitel 6)
Die Speicherung ist der wichtigste Teil des Datenentwicklungsprozesses. Sie ist die Grundlage für die drei Hauptphasen Ingesting, Transformation und Serving.
- Einzelne Maschine vs. Verteilte Speicherung: Bei der verteilten Speicherung werden die Aktionen zahlreicher Server organisiert, um Daten schneller und in größerem Umfang zu speichern, abzurufen und zu verarbeiten und gleichzeitig Redundanz zu bieten, falls ein Server ausfällt.
- Eventuelle Vs. Starke Konsistenz: In verteilten Systemen gibt es zwei gängige Konsistenzmuster: eventuelle und starke Konsistenz. Eventuelle Konsistenz ermöglicht es Ihnen, Daten schnell zu erhalten, ohne zu überprüfen, ob Sie die neueste Version auf allen Knoten haben. Dies ist ein üblicher Kompromiss in großen, verteilten Systemen. Starke Konsistenz in der verteilten Datenbank stellt sicher, dass Schreibvorgänge auf jedem Knoten zuerst mit einem Konsens verteilt werden und dass alle Lesevorgänge konsistente Ergebnisse liefern. Starke Konsistenz wird verwendet, wenn Sie eine erhöhte Abfragelatenz tolerieren und bei jeder Abfrage der Datenbank korrekte Daten benötigen.
- Dateispeicherung: Eine Datei ist eine Art von Datenelement, das von Betriebssystemen und Software zum Lesen, Schreiben und Verweisen auf Daten verwendet wird.
- Blockspeicher: Blockspeicher ist der Typ von Rohspeicher, der von SSDs und Magnetplatten bereitgestellt wird.
- Objektspeicher: Der Objektspeicher enthält Objekte in allen Formen und Größen. Dabei kann es sich um jede Art von Datei handeln – TXT, CSV, JSON, Bilder, Videos oder Audio. Objektspeicher unterstützen in der Regel keine In-Place-Updates oder Anhänge.
- Cache- und speicherbasierte Speichersysteme: RAM-Speichersysteme speichern Daten für schnellen Zugriff und hohe Bandbreiten. Wenn Dateningenieure eine ultraschnelle Abruflatenz benötigen, helfen diese ultraschnellen Cache-Systeme.
- Das verteilte Dateisystem von Hadoop: Das verteilte Dateisystem Hadoop basiert auf dem Google File System (GFS) und wurde ursprünglich für die Verwendung des MapReduce-Programmiermodells zur Verarbeitung von Daten entwickelt. Hadoop ähnelt der Objektspeicherung, aber es gibt einen großen Unterschied: Hadoop speichert und verarbeitet Daten auf denselben Knoten, während Objektspeicher in der Regel nicht viel Unterstützung für die Verarbeitung von Daten auf denselben Knoten bieten.
- Streaming-Speicher: Streaming-Daten haben einen besonderen Speicherbedarf. Im Falle von Nachrichtenwarteschlangen sind die gespeicherten Daten zeitlich begrenzt und sollen nach einer bestimmten Zeit verschwinden. Verteilte, skalierbare Streaming-Systeme wie Apache Kafka bieten jetzt eine extrem langfristige Speicherung von Streaming-Daten.
- Indizes, Partitionierung und Clustering: Indizes bieten eine Abbildung der Tabelle für bestimmte Felder und ermöglichen ein extrem schnelles Auffinden einzelner Datensätze. Ohne Indizes müsste eine Datenbank eine ganze Tabelle durchsuchen, um die Datensätze zu finden, die eine WHERE-Bedingung erfüllen. Cluster ermöglichen eine feinere Gliederung der Daten innerhalb von Partitionen. Ein Clustering-Schema, das in einer spaltenorientierten Datenbank angewandt wird, sortiert Daten nach einem oder einigen wenigen Feldern und fasst ähnliche Werte zusammen.
Storage Abstractions
Die Speicherabstraktion lässt sich auf ein paar wichtige Überlegungen reduzieren:
- Zweck und Anwendungsfall
- Aktualisierungsmuster
- Kosten
- Getrennte Speicherung und Datenverarbeitung
Arten von Speicherabstraktionen:
- Daten-Lagerhaus: Cloud Data Warehouses ordnen riesige Mengen unverarbeiteter Rohdaten in Data Lakes an. Cloud-Data-Warehouses können große Mengen an Text und komplizierten JSON-Dokumenten verwalten. Im Gegensatz zu Data Lakes können Cloud Data Warehouses keine unstrukturierten Daten wie Fotos, Video und Audio verarbeiten. Cloud-Data-Warehouses und Objektspeicher bieten eine Data-Lake-Lösung.
- Data Lake: Der Data Lake war ursprünglich als massiver Speicher konzipiert, in dem Daten in roher, unverarbeiteter Form aufbewahrt wurden.
- Data Lakehouse: Das Data Lakehouse ist eine Architektur, die Aspekte des Data Warehouse und des Data Lake kombiniert. Es handelt sich um eine Metadaten- und Dateiverwaltungsschicht, die mit Datenverwaltungs- und ‑umwandlungstools eingesetzt wird. Der Hauptvorteil von Data Lakehouse gegenüber proprietären Tools ist die Interoperabilität.
Ingestion (Kapitel 7)
Die Datenaufnahme ist der Prozess, bei dem Daten von einem Ort zum anderen verschoben werden.
Wichtige technische Überlegungen für die Ingestionsphase:
- Begrenzt vs. Unbegrenzt: Unbegrenzte Daten sind Daten, wie sie in der Realität vorhanden sind, wie Ereignisse geschehen, entweder sporadisch oder kontinuierlich, fortlaufend und fließend. Begrenzte Daten sind eine bequeme Möglichkeit, Daten über eine Art von Grenze, wie z. B. die Zeit, zu gruppieren. Alle Daten sind unbegrenzt, bis sie begrenzt werden.
- Häufigkeit: Batch (häufig), Micro-Batch (halb-frequent) oder Echtzeit (sehr häufig)
- Synchron vs. asynchron: Bei der synchronen Datenübernahme haben Quelle, Datenübernahme und Ziel komplexe Abhängigkeiten und sind eng miteinander verbunden. Bei der asynchronen Datenübernahme können die Abhängigkeiten nun auf der Ebene einzelner Ereignisse stattfinden, ähnlich wie in einem Software-Backend, das aus Microservices besteht.
- Serialisierung/Deserialisierung: Serialisierung bedeutet die Kodierung der Daten aus einer Quelle und die Vorbereitung von Datenstrukturen für die Übertragung und Zwischenspeicherung. Stellen Sie bei der Aufnahme von Daten sicher, dass Ihr Ziel die empfangenen Daten deserialisieren kann.
- Durchsatz und Skalierbarkeit: Verwenden Sie verwaltete Dienste, die die Skalierung des Durchsatzes für Sie übernehmen.
- Zuverlässigkeit und Dauerhaftigkeit: Zuverlässigkeit bedeutet eine hohe Betriebszeit und ein angemessenes Failover für Ingestion-Systeme; Haltbarkeit bedeutet, dass sichergestellt wird, dass Daten nicht verloren gehen oder beschädigt werden.
- Payload: Ein Nutzdatenpaket ist der Datensatz, den Sie aufnehmen, und weist Merkmale wie Art, Form, Größe, Schema und Datentypen sowie Metadaten auf.
- Push vs. Pull vs. Polling: Push – das Quellsystem sendet Daten an das Ziel, Pull – das Ziel liest Daten direkt von der Quelle, Polling – die Datenquelle wird regelmäßig auf Änderungen überprüft.
Überlegungen zum Nachrichten- und Stream-Ingestion:
- Schemaentwicklung: Felder können hinzugefügt oder entfernt werden, oder Werttypen können sich ändern – verwenden Sie ein Schemaregister, eine Warteschlange für tote Buchstaben und kommunizieren Sie effektiv über mögliche Schemaänderungen.
- Spät eintreffende Daten
- Bestellung und mehrfache Lieferung: Streaming-Plattformen sind in der Regel aus verteilten Systemen aufgebaut, was zu einigen Komplikationen führen kann. Nachrichten können außer der Reihe und mehr als einmal zugestellt werden (at-least-once-Lieferung).
- Fehlerbehandlung und Dead-Letter-Queues: Dead-Letter-Queue trennt problematische Ereignisse von Ereignissen, die vom Konsumenten akzeptiert werden können.
- Verbraucher Pull und Push
- Standort: Je näher die Datenaufnahme am Ursprung der Daten liegt, desto besser sind Bandbreite und Latenz. Dies muss jedoch gegen die Kosten abgewogen werden, die entstehen, wenn Daten zwischen Regionen verschoben werden, um Analysen mit einem kombinierten Datensatz durchzuführen.
Abfragen, Modellierung und Umwandlung (Kapitel 8)
Eine Abfrage ermöglicht es Ihnen, Daten abzurufen und zu verarbeiten.
Verbesserung der Abfrageleistung:
- Optimieren Sie Ihre JOIN-Strategie und Ihr Schema (erstellen Sie vorverknüpfte Tabellen und schulen Sie die Benutzer, diese zu nutzen oder innerhalb von materialisierten Ansichten zu verknüpfen, verbessern Sie die Leistung für komplexe Verknüpfungen, verwenden Sie Common Table Expressions (CTEs) anstelle von verschachtelten Unterabfragen oder temporären Tabellen)
- Verwenden Sie den erklärten Plan und verstehen Sie die Leistung Ihrer Abfrage
- Vermeiden Sie vollständige Tabellenscans
- Wissen, wie Ihre Datenbank mit Übertragungen umgeht (z. B. Unterschiede zwischen PosgresSQL, BigQuery und MongoDB)
- Vakuumieren Sie tote Datensätze (entfernen Sie tote Datensätze in einem Prozess, der Vakuumierung genannt wird)
- Nutzen Sie zwischengespeicherte Abfrageergebnisse
Slowly changing dimension (SCD):
Eine sich langsam ändernde Bemaßung (SCD) ist erforderlich, um Änderungen in den Bemaßungen zu verfolgen.
Typ 1: Überschreiben Sie vorhandene Dimensionsdatensätze – Sie haben keinen Zugriff auf die gelöschten historischen Dimensionsdatensätze.
Typ 2: Führen Sie eine vollständige Historie der Dimensionsdatensätze. Wenn sich ein Datensatz ändert, wird dieser spezielle Datensatz als geändert gekennzeichnet und ein neuer Dimensionsdatensatz erstellt, der den aktuellen Status der Attribute widerspiegelt.
Typ 3: Ein SCD des Typs 3 ähnelt einem SCD des Typs 2, aber anstatt eine neue Zeile zu erstellen, wird bei einer Änderung in einem SCD des Typs 3 ein neues Feld erstellt.
Batch Transformation — JOINs
- Verteilte Verknüpfung: eine logische Verknüpfung (die durch die Abfragelogik definierte Verknüpfung) muss in viel kleinere Knotenverknüpfungen unterteilt werden, die auf einzelnen Servern im Cluster ausgeführt werden
- Broadcast Join: in der Regel asymmetrisch, mit einer großen Tabelle, die über die Knoten verteilt ist, und einer kleinen Tabelle, die leicht auf einen einzelnen Knoten passt
- Shuffle-Hash-Join: Wenn keine der beiden Tabellen klein genug ist, um auf einen einzelnen Knoten zu passen, verwendet das Abfrageprogramm einen Shuffle-Hash-Join
Dieses Kapitel enthält eine Menge detailliertes Wissen über die Umwandlung und ich möchte Sie ermutigen, es gründlich zu lesen.
Bereitstellung von Daten für Analysen, Machine Learning und Reverse ETL (Kapitel 9)
Ein guter Dateningenieur sollte die Serving-Phase als Chance sehen, um zu lernen, was funktioniert und was verbessert werden kann. Nutzen Sie das Feedback der Stakeholder als Gelegenheit, um das zu verbessern, was Sie entwickelt haben. Die Menschen müssen den Daten, die Sie bereitstellen, vertrauen. Sie müssen Ihre Anwendungsfälle und Benutzer, die zu erstellenden Datenprodukte und die Art und Weise, wie Sie die Daten bereitstellen werden, verstehen.
Sicherheit, Datenschutz und die Zukunft des Data Engineerings (Kapitel 10 und 11)
Sicherheit muss zur Gewohnheit werden; zu den Grundsätzen, die es zu beachten gilt, gehören das Prinzip der geringsten Privilegien, die ständige Sicherung der Daten, das Patchen und Aktualisieren von Systemen und die Verschlüsselung.
Vereinfachte, benutzerfreundliche Tools senken weiterhin die Einstiegshürde für die Datentechnik. Die zunehmende Vereinfachung von Datentools und die Entstehung und Dokumentation von Best Practices bedeutet, dass Data Engineering immer „unternehmensgerechter“ wird. Dies ermöglicht es Dateningenieuren, die an neuen Werkzeugen arbeiten, Möglichkeiten in den Abstraktionen von Datenmanagement, DataOps und all den anderen Unterströmungen des Data Engineering zu finden.
Schlussfolgerung
Dieses Buch ist ein unverzichtbares Hilfsmittel in der sich ständig weiterentwickelnden Welt der Datentechnik. Es vermittelt das grundlegende Verständnis, das man braucht, um im Data Engineering erfolgreich zu sein. Als nächstes plane ich, Designing Data-Intensive Applications von Martin Kleppmann zu lesen.
Wenn Sie dem Data Engineering Things Book Club noch nicht beigetreten sind, tun Sie es bitte! Dieses Buch ist das erste Buch, das wir lesen werden, und im August wird es eine Veranstaltung geben.
Quelle: medium.com