Eine der offensichtlichsten Änderungen in Data Vault 2.0 ist die Einführung von Hash-Schlüsseln in das Modell. Diese Hash-Schlüssel sind wegen ihrer vielen Vorteile sehr zu empfehlen. Hash-Schlüssel beschleunigen nicht nur den Ladevorgang, sondern sorgen auch dafür, dass das Unternehmen data warehouse über mehrere Umgebungen hinweg nutzen kann: Datenbanken vor Ort, Hadoop-Cluster und Cloud-Speicher.
Betrachten wir zunächst den Leistungsgewinn: Um die Ladevorgänge zu steigern, müssen Abhängigkeiten im Ladeprozess minimiert oder sogar eliminiert werden. In Data Vault 1.0 wurden Sequenznummern zur Identifizierung einer Geschäftseinheit verwendet, was zur Folge hatte, dass es beim Ladevorgang zu Abhängigkeiten kam. Diese Abhängigkeiten haben den Ladeprozess verlangsamt, was insbesondere bei Echtzeit-Feeds ein Problem ist. Hubs mussten zuerst geladen werden, bevor der Ladeprozess der Satelliten und Links beginnen konnte. Diese Abhängigkeiten sollen durch die Verwendung von Hash-Schlüsseln anstelle von Sequenznummern als Primärschlüssel aufgelöst werden.
Business Keys vs. Hash Keys
Im Vorfeld können Geschäftsschlüssel eine fortlaufende Nummer sein, die von einem einzigen Quellsystem erstellt wird, z. B. die Kundennummer. Geschäftsschlüssel können aber auch ein zusammengesetzter Schlüssel zur eindeutigen Identifizierung einer Geschäftseinheit sein, z. B. wird ein Flug in der Luftfahrtindustrie durch die Flugnummer und das Datum identifiziert, da die Flugnummer jeden Tag wiederverwendet wird.
Allgemein: Ein Geschäftsschlüssel ist der natürliche Schlüssel, der von einem Unternehmen zur Identifizierung eines Geschäftsobjekts verwendet wird.
Die Verwendung von Geschäftsschlüsseln in Data Vault ist zwar eine Option, aber eine langsame, die viel Speicherplatz benötigt (sogar mehr als Hash-Schlüssel). Insbesondere bei Links und ihren abhängigen Satelliten sind viele zusammengesetzte Geschäftsschlüssel erforderlich, um die Beziehung oder die Transaktion/das Ereignis in einem Link zu identifizieren und im Satelliten zu beschreiben. Dies würde viel Speicherplatz erfordern und den Ladevorgang verlangsamen, da nicht alle Datenbank-Engines sind in der Lage, effiziente Joins mit Geschäftsschlüsseln variabler Länge durchzuführen.. Andererseits hätten wir zu viele Spalten in der Verknüpfung, da jeder Business Key Teil der Verknüpfung sein muss. Das Problem an dieser Stelle ist, dass wir auch unterschiedliche Datentypen mit unterschiedlichen Längen in den Verknüpfungen haben. Dieses Problem wird dadurch verschärft, dass die Geschäftsschlüssel auch in ihre Satelliten repliziert werden müssen. Um eine konsistente Verknüpfungsleistung zu gewährleisten, besteht die Lösung darin, die Geschäftsschlüssel zu einem einzigen Spaltenwert zusammenzufassen, indem Hash-Funktionen zur Berechnung einer eindeutigen Darstellung eines Geschäftsobjekts verwendet werden.
Massiv parallele Verarbeitung (MPP)
Aufgrund der Unabhängigkeit beim Ladevorgang von Hubs, Links und Satelliten ist es möglich, dies alles parallel zu tun.
Die Idee besteht darin, die Tatsache zu nutzen, dass ein Hash-Schlüssel von einem Unternehmensschlüssel oder einer Kombination von Unternehmensschlüsseln abgeleitet wird, ohne dass ein Nachschlagen in einer übergeordneten Tabelle erforderlich ist. Anstatt also die Sequenz eines Geschäftsschlüssels in einem Hub nachzuschlagen, bevor der Geschäftsschlüssel im Satelliten beschrieben wird, können wir einfach den Hash-Schlüssel des Geschäftsschlüssels berechnen. Die (korrekte) Implementierung der Hash-Funktion gewährleistet, dass derselbe semantische Geschäftsschlüssel zu genau demselben Hash-Schlüssel führt, unabhängig von der geladenen Zielentität.
Hash Keys schließen sich Apache anTM HadoopⓇ Datensätze
Ohne Hashing erfordert die Last in HadoopⓇ oder NoSQL eine Suche nach der Hub- oder Link-Sequenz im relationalen System, bevor die Daten eingefügt oder angehängt werden können. Hashing statt Sequenzierung bedeutet, dass wir komplette 100% parallele Operationen in alle Hubs, alle Links, alle Satelliten laden und alle Hadoop anreichern könnenⓇ oder NoSQL-basierte Dokumente parallel zu verarbeiten. Es ermöglicht auch die Verbindung über mehrere heterogene Plattformen hinweg - von Teradata Database bis zu ApacheTM HadoopⓇ zum Beispiel.
Hash-Differenz
Die Hash-Differenzspalte gilt für die Satelliten. Der Ansatz ist derselbe wie bei den Geschäftsschlüsseln, nur dass hier alle beschreibende Daten wird gehasht. Das reduziert den Aufwand beim Upload, da nur eine Spalte nachgeschlagen werden muss. Der Satelliten-Upload-Prozess prüft erstens, ob der Hash-Schlüssel bereits im Satelliten vorhanden ist, und zweitens, ob es Unterschiede zwischen den Hash-Differenzwerten gibt.
Die obige Abbildung zeigt den Prozess, wenn das Quellsystem Ihnen eine vollständige Datenlieferung sendet. Der Punkt, an dem die Werte gehasht werden sollen, sollte auf dem Weg in den Staging-Bereich liegen, denn An diesem Punkt ist Zeit, um auf "doppelte Kollisionen" zu prüfen und Hashing-Probleme zu lösen, bevor mit den Daten im Data Vault fortgefahren wird.
Welche Hash-Funktion soll verwendet werden?
Es gibt viele Hash-Funktionen zur Auswahl: MD5, MD6, SHA-1, SHA-2 und einige mehr. Wir empfehlen in den meisten Fällen die Verwendung des MD5-Algorithmus mit einer Länge von 128 Bit, weil Sie ist auf den meisten Plattformen allgegenwärtig und hat eine recht geringe Wahrscheinlichkeit von Doppelkollisionen bei einem akzeptablen Speicherbedarf.
Ein weiterer Vorteil, den Hashing mit sich bringt, ist dass die Hashes die gleiche Länge haben und vom gleichen Datentyp sind, woraus sich eine Leistungsverbesserung ergibt. Außerdem werden Hash-Werte generiert, so dass sie nie verloren gehen und neu erstellt werden können.
Kollision
Das Hashing birgt ein sehr kleines Risiko: die Kollision. Das bedeutet, dass zwei verschiedene Daten denselben Hash-Wert erhalten. Aber das Risiko ist sehr gering, zum Beispiel: In einer Datenbank mit mehr als einer Billion Hash-Werten ist die Wahrscheinlichkeit, dass es zu einer Kollision kommt, so groß wie die Wahrscheinlichkeit, dass ein Meteor auf Ihrem Rechenzentrum landet.
Zusammenfassung
Hash Keys sind für das Data Vault nicht zwingend erforderlich, werden aber dringend empfohlen. Die Vorteile von
- Massiv parallele Verarbeitung (MPP),
- Leistung beim Laden von Daten,
- Konsistenz und
- Prüfbarkeit
sind unverzichtbar und können nicht mit Sequenzen oder Business Keys erreicht werden.
Hash-Schlüssel sind kein Allheilmittel... aber sie bieten (viel) mehr Vorteile als Nachteile (Speicherung).
Wir planen, eine POC auf data vault für ein Datamart-Projekt durchzuführen. Wir verwenden derzeit SQL Server 2016 und laut den Microsoft-Dokumenten ist die MD5-Funktion veraltet. Können Sie uns bitte zeigen, wie wir dieses Problem umgehen können?
Eine Möglichkeit besteht darin, auf eine Kompatibilitätsstufe unter 130 zu wechseln. Die andere Möglichkeit besteht darin, den md5-Hash-Algorithmus als eigene Datenbankfunktion zu erstellen: http://binaryworld.net/main/CodeDetail.aspx?CodeId=3600#copy.
Mit freundlichen Grüßen,
Ihr Scalefree-Team
Interessant ist, dass die Datenquellen nicht in die Hashing-Berechnung einbezogen werden. Nehmen wir an, wir haben zwei Buchhaltungssysteme: SAP und Quickbooks. Wenn beide Systeme dieselbe Rechnungsnummer haben, um verschiedene Rechnungen zu repräsentieren, würden wir dann nicht einen unterschiedlichen Hash-Wert für diese haben wollen? Ich vermute, man könnte zwei verschiedene Sätze von Verknüpfungen mit dem Hub für verschiedene Nummern verwenden, aber das klingt, als würden die Abfragen hier komplex werden. Was ist die beste Praxis für Situationen wie diese?
Hallo Brad,
Sie haben Recht - wenn sich Geschäftsschlüssel über mehrere Quellsysteme hinweg überschneiden, fügen wir solche Quellkennungen hinzu.
Aber nur in diesem Fall - wenn die gleichen Geschäftsschlüssel das semantisch gleiche Geschäftsobjekt identifizieren, sollte der Hub die Daten tatsächlich systemübergreifend integrieren. In diesem Fall würde der Quellbezeichner die Integration verhindern.
Ich hoffe, das hilft,
Mike
Nicht notwendig, da der Kontext in einem separaten Satelliten gespeichert wird. Das Hinzufügen eines Quellenindikators in den Hashkey macht ihn quellenspezifischer und komplexer