Data Director: Enorme Leistungsverbesserung in Version 3.0

Paul Vetter

Text & Konzept

19 May 2022 Digital Agentur Pimcore

Mit Version 3.0 macht Blackbit einen großen Schritt und stattet den Data Director mit einer effizienteren Speichermethode aus, durch die Importe deutlich schneller sind als mit der Standard-Speicherlogik von Pimcore.

Blackbit veröffentlicht Version 3.0 des Data Directors für Pimcore

Neue, ressourcensparende Speichermethode

Die Standard-Speichermethode von Pimcore ist aus Performance-Sicht nicht optimal, da sie nicht nur die geänderten Daten speichert, sondern jeden Aspekt aller Klassenfelder neu berechnet: Alle Felder werden auf Gültigkeit geprüft, Abhängigkeiten werden jedes Mal neu berechnet usw. Selbst wenn Sie also nur ein einziges Eingabefeld ändern, werden alle diese Verarbeitungsschritte durchgeführt.

Darum bringt der Data Director 3.0 einen eigenen Speichermechanismus mit, der nur die Daten speichert, die sich wirklich geändert haben. Dieser effizienz-optimierte Prozess der Speicherung bringt eine Leistungssteigerung von etwa 200 %.

Da es sich hierbei um eine große Änderung handelt, werden nach dem Upgrade auf Version 3.0 alle bestehenden Dataports auf einen so genannten "Kompatibilitätsmodus" eingestellt. Das bedeutet, dass sie zunächst weiterhin den alten Speichermechanismus verwenden, um das Risiko vieler nicht funktionierender Dataports zu verringern. Sie können den "Kompatibilitätsmodus" in den erweiterten Einstellungen für Dataports deaktivieren. Bei neuen Dataports wird der "Kompatibilitätsmodus" automatisch ausgeschaltet, um eine optimale Leistung zu gewährleisten.

Effizienteres Laden von Daten der neuesten Version

Um zu prüfen, ob sich ein Objekt während des Imports geändert hat, wurde bisher die letzte Objektversion geladen. Da die Versionen jedoch serialisiert im Dateisystem gespeichert werden, ist dieser Vorgang recht aufwändig. In Version 3 werden nun die alten Werte gemappter Importfelder gelesen, bevor sie geändert werden – somit wird das ressourcenaufwändige Laden der Versionen überflüssig.

Parametrisierung von Datenport-Läufen

Sie können nun alle Elemente eines Dataports parametrisieren:

  • Zugriffs-URL / CLI-Parameter in Data Query Selektoren von Pimcore-basierten Dataports, z.B. image:thumbnail# gibt den Thumbnail-Pfad der Thumbnail-Definition "500px" zurück, wenn der Dataport über die URL /api/export/dataport-name?format=500px aufgerufen wird
  • Zugriff auf URL-/CLI-Parameter in Callback-Funktionen über . Dadurch kann z.B. das Ausgabeformat eines Exports festgelegt werden.
  • Zugriff auf URL / CLI-Parameter in Import-Ressource / SQL-Bedingung (existiert seit Version 2.6)

Es ist jetzt auch möglich, auf Felder der Quelldatenklasse in Data Query Selektoren von Pimcore-basierten Datenports zuzugreifen. Wenn Sie z.B. den Data Query Selektor myMethod# haben, wird automatisch die Artikelnummer des aktuellen Quelldatenklassen-Objekts verwendet (solange kein URL-Parameter "artikelnummer" dies überschreibt). Auch Serviceklassen können Sie somit mit Parametern aufrufen: @service_name::method#2922 ruft die Methode "method" eines Symfony-Services "service_name" mit der id des aktuellen Quellklassenobjekts auf.

Import in Calculated-Value-Felder

Es ist nun möglich, Daten in Calculated-Value-Felder zu importieren, ohne extra eine PHP-Klasse für die Berechnungslogik erstellen zu müssen. Dies kann auf alle Daten angewendet werden, die nur zur Anzeige, aber nicht zur Bearbeitung verwendet werden sollen, wie z.B. zur Visualisierung der Datenqualität.

Rohdaten im Pimcore-Bericht anzeigen

Version 3.0 liefert einen Berichtsadapter für Dataport-Rohdaten. Dieser hat zwei Hauptanwendungsfälle:

  1. Rohdaten zwischen mehreren Dataports wiederverwendbar machen,
  2. Erstellung von Berichten vereinfachen, da keine SQL-/Pimcore-Datenbankkenntnisse erforderlich sind

Verhindern von doppelten Assets

Mit einer einzigen Checkbox ist es nun möglich, Assets nur dann zu erstellen, wenn sie noch nicht vorhanden sind. Dies funktioniert sogar, wenn die Asset-Bilder unterschiedliche Dateinamen oder unterschiedliche Bildgrößen haben.

UI-Änderungen

Dataport-Einstellungen

  • Verbesserung der Autovervollständigung für Data Query Selektoren
  • Sortierung der vorgeschlagenen Data Query Selektoren nach Levenshtein-Distanz zum gewünschten Datenabfrage-Selektor -> relevantere Sortierung
  • beim Erstellen von Dataports wird der Dataport-Namen analysiert, um den Dataport-Quelltyp + Quell-/Zielklasse festzulegen

Attribut-Zuordnung

  • Sprache von lokalisierten Feldern wird als Flag angezeigt, um die Sprache des lokalisierten Feldes besser zu erkennen
  • Visualisierung von Abhängigkeiten beim Klicken auf ein Attribut-Mapping-Feld
  • Beschleunigung der Generierung von Callback-Funktionsvorlagen
  • Aktualisierung der Vorschau abhängiger Felder beim Aktualisieren der Callback-Funktion
  • Callback-Funktionsfenster maximierbar

Verlaufspanel

  • Unterstützung der Suche nach dem Namen der Dataport-Logdatei, um den Zugriff auf die Importarchivdatei zu erleichtern
  • Formatierung des Startdatums gemäß dem aktuellen Gebietsschema des Benutzers (abgeleitet von der Spracheinstellung des Benutzers)
  • Es öffnet sich kein neues Fenster, wenn die Ergebnis-Callback-Funktion keine Ausgabe erzeugt (z. B. bei Importen, die einen abhängigen Import aufrufen)

Rohdatenextraktion/Data Query Selektoren

  • Es wird eine Warnung ausgelöst, wenn CSV-/Excel-Datei mehrfach dieselbe Spaltenüberschrift enthält.
  • Unterstützung des ":url"-Datenabfrage-Selektors für Assets und Bildfelder, um die absolute URL des/der zugeordneten Assets zu erhalten.
  • Unterstützung der Suche nach Reverse-Relationen über Category:products:, wenn die Category-Klasse die Beziehung zu Produkten verwaltet und die Quelldatenklasse des Exports Product ist.
  • Unterstützung von "ancestors" / "descendants" in Data Query Selektoren, um alle Objekte über / unter dem aktuellen Objekt zu erhalten.
  • Unterstützung der Filterung von Arrays in Datenabfrage-Selektoren, z.B. kann eine Many-to-Many-Beziehung nach Kategorien mit categories:filter#published,true gefiltert werden, um nur die veröffentlichten verwandten Kategorieobjekte zu erhalten.
    Ein weiterer Anwendungsfall ist, wenn Sie eine Feldsammlung von Preisen und deren Gültigkeitsdaten haben, können Sie prices:filter#validFrom,now,>=:filter#validTo,now,<= verwenden, um alle Feldsammlungselemente zu erhalten, die heute gültig sind.
  • Unterstützung von "withInheritance" / "withoutInheritance"-Helferfunktionen zum Aktivieren / Deaktivieren der Vererbung für einzelne Data Query Selektoren
  • Unterstützung von Suffix-Aliasen in Data Query Selektoren, z.B. (scalar;object:scalar) als group1

Verarbeitung von Rohdaten

  • Bereitstellung von $params['transfer'] auch für Feld-Callback-Funktionen
  • Unterstützung der Suche nach relationalen Objekten über einen Unique-Index: Es muss kein Data Query Selektor "Hersteller:Name:".$params['Wert'] zurückgegeben werden, wenn das Feld "Name" in der Klasse "Hersteller" eindeutig ist. Hier genügt es, den Herstellernamen als Rohdatenfeld zuzuweisen.
  • Unterstützung der Suche nach mehreren Objekten über Data Query Selektoren
  • Streaming von Ergebnisdokumenten hält den Speicherverbrauch auch bei der Erzeugung großer Exportdokumente gering (derzeit nur für CSV implementiert).
  • Bugfix: Objektschlüssel war nicht gültig, wenn der Schlüssel 255 Zeichen lang war und ein Objekt mit demselben Schlüssel bereits existierte. Die Länge des Suffixes wird nun subtrahiert, um wieder auf 255 Zeichen zu kommen.
  • Neue Option zur automatischen Erstellung von Classification Store Feldern hinzugefügt
  • Unterstützung der automatischen Texterstellung über OpenAI API
  • Unterstützung der Sprachzuordnung zum Übersetzungsanbieter, z.B. um en-gb als Zielsprache für "en" zu verwenden.
  • Beim Neustart von Dataport-Läufen aufgrund eines unbeabsichtigten Abbruchs wird geprüft, ob Dataport fortgesetzt werden kann: Nicht-inkrementelle Exporte können nicht fortgesetzt werden und müssen komplett neu gestartet werden. Importe und inkrementelle Exporte können, wie bisher, fortgesetzt werden.
  • Unterstützung der Zuweisung von Elementen zu Asset-Metadaten (bisher wurde nur der Typ "input" unterstützt).
  • Bugfix: Verarbeitung von virtuellen Feldern, die in Schlüsselfeldern verwendet werden

Weitere Änderungen

  • Rohdaten werden in Paketen gelöscht, da umfangreiche Löschvorgänge sonst zu viel Zeit beanspruchen.
  • Umstrukturierung des Loggings, um Speicherkapazitäten effizienter zu nutzen.
  • spatie/once wird entfernt, da dies viele unnötige debug_backtrace() Aufrufe verursachte.
  • Logs im Application Logger werden gruppiert: Bestimmte Meldungen werden nur einmal aufgeführt und mit einem Häufigkeitsindex versehen, z.B. "happened 3x".
  • Der Data Query Selektor Product:articleNo:.:name#de zur Ermittlung des aktuellen Feldwerts "articleNo" wird nicht mehr unterstützt. Denn dieser Datenabfrage-Selektor soll Produkte mit articleNo=“.“ finden. Sie können $params['currentObjectData']['articleNo'] verwenden, um den aktuellen Wert des Feldes „articleNo“ zu erhalten.
  • Automatische Korrektur von falsch konfigurierten Standard-Zeitzonen zwischen Webserver-PHP und CLI-PHP, indem Daten immer in UTC gespeichert werden. Andernfalls könnten Dataport-Läufe abgebrochen werden, weil sie zu lange dauern, oder es werden negative Laufzeiten im History-Panel angezeigt usw.
  • Behoben: Benachrichtigungsmail über Warteschlangenprozessor, der nicht gestartet werden konnte, wurde auch gesendet, wenn der Warteschlangenprozessor gestartet, aber in weniger als 5 Sekunden beendet wurde.
  • Automatisches Neuladen von Elementen, wenn diese durch automatische Importe nach dem Speichern verändert wurden.
  • Überspringen der Hash-Prüfung für pimcore-basierte Importe
    Anwendungsfall: Automatischer Import, der published auf der Grundlage einer bestimmten Logik von Rohdatenfeldern setzt.
    • 1. Durchlauf: Objekt wird veröffentlicht -> Import-Logik setzt published auf false -> Hash der Rohdaten wird gespeichert -> Objekt wird gespeichert & ohne Änderungen erneut veröffentlicht
    • 2. Durchlauf: Rohdaten sind gleich -> aber published wurde geändert -> wir müssen Dataport erneut ausführen, sonst wird das Objekt publiziert, obwohl die published-Logik es unveröffentlichen würde.
  • Unterstützung verschiedener Anfragekontexte, um das Verhalten von überschriebenen Getter-Methoden ändern zu können.
  • Beim Umbenennen von Dataports verweisen alle Redirects für alte REST API Endpunkt-URLs dieses Dataports auf neue URL. Dies verhindert Weiterleitungs-Ketten.
  • Bugfix: Es wird keine Edit-Lock Nachricht mehr ausgelöst, wenn der aktuelle Benutzer ein Objekt gerade gespeichert hat.
  • Ergebnisdokument-Aktion "als Mail senden" unterstützt den Versand von Antwortdokumenten als Anhang.
  • Behoben: Automatischer Start funktionierte nicht bei Excel-Importen.
  • Effizienteres Löschen von temporären Dateien nach jedem Rohdaten-Block. Denn standardmäßig werden sie nur gelöscht, wenn der gesamte Prozess beendet ist, was eine Menge Speicherplatz verschwendet.
  • Bugfix: Bereinigung der Logdateien des Anwendungsloggers funktionierte nicht korrekt.
  • Loggen des Benutzers, der den Dataport-Lauf gestartet hat.
  • Entfernen der automatischen Einstellung, dass manuell hochgeladene Dateien die "Standard"-Datenport-Ressource verwenden sollen. Stattdessen wird eine separate Ressource für die hochgeladene Datei erstellt. Folge: Wenn ein Datenport mit derselben Datei ausgeführt wird, wird die vorherige Datei überschrieben und der Dateiname im History-Panel anstelle der generierten uniqid() angezeigt.
  • Es werden nicht mehr mehrere Rohdatenelemente in einer Datenbanktransaktion verarbeitet, da ein Problem mit einem Element sonst auch den Import aller anderen Elemente derselben Transaktion verhindert.

Blackbit Data Director auf YouTube

Kennen Sie schon unsere Video-Tutorials rund dem Data Director? Für nützliche Tipps und detailgenaue Anwendung besuchen Sie Blackbit auf YouTube!

Noch Fragen?

Sie sind neugierig geworden und möchten unseren Data Director gerne genauer kennenlernen? Sprechen Sie uns jetzt an und wir zeigen Ihnen in einer gratis Demo, welche Möglichkeiten der Data Director Ihnen eröffnet.

Über den Autor

Mal kreative, mal ganz trocken sachliche Kunden- und zielgruppengerechte Texte & Konzepte auf die Beine stellen und das Self-Marketing von Blackbit schärfen – das ist Pauls Welt. Egal ob on- oder offline, für den Blog, in schnell drehenden Social Media oder für Corporate Publishing von Bestand.

Auch privat ist Content King: Als Papa, Foodie und Fitnessjunkie füttert Paul den Instagram Feed auch von Zuhause aus unermüdlich. #liebezumlöffeln