Bestandsabgleich über API oder direkt in die DB?

Hallo, da ich mir alles selber erarbeite, und es eigentlich nicht gelernt habe, frage mich hier deshalb ob ich was ich mache, so ok ist. Ich würde die Bestände aus meiner Wawi gerne alle 10 min bei Shopware abgleichen. (Daten liegen immer aktuell in einer mysql Datenbank bereit) Direkt in die Datenbank klappt wunderbar und schnell. Nun dachte ich mir das ich das über die Rest-Api mache, und gleich noch die Beschreibung und Name mit aktualisiere. Der Code funktioniert auch. Es erscheint mir aber extrem langsam, und wenn ich das wirklich alle 10 min per Cronjob machen würde, würde die Api vermutlich dauernt arbeiten. Es handelt sich hier um ca 300 Produkte. Laufzeit dafür aktuell ca 145 sec. Die Daten aus der Wawi habe ich in nichtmal 0,02 Sekunden im Array. Oder ist mein Code mist? :wink: Danke für eure Hilfe. Simon $i = 0; //hier hole ich die aktuelle Daten aus unserer WaWi $sql = "SELECT \* FROM Daten"; $ergebnis = mysqli\_query($db, $sql); while($zeile = mysqli\_fetch\_array($ergebnis)) { $anr[$i] = $zeile[ANR]; $ekpreis[$i] = $zeile[EKPREIS]; $realbestand[$i] = $zeile[REALBESTAND]; $name[$i] = $zeile[NAME]; $setartikel[$i] = $zeile[SETARTIKEL]; $verfuegbarer\_bestand[$i] = $zeile[VERFUEBARER\_BESTAND]; $vkpreis[$i] = $zeile[VKPREIS]; $bild1[$i] = $zeile[BILD1]; $zeit[$i] = $zeile[ZEIT]; $abid[$i] = $zeile[ABID]; $beschreibung[$i] = $zeile[BESCHREIBUNG]; //Abfrage direkt in der Shopware-Datenbank, ob der Artikel vorhanden ist. // geht auch über die API,(success-Abfrage) ist mir aber zu langsam. $sql\_shop = 'SELECT `ordernumber`,`id` FROM `s_articles_details` WHERE `ordernumber` = '.$anr[$i].''; $ergebnis\_shop = mysqli\_query($db\_shop, $sql\_shop); while($zeile = mysqli\_fetch\_array($ergebnis\_shop)) { $ordernumber[$i] = $zeile[ordernumber]; $id[$i] = $zeile[id]; } if (isset($ordernumber[$i])) { //echo " Gibt es: ".$ordernumber[$i]." ".$id[$i].".";//Testausgabe //Aktualisierung der Daten $client-\>put("articles/$id[$i]", array( 'name' =\> $name[$i], 'descriptionLong' =\> $beschreibung[$i], 'mainDetail' =\> array( 'inStock' =\> $verfuegbarer\_bestand[$i] ) )); } else { echo " Artikel mit der Artikelnummer: ".$anr[$i]." muss angelegt werden"; } $i++; }

Jedes einzelne Update ist teuer - und die API Speicher jeden Artikel seperat. Der Vorteil: dritt Anbieter können sich mit an die API hängen. Ansonsten kannst du auch einfach die einzelnen Models updaten und am Ende ein flush() ausführen Gesendet von meinem iPhone mit Tapatalk

Hallo, danke. Was meinst du mit: [quote]Jedes einzelne Update ist teuer[/quote]?? Mit Models müsste ich mit der OOP arbeiten, hier fehlt mir die Erfahrung, oder ich weiss hier auch nicht was du meinst :slight_smile: Versuche aber hier mit Beispiel Code aus dem Forum mir das zu erarbeiten. Ich habe das jetzt mit dem Batch Modus gemacht: WIKI-API Dadurch konnte ich die Zeit auf ca 4,5 Sec für ca 300 Artikel kürzen. Grüße aus Verl, Simon

Hi, das mit dem Batch-Modus wäre auch mein Tipp gewesen, wenn das für dich gut skaliert, spricht nichts dagegen, das über die API zu machen. lG Daniel

1 „Gefällt mir“