TechDivision M2IF – Magento 2 Import Framework mit Multithreading

Nicht nur beim initialen Setup eines Shop-Projektes spielen Importe bzw. Importmöglichkeiten eine sehr wichtige Rolle. Unterschiedlichste Produktdaten inkl. Medien wie z.B. Bilder und/oder Videos müssen in den Shop übertragen werden. Gerade bei umfang-reichen Produktsortimenten bzw. einer sehr großen Anzahl an SKUs kann ein solcher Import durchaus eine größere Herausforderungen darstellen.

Magento bietet wie bereits in der Vergangenheit auch in der aktuellen Version einen Importer an, der grundsätzlich macht was er soll. Wenn man jedoch mit einer 6- oder gar 7-stelligen Anzahl an SKUs konfrontiert wird, kann es hier mit Bordmitteln schon zu Problemen kommen – zumindest die Performance ist dann häufig nicht mehr so, wie man sich das gerne wünschen würde.

Bereits in der Vergangenheit gab es hierzu verschiedenste Lösungsansätze und auch wir haben bei unserer Arbeit mit Magento in der Vergangenheit – abhängig von den genauen Anforderungen des Kunden – unterschiedliche Ansätze verfolgt.

Aufgrund der Learnings zahlreicher Magento-Projekte sind wir zur Auffassung gelangt, dass es aus verschiedenen Gründen sinnvoll ist, für Magento 2 ein komplett neues, eigenständiges und extrem leistungsfähiges Import Framework (M2IF) zu entwickeln. Bei der Entwicklung legen wir besonderes Augenmerk auf

  • signifikante Performanceverbesserung
  • geringer Speicherverbrauch
  • einfache Wartung und Erweiterung
  • Unterstützung von Multithreading/Multiprocessing

Aus unserer Sicht sind dies die entscheidenden Faktoren um das Framework auch in größeren Projekten erfolgreich einsetzen zu können.

 

magento2-import-framwork_techdivision

 

Wie bereits zuvor angedeutet, entwickeln wir, im Gegensatz zu bestehenden Ansätze, das M2IF nicht als Magento 2 Extension, sondern als eigenständige Library, die als Ausgangsbasis für eigene Produkte oder Projekte eingesetzt werden kann. Um das M2IF möglichst generisch, leichtgewichtig und somit effizient zu gestalten, haben wir, soweit möglich, auf Abhängigkeiten zu anderen Libraries und Frameworks verzichtet. Stattdessen stellt das M2IF unabhängige Komponenten, z. B. für die verschiedenen Produkttypen zur Verfügung, die je nach Projekt kombiniert und über Composer installiert werden können.

Damit die in großen Projekten zumeist im Überfluss vorhandenen Systemresourcen effizient genutzt werden können, sehen wir insbesondere die Möglichkeit das M2IF auch in einem multithreaded/multiprozess Umfeld verwenden zu können als eine grundlegenden Voraussetzung. Aus der Möglichkeit der Parallelisierung ergeben sich aber auch spezielle Anforderungen, wie z. B. die Synchronisierung von parallel laufenden Tasks, um jederzeit die Kontrolle über den Import-Prozess zu behalten. Auch diese Anforderungen werden wir bei der Entwicklung des M2IF berücksichtigen.

Basierend auf dem M2IF planen wir auf Basis unserer Application-Server-Technologie appserver.io eine Plattform entwickeln, die insbesondere den Import großer Datenmengen optimiert und dafür nochmals eine signifikante Verbesserung der Import-Performance mitbringen wird.

Aktuell kann das M2IF mit dem M2IF Simple Console Tool, einer einfache Kommandozeilen-Implementierung, für den Import von Produktdaten in allen Magento 2 Projekten ab Version 2.1.2, verwendet werden. Das Tool zeigt, wie mit einfachsten Mitteln eine Import-Applikation implementiert kann. Für weitergehende Infos empfiehlt sich ein Blick auf das entsprechende Repository, das wir ebenfalls auf Github veröffentlicht haben.

 

Performance- & Speichervergleich

Performance ist nicht nur im Frontend ein wichtiger Faktor. Insbesondere bei umfang-reicheren Produktkatalogen stellt zudem auch die Importgeschwindigkeit ein sehr wichtiges Leistungskriterium dar um den Katalog in angemessener Zeit mit aktuellen Produktdaten versorgen zu können.

Der nachfolgend skizzierte Performancevergleich zwischen dem Magento Standard-Importer und M2IF sollte dabei lediglich als erste ganz grobe Orientierung dienen. Die von uns gemessenen Werte erheben dabei keinen Anspruch auf allgemeine Gültigkeit. Zudem sollte berücksichtigt werden, dass M2IF aktuell noch nicht den kompletten Funktions-umfang des Standard-Importers abdeckt. Da allerdings die wichtigsten Features bereits enthalten sind, eignet sich der Vergleich um einen ersten Eindruck der Möglichkeiten des M2IF zu erhalten.

Für den Vergleich benutzen wir eine gewöhnliche Magento 2 CE v2.1.2 mit den Magento Beispieldaten. Da M2IF derzeit die Produkttypen „Downloadable“ sowie „Grouped Product“ noch nicht unterstützt, wurden diese aus dem CSV-File entfernt, womit sich die Importdatei wie folgt darstellt:

  • 23 custom attributes
  • 1 bundle product
  • 147 configurable products
  • 1.891 simple products

Diese wurden von uns über den Standard CSV-Export exportiert und in 4 Bunches mit jeweils rund 500 Produkten aufgeteilt. Um den eigentlichen Importprozess zu starten nutzen wir das M2IF Simple Console Tool.

Um den Standard-Import von Magento 2 auszuführen nutzen wir eine einfache M2 Extension, die das Magento 2 Kommandozeilentool erweitert. Diese Extension wurde von CedricBlondeau implementiert und steht auf Github zur Verfügung.

Bevor wir mit dem Import (sowohl Magento 2 als auch M2IF) beginnen, entfernen wir bereits importierte Bilder da der mehrmalige Import der gleichen Images die Performance negativ beeinflusst.

 

Ergebnis

Der Test wurde von uns auf einem MacBook Pro mit den folgenden Leistungsdaten durchgeführt:

  • Intel Core i7 2.3 GHz
  • 8 GB RAM
  • 256 GB HDD

Bei Verwendung von PHP 5.6 + MySQL 5.6.34 wurde dabei folgende Ergebnisse erzielt:

performceboost_m2if_techdivision

 

Neben der Performance stellt die Speichernutzung in manchen Fällen ebenfalls ein wichtiges Kriterium beim Import dar – insbesondere bei Projekten mit mehr als 100.000 Produkten müssen beide Parameter entsprechend berücksichtigt werden.

Wenn wir die Beispieldaten wie oben beschrieben importieren, liegt die maximale Speichernutzung in unserem Test bei 38.1 MB wohingegen der Standard-Import von Magento 149.4 MB benötigt. Dabei ist es im Falle von M2IF irrelevant wie groß die CSV Datei ist.

Wie bereits erwähnt sollte bei diesem ersten Vergleich immer berücksichtigt werden dass einige Funktionalitäten bei uns noch nicht vorhanden sind. Hierzu zählt auch die Datenvalidierung, die Performance kostet.

Dennoch sind wir sehr optimistisch, mit unserem Ansatz auf das „richtige Pferd“ zu setzen.

 

Aktueller Projektstatus

Derzeit befindet sich unser Import Framework im Alpha-Stadium. Daher würden wir dringend empfehlen, unser Tool aktuell noch nicht im Livebetrieb einzusetzen. Den aktuellen Stand haben wir auf Github unter folgendem Link veröffentlicht: https://github.com/techdivision/import

Feedback und Mitarbeit ist dabei natürlich jederzeit gerne gesehen!

Bislang haben wurden von uns die nachfolgenden Funktionalitäten sowohl für Magento 2 EE als auch CE implementiert:

  • Delete/Replace Import Mode
  • Simple Products
  • Configurable Products
  • Bundle Products
  • Product Relations
  • Media Gallery
  • Inventory
  • Relation with existing Categories
  • Relation with existing Websites
  • Url Rewrites

An den folgenden Features arbeiten wir derzeit:

  • Add/Update Import Mode
  • Import Scheduled Product Updates
  • Customizable Options
  • Product Reviews
  • Valididation
  • Fine Grained Error Handling
  • Extended Logging
  • RESTFul Webservice
  • Archiving (vergleichbar mit der Magento Standardfunktionalität)
  • History (angehängt an die standard Magento Import Historie)
  • Seamless Magento 2 Backend Integration
  • Tier Prices

Mit kommenden Versionen unseres M2IF werden wir zudem Importertypen für folgendes bereitstellen:

  • Categories
  • Product Attributes
  • Customers
  • Advanced Pricing

Darüberhinaus planen wir für die Zukunft zudem entsprechende Export-Funktionalitäten.

 

 

 

Kommentar abgeben

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.