Import-Geschwindigkeit von Artikeln in Magento (1)

Import-Geschwindigkeit von Artikeln in Magento (1)

Viele Webshops werden durch externe Systeme mit Produktdaten versorgt. Zum Beispiel kann ein ERP- oder PIM-System zum Einsatz kommen, also eine Warenwirtschaft oder ein Tool zur Verwaltung von Produktinformationen. Die Daten werden – je nachdem, welche Methode von den eingesetzten Programmen unterstützt wird – über verschiedene Wege in Magento importiert. Wer schon einmal einen größeren Produktkatalog importieren musste, weiß: Die Performance kann stark variieren und je nach Übertragungsart inakzeptabel langsam ausfallen. Ich werde in diesem Artikel ein wenig aus dem Nähkästchen plaudern und ein paar Tipps geben, mit denen ihr die Leistung des Produktimports verbessern könnt.

  1. Welches Format hätten’s denn gern?
  2. Shop- und Server-Konfiguration optimieren
  3. Automatische Indizierung während des Imports deaktivieren
  4. Nur benötigte Daten übermitteln
  5. Über den Autor
  6. Links

Welches Format hätten’s denn gern?

Es gibt verschiedene Möglichkeiten, Produktdaten zu importieren:

  • Magento-Backend
    • CSV-Dateien-Import
  • Web Services
    • SOAP Version 1
    • SOAP Version 2
    • XML-RPC
    • REST
  • Spezial-Lösungen
    • Erstellung einer eigenen Extension: Import von Daten über Magento-Models oder SQL-Queries
    • Verwendung von fremden Extensions

Die Entscheidung für einen Übertragungsweg hängt von mehreren Kriterien ab:

  1. Wie werden die Daten importiert bzw. aktualisiert (automatisch oder manuell)?
  2. Welche Übertragungswege sind für das exportierende System technisch umsetzbar?
  3. Welche Funktionalitäten werden benötigt?
  4. Was sind die Performance-Ansprüche an die Schnittstelle?

 

In realen Projekten wird die Auswahl bereits durch die ersten drei Punkte eingeschränkt:

1
Zumeist werden Daten automatisch übertragen, entweder in periodischen Intervallen oder ausgelöst durch bestimmte Aktionen im Quellsystem.
2

Viele Systeme unterstützen das eine oder andere Format nicht bzw. können es nur unter unverhältnismäßigem Aufwand implementieren.

3

Leider bildet nicht jeder Übertragungsweg in Magento denselben Funktionsumfang ab. Zum Beispiel beherrscht die REST-Implementierung von Magento CE 1.7 bzw. EE 1.12 Dinge nicht, welche von der SOAP-Schnittstelle unterstützt werden. Beim Import-/Export-Modul wird nicht die gesamte Business-Logik des Models ausgeführt, sodass dynamische Berechnungen von Produkt-Attributen möglicherweise nicht angewendet werden.

 

Daher beschäftigen wir uns im ersten Schritt mit allgemeinen Performance-Tipps. Später beschäftigen wir uns mit der schnellsten Methode für den Fall, dass wir eine Wahl haben.

Shop- und Server-Konfiguration optimieren

Die erste Regel lautet: Was hilft, den Shop für den Kunden schneller zu machen, verbessert auch die Import-Geschwindigkeit.

Dazu zählen unter anderem das Aktivieren des Cachings, die Verwendung eines schnellen Cache-Backends wie APCu, der Einsatz eines Byte-Code-Caches wie OpCache, sowie das Tuning der Webserver- und Datenbankserver-Parameter uvm. Der Einsatz aktueller Software steigert normalerweise zusätzlich die Geschwindigkeit.

Details dazu findet ihr in weiteren Artikeln dieser Ausgabe bzw. in diversen Beiträgen im WWW.

Automatische Indizierung während des Imports deaktivieren

Normalerweise ist Magento so konfiguriert, dass Änderungen automatisch neu indiziert werden. Das heißt, dass Magento Daten in bestimmte Tabellen dupliziert, um später schneller darauf zugreifen zu können.

Schneller ist es, diese Automatik während eines Imports mehrerer Produkte zu deaktivieren und nach dem Ende des Imports eine manuelle Reindizierung durchzuführen. Ist der Shop bereits im Live-Betrieb, dann sollten die Auswirkungen auf den Shop während eines Imports zuerst in einem Test-System überprüft werden. Falls die Nebenwirkungen vernachlässigbar sind, kann dieser Schritt zu beträchtlichem Performance-Gewinn führen (siehe [1] für einen bereits etwas älteren Test zum Thema bzw. den Benchmark weiter unten).

Mit Enterprise Edition 1.13 wurde die Indizierung der Inhalte grundlegend überarbeitet [2]. Dadurch soll die Performance stark gesteigert worden sein. Da diese Version noch nicht zur Verwendung empfohlen wurde, kann ich aber noch keine Aussage zur Auswirkung auf die Import-Geschwindigkeit machen.

Nur benötigte Daten übermitteln

Besonders bei Produktaktualisierungen ist man versucht, einfach alle Daten an das Shop-System zu übermitteln. Somit entstehen natürlich größere Datenmengen, die übertragen werden. Außerdem muss Magento jede einzelne Information in der Datenbank ablegen. Ändert sich zwischen Updates nur ein kleiner Teil der Daten, dann wird der Import unnötig verlangsamt.

Übermittlung-benötigter-Daten

Wenn möglich sollte das exportierende System daher erkennen, welche Änderungen durchgeführt werden und nur diese Informationen an den Webshop übermitteln („Delta-Update“). Die Laufzeit des Imports kann dadurch stark verkürzt werden.

Neben den normalen Produktattributen sind besonders Bilder und Kategorie-Zuordnungen Kandidaten für Informationen, die unnötig mehrmals aktualisiert werden und viel Zeit kosten.

Nächste Woche geht es weiter mit den verschiedenen Webservice Varianten: SOAP Version 1 und 2.

Über den Autor

Matthias Zeis ist Magento Certified Developer und beschäftigt sich seit 2009 mit Magento. Er lebt in Wien und arbeitet bei LimeSoda als Entwickler und technischer Projektleiter.

[2]

[3]

Kommentar hinzufügen