Magentos SOAP-Schnittstelle ist Segen und Fluch zugleich: einerseits ermöglicht sie externen Systemen einen einfachen Zugriff auf den Webshop, andererseits sorgt sie bei Entwicklern aufgrund fehlender Funktionalitäten und vor allem der verbesserungsfähigen Performance immer wieder für munteres Hirnwinden. Magento hat neulich angekündigt, in beiderlei Hinsicht nachzulegen (mehr dazu im Ausblick auf Magento 1.5), doch bis dahin muss man mit der aktuellen API auskommen.

Mit Magento 1.4 bietet das Backend die Möglichkeit, das automatische Index-Management zu deaktivieren. Da ich mir immer schon dachte, dass sich die ständige Neuindizierung nicht positiv auf die Geschwindigkeit des Produktimports auswirken kann, war ich gespannt, welche Unterschiede sich durch die neue Option ergeben. Dieses Wochenende habe ich mir schließlich Zeit genommen, um ein paar grundlegende Tests durchzuführen.

Wer auf das Drumherum verzichten will, kann direkt zum Fazit springen. :)

Inhalt

Ziel

Ich wollte die Frage klären:

Wie wirken sich die Aktivierung bzw. Deaktivierung des Caches und des automatischen Index-Managements auf die Geschwindigkeit des Produkt-Imports via SOAP-API aus?

Je nach Hardware-Setup, Konfiguration und Produktdaten sind die Unterschiede natürlich gravierend, weswegen sich aus den Ergebnissen nur Tendenzen ablesen lassen werden.

Setup

Als Hardware musste der folgende Rechner herhalten:

KomponenteSpezifikation
CPUIntel Core2 Q6600 @ 2.40Ghz
RAM4GB DDR2-800
HDDWestern Digital Caviar Blue, SATA II at 7200rpm, Betrieb im RAID1-Verbund

Das Wirtsystem ist Windows XP Professional SP3. Auf diesem laufen Antivirus-Programm und Software-Firewall (ich will mir doch nichts einfangen ;) ). Darauf läuft mittels Oracle VM VirtualBox 3.2.10 folgendes Gastsystem:

KomponenteVersion
BetriebssystemDebian 5.0.6 ("Lenny")
virtualisiert mit Oracle VM VirtualBox 3.2.10
WebserverApache 2.2.9
DBMS (Datenbank)MySQL 5.0.51a-24
PHPPHP 5.2.6-1

Dem Gastsystem werden 4 Prozessoren und 1,5 GB RAM zugestanden. Es handelt sich um eine Debian-Standardinstallation mit den aktuellen Stable-Packages. Die Konfiguration von Webserver, Datenbank etc. wurde nicht verändert.

Shop & Daten

Getestet wird Magento 1.4.1.1 in der Version Community Edition. Für den Cache wird das Dateisystem verwendet.

Pro Test werden über die SOAP-API v1 1.000 simple Produkte mit dem Standard-Attributset angelegt. Die Produkte werden zufällig einer von fünf Kategorien zugeordnet. Bilder werden nicht importiert.

Die Produktdaten sind so simpel wie möglich gehalten, damit das Produkt gültig angelegt wird:

ProduktdatenWerte
KategorieZuordnung zu einer von fünf Kategorien
WebsiteZuordnung zur Main-Website
Name"Produktname" (statischer Text)
Kurzbeschreibung"Kurzbeschreibung" (statischer Text)
Beschreibung"Beschreibung" (Statischer Text9
Preis9.99
Gewicht0
LagerverwaltungArray mit den folgenden Werten:
qty: 1
is_in_stock: 1
use_config_manage_stock: 1
Status1 (aktiviert)
SteuerklasseZufällige Zuordnung zu einer der vorhandenen Steuerklassen
SichtbarkeitKatalog, Suche

Ablauf

Vier Konfigurationen werden getestet:

  • Test 01:
    • Cache-Management: Disabled
    • Index-Management: Update on Save
  • Test 02:
    • Cache-Management: Disabled
    • Index-Management: Manual Update
  • Test 03:
    • Cache-Management: Enabled
    • Index-Management: Update on Save
  • Test 04:
    • Cache-Management: Enabled
    • Index-Management: Manual Update

Wie erwähnt werden pro Test 1.000 Produkte über die SOAP-API in Version 1 erzeugt. Die benötigte Zeit wird für jedes Produkt einzeln protokolliert. Nach jedem Testlauf werden die Ergebnisse exportiert und der Sicherungspunkt des Images vor dem Testlauf wiederhergestellt. Damit hat jeder Lauf dieselben Ausgangsbedingungen.

Die Testreihe wurde 2-mal durchgeführt (an unterschiedlichen Tagen, mit Neustart) und die Ergebnisse zusammengeführt. Damit sollten Seiteneffekte, die durch das Wirtsystem entstehen, vermindert werden.

Ergebnisse

TestDurchschnittStandardabweichungMinimum1. QuartilMedian3. QuartilMaximum
Test 011,1330,0830,9321,1081,1371,1562,117
Test 020,8580,0410,7300,8450,8620,8811,094
Test 030,7730,0380,6920,7520,7670,7871,184
Test 040,6110,0540,4940,5570,6320,6440,926

Der Durchschnittswert (= arithmetisches Mittel) zeigt uns: die Optionen bei Cache- und Index-Management wirken sich beträchtlich auf die Geschwindigkeit des Imports aus.

  • In Test 01 ist das Caching deaktiviert und die automatische Indizierung aktiviert. Das Testsystem benötigt 1,133 Sekunden pro Produkt.
  • Bei Test 02 wird die automatische Indizierung deaktiviert. Siehe da, der Import benötigt nur noch 0,858 Sekunden. Das entspricht einem Minus von 24,27 Prozent! Der Import läuft beinahe um ein Viertel schneller ab.
  • Wird wie in Test 03 stattdessen das Caching aktiviert, sinkt die durchschnittliche Zeit auf 0,773 Sekunden. Wir ersparen uns 31,77 Prozent der Zeit, der Import dauert ca. ein Drittel kürzer als bei der Standardeinstellung.
  • In Test 04 kombinieren wir die Einstellung: die automatische Indizierung ist deaktiviert, das Caching aktiviert. Jedes Produkt wurde durchschnittlich in 0,611 Sekunden eingefügt. Wir sparen uns somit 46,07 Prozent der Importdauer – nicht schlecht, wenn man bedenkt, dass die Konfigurationsänderung in einer halben Minute erledigt ist.

Die Standardabweichung zeigt, dass sich die Schwankungen beim Import in Grenzen halten. Wir können uns die obigen Kennzahlen in einem Boxplot ansehen, da die Zahlen so wesentlich anschaulicher werden:

Die Whisker (= Striche) zeigen in diesem Fall den schnellsten bzw. langsamsten Import. Da einzelne Ausreißer (wie z.B. bei Test 01) das Bild dadurch etwas verzerren, orientieren wir uns lieber an den Boxen. Die Box repräsentiert die mittleren 50 Prozent der Produkt-Inserts. In diesem Bereich liegt die Import-Geschwindigkeit die Hälfte der Zeit. Auch hier sieht man, dass das Caching einen größeren Vorteil als die manuelle Indizierung bringt, man aber nach Möglichkeit beide Einstellungen vornehmen sollte. Gerade für den initialen Import bzw. die Entwicklung bietet sich das an.

Fazit

Wir haben getestet, wie sich die Einstellungen des Index- und Cache-Managements in Magento 1.4.1.1 auf den Import simpler Produkte via SOAP-API auswirken. Die wichtigsten Erkenntnisse:

  • Der Import mit manueller Indizierung spart ca. 25% der Zeit.
  • Der Import mit aktiviertem Caching spart ca. 33% der Zeit.
  • Der Import mit manueller Indizierung und aktiviertem Caching spart fast 50% der Zeit.
  • Wenn möglich sollte man beide Einstellungen vornehmen. Das bietet sich v.a. beim initialen Produktimport an, wenn der Shop noch nicht im Livebetrieb ist. Bei der manuellen Indizierung darf man nicht vergessen, nachher die Reindizierung anzustoßen!

Falls jemand von euch ähnliche Tests vorgenommen hat, bin ich sehr an den Ergebnissen interessiert. Wie verhält sich der Import mit realitätsnahen Daten, größeren Datenbeständen und/oder Optimierungen der Server-Konfiguration? Wie groß ist der Unterschied zwischen verschiedenen Magento-Versionen? Da nur Gott weiß, wann ich Zeit für ausführliche Tests finde, wäre es toll, wenn das schon jemand für mich erledigt hat. ;)

Ähnliche Artikel