Ich habe einen Eingabedatensatz, dessen Datensätze an eine vorhandene Datenbank angehängt werden. Vor dem Anhängen werden die Daten einer intensiven, zeitintensiven Verarbeitung unterzogen. Ich möchte Datensätze aus dem Eingabedatensatz herausfiltern, die bereits in der Datenbank vorhanden sind, um die Verarbeitungszeit zu verkürzen.
Der Unterschied zwischen Eingabe und Datenbank wird hier dargestellt:
Dies ist ein Überblick über die Art des Prozesses, den ich betrachte. Die Eingabedaten werden schließlich in die Datenbank eingespeist.
Meine aktuelle Lösung besteht darin, einen Matcher-Transformator für die kombinierte Datenbank und Eingabe zu verwenden und dann das NotMatched-Ergebnis mithilfe eines FeatureTypeFilter zu filtern, um nur die Eingabedatensätze beizubehalten.
Gibt es eine effizientere Möglichkeit, die Differenzfunktionen zu erhalten?
quelle
SQLexecutor
. Wenn das Attribut _matched_records auf dem Initiator 0 ist, ist es ein AddAntworten:
Wenn Sie die im Diagramm angegebenen Datenbankeigenschaften haben. Kleine Eingabe, winzige Überlappung, großes Ziel. Dann kann die folgende Art von Arbeitsbereich sehr effizient arbeiten, obwohl mehrere Abfragen für die Datenbank ausgeführt werden.
Lesen Sie also für jedes Feature aus der Eingabeabfrage das passende Feature in der Datenbank. Stellen Sie sicher, dass geeignete Indizes vorhanden sind. Testen Sie das Attribut _matched_records auf 0, führen Sie die Verarbeitung durch und fügen Sie es in die Datenbank ein.
quelle
Ich habe FME nicht verwendet, aber ich hatte eine ähnliche Verarbeitungsaufgabe, bei der die Ausgabe eines 5-Stunden-Verarbeitungsjobs verwendet werden musste, um drei mögliche Verarbeitungsfälle für eine parallele Datenbank über eine Netzwerkverbindung mit geringer Bandbreite zu identifizieren:
Da ich die Garantie hatte, dass alle Funktionen zwischen den Durchläufen eindeutige ID-Werte beibehalten, konnte ich:
In der externen Datenbank musste ich nur die neuen Funktionen einfügen, die Deltas aktualisieren, eine temporäre Tabelle mit gelöschten UIDs füllen und die Funktionen in der Löschtabelle löschen.
Ich konnte diesen Prozess automatisieren, um Hunderte von täglichen Änderungen an einer 10-Millionen-Zeilentabelle mit einem Minimum an Auswirkungen auf die Produktionstabelle zu verbreiten, wobei weniger als 20 Minuten tägliche Laufzeit benötigt wurden. Es lief mehrere Jahre mit minimalen Verwaltungskosten, ohne die Synchronisation zu verlieren.
Während es sicherlich möglich ist, N Vergleiche über M Zeilen durchzuführen, ist die Verwendung eines Digests / einer Prüfsumme eine sehr attraktive Möglichkeit, einen "existierenden" Test mit viel geringeren Kosten durchzuführen.
quelle
Verwenden Sie featureMerger, um die allgemeinen Felder von DATABASE AND INPUT DATA zu verknüpfen und zu gruppieren.
quelle