Join-Optimierung
Mit Hilfe der Join-Optimierung lässt sich die Ausführung von Datenmappings, in denen große Datenmengen gefiltert oder verknüpft werden, beschleunigen.
Bei der Join-Optimierung werden verschachtelte, bei der Ausführung des Mappings auftretende interne Schleifen eliminiert. Verschachtelte Schleifen entstehen, wenn bei einem Mapping jedes Datenelement einer Datengruppe so oft iteriert wird, wie es in einer zweiten Datengruppe vorkommt. Beachten Sie, dass es aufgrund des Mapping-Designs normal für den Mapping-Ausführungsprozessor* ist, dass an verschiedenen Datenelementsequenzen eine Schleifenverarbeitung (Iteration) durchgeführt wird. Wenn es zu unabhängigen verschachtelten Schleifen kommt (d.h. bei Schleifenverarbeitungen, die über andere Schleifen iterieren), kann eine Join-Optimierung, die die Ausführungsdauer des Mappings erheblich verringern würde, sinnvoll sein. Verschachtelte Schleifen fallen bei der Ausführung von Mappings mit wenigen Input-Daten kaum ins Gewicht. Im Fall von Mappings, in denen Dateien oder Datenbanken mit sehr vielen Datensätzen verarbeitet werden, kann dies jedoch zu Problemen führen.
* Der Ausführungsprozessor eines Mappings kann MapForce, MapForce Server oder ein mit MapForce generiertes C#-, C++- oder Java-Programm sein. Die Join-Optimierung steht ausschließlich in der MapForce Server Advanced Edition zur Verfügung.
Um MapForce Server als Ausführungszielprozessor zu definieren, klicken Sie in MapForce auf die Symbolleisten-Schaltfläche BUILT-IN ( ). Damit gewährleisten Sie außerdem, dass in Ihrem Mapping der größte verfügbare Funktionsumfang genutzt werden kann. Wenn Sie eine andere Transformationssprache auswählen, werden bestimmte MapForce-Funktionalitäten eventuell in dieser Sprache nicht unterstützt. |
Wie oben erwähnt, geht es bei Join-Optimierungen in erster Linie darum, verschachtelte Schleifen effizient zu verarbeiten. Wir wollen nun genauer analysieren, wir verschachtelte Schleifen überhaupt entstehen.
Typischerweise kommt es dann zu verschachtelten Schleifen, wenn das Mapping mindestens eine Join-Komponente enthält und der SQL JOIN-Modus** nicht möglich ist.
** Unter bestimmten Bedingungen kann ein spezieller Ausführungsmodus in MapForce, nämlich der "SQL Join-Modus", verwendet werden. Dies gilt nur für Mappings, in denen Daten aus einer Datenbank ausgelesen werden. Wenn Daten auf diese Art mittels Join verknüpft werden, wird die Join-Operation von der Datenbank durchgeführt (d.h. es wird ein SQL JOIN durchgeführt). Dadurch muss der Mapping-Ausführungsprozessor keine verschachtelten Schleifen mehr durchführen. Nähere Informationen zum SQL Join-Modus finden Sie in der MapForce-Dokumentation (https://www.altova.com/de/documentation.html). |
In der Abbildung unten sehen Sie ein (mit Altova MapForce erstelltes) Beispiel-Mapping, in dem Daten aus zwei XML-Dateien mit Hilfe einer Join-Komponente miteinander kombiniert werden. Sie finden dieses Mapping auf dem Rechner, auf dem MapForce installiert ist, unter dem folgenden Pfad: ..\Dokumente\Altova\MapForce2025\MapForceExamples\Tutorial\JoinPeopleInfo.mfd. Einige Personendaten (People) stehen nur in der ersten XML-Datei (Email, Phone) zur Verfügung, während andere Daten nur in der zweiten XML-Datei (City, Street, Number) verfügbar sind. Ziel des Mappings ist es, die zusammengeführten Daten aller Personen, bei denen FirstName und LastName in beiden Quellstrukturen miteinander übereinstimmen, in die XML-Zieldatei zu schreiben.
JoinPeopleInfo.mfd
Eine Join-Komponente in MapForce verbindet Datenelemente in zwei Datengruppen gemäß einer benutzerdefinierten Bedingung. Zu diesem Zweck wird jedes Datenelement in der Datengruppe 1 mit jedem Datenelement in der Datengruppe 2 verglichen. Die Gesamtanzahl der Vergleiche bildet das Kreuzprodukt (das kartesische Produkt) beider Datengruppen. Wenn etwa die erste Datengruppe 50 Datenelemente und die zweite 100 enthält, so werden insgesamt 5000 Vergleiche (50 x 100) durchgeführt. Im obigen Mapping entsprechen die verglichenen Gruppen allen Instanzdatenelementen der zwei mit der Join-Komponente verbundenen XML-Strukturen.
Anmerkung: | Eine Join-Optimierung (eine Funktionalität der MapForce Server Advanced Edition) ist nicht mit Join-Komponenten (einer Funktionalität von MapForce) zu verwechseln. Nähere Informationen zu Join-Komponenten finden Sie in der MapForce-Dokumentation (https://www.altova.com/de/documentation.html). |
Von der Verarbeitungsleistung her gesehen, würden Mappings, die verschachtelte Schleifen enthalten, mehr Verarbeitungszeit in Anspruch nehmen. Stellen Sie sich vor, Sie haben einen Fall, in dem beide miteinander verknüpften Datengruppen Millionen von Datensätzen enthalten. Dies wirkt sich natürlich auf die Verarbeitungsgeschwindigkeit aus. Hier wäre eine Join-Optimierung sinnvoll. Eine Join-Optimierung verhält sich grob gesprochen wie ein Datenbankprozessor, der so optimiert ist, dass er extrem große Datengruppen indiziert, bloß dass eine Join-Optimierung, wie im Mapping oben gezeigt, nicht nur mit Daten aus Datenbanken operiert. Mit einer Join-Optimierung werden verschachtelte Schleifen unabhängig von der Datenart eliminiert, indem, wo dies möglich ist, interne Lookup-Tabellen erstellt werden, die zur Mapping-Laufzeit abgefragt werden. Dadurch wird die Mapping-Verarbeitungsgeschwindigkeit erheblich verbessert und weniger Zeit für die Ausführung des Mappings benötigt.
Anmerkung: | Bei Join-Optimierungen dauert die Mapping-Verarbeitung weniger lang, doch wird normalerweise auch mehr Arbeitsspeicher in Anspruch genommen. Denken Sie daran, dass die Arbeitsspeicherbeanspruchung von verschiedenen komplexen Faktoren abhängig ist; aus diesem Grund kann das beobachtete Verhalten je nach Fall unterschiedlich sein. |
Mit Hilfe von Join-Optimierungen können nicht nur Mappings mit Joins, sondern auch Mappings, die Filterkomponenten enthalten, beschleunigt werden. Ein Filter verarbeitet in MapForce eine Sequenz von Datenelementen (d.h. er überprüft für jede Instanz des mit dem node/row-Input verbundenen Datenelements eine angegebene Boolesche Bedingung). Wenn die Boolesche Bedingung mit einer Funktion verbunden ist, die selbst wiederum über eine weitere Sequenz von Datenelementen iterieren muss und es der Mapping-Kontext verlangt, so kann es zu einer ähnlichen Situation wie bei einem Join kommen. Wenn mit dem Filter ein Kreuzvergleich jedes Datenelements in zwei Datengruppen durchgeführt werden muss, so ist eine Join-Optimierung hier sinnvoll.
Damit die Join-Optimierung in einem Mapping genutzt werden kann, muss es mit der MapForce Server Advanced Edition ausgeführt werden. Um ein Mapping mit der MapForce Server Advanced Edition auszuführen, öffnen Sie es in MapForce und kompilieren Sie es mit dem Menübefehl Datei | Zu MapForce Server-Ausführungsdatei kompilieren zu einer Mapping-Ausführungsdatei (.mfx). Führen Sie die .mfx-Datei anschließend entweder mit einer API-Methode in der Programmiersprache Ihrer Wahl aus oder verwenden Sie den Befehl run der Befehlszeilenschnittstelle (siehe auch Funktionalität).