Hallo zusammen, ich habe ein recht seltsames Problem:
Ich habe ein Script geschrieben, welches von einem externen Webdienst Artikel herunterlädt, in einer MySQL-Tabelle speichert, und anschliessend AJAX-mäßig an den Client überträgt.
Da das ganze aufgrung einer hohen Anzahl an Calls an den Webdienst (teilweise über 100 Stück) relativ lange dauern kann, habe ich eine Möglichkeit zum Status-Update erstellt: Jedesmal, wenn Artikel bei meinem Script ankommen, wird der Status aktualisiert, indem nachgesehen wird, wieviele Artikel jetzt insgesamt da sind, und wie viele gebraucht werden - Das alles natürlich nachdem die Artikel in die Datenbank geschrieben wurden. Der Client fragt über AJAX ständig den Status ab, welcher hübsch in Form eines Balkens angezeigt wird, und holt, sobald er bei 100% angekommen ist, die Artikel vom Server ab.
So, und jetzt zu meinem Problem: Der Status ist jedesmal schon bei 100% bevor alle Artikel angekommen sind. Bei wenigen Calls an den Webdienst (in meinem Fall nur einer) bekommt der Client somit manchmal garkeine Artikel, und manchmal nur einen Teil davon. Ich habe dem Client daher daher jedesmal einen timestamp mitgeschickt (ich weiß, ist nicht unbedingt Debugging der Königsklasse), und dabei folgendes bemerkt:
Status-Update: [...] 614.6392 Sekunden (Ausgabe kurz bevor der Query abgeschickt wurde)
Beim Client Status=100%: [...] 612.2205 Sekunden (also 2 Sekunden vor dem Status-Update)
Artikel-Abholung vom Client: [...] 612.462 Sekunden (folgerichtig kurz nachdem Status=100% beim Client angekommen ist. Allerdings werden keine Artikel übertragen)
Das alles muss irgendwie damit zu tun haben, dass für das Status-Update und die Status-Abfrage vom Client natürlich zwei unterschiedliche Datenbankverbindungen genutzt werden, und die Datenbankverbindung 1, die auch das Einfügen der Artikel übernimmt, noch nicht geschlossen wurde. Auch die satten 2 Sekunden Zeitverzögerung kann ich mir einfach nicht erklären, ich steh also echt aufm Schlauch...
Daher meine Frage an die MySQL-Experten unter euch: Woran kann es liegen, dass ein Datenbankeintrag über 2 Sekunden bevor er eigentlich gemacht werden sollte, ausgeführt wird? Und was kann man dagegen tun?
PS: Es liegt übrigens nicht an meinem Script. Ist mir natürlich auch schon in den Sinn gekommen, dass da irgendwo vorher am Status rumgepfuscht wird. Deshalb habe ich die Tabellenspalte einfach umbenannt - mit dem gleichen Ergebnis...
Ich habe ein Script geschrieben, welches von einem externen Webdienst Artikel herunterlädt, in einer MySQL-Tabelle speichert, und anschliessend AJAX-mäßig an den Client überträgt.
Da das ganze aufgrung einer hohen Anzahl an Calls an den Webdienst (teilweise über 100 Stück) relativ lange dauern kann, habe ich eine Möglichkeit zum Status-Update erstellt: Jedesmal, wenn Artikel bei meinem Script ankommen, wird der Status aktualisiert, indem nachgesehen wird, wieviele Artikel jetzt insgesamt da sind, und wie viele gebraucht werden - Das alles natürlich nachdem die Artikel in die Datenbank geschrieben wurden. Der Client fragt über AJAX ständig den Status ab, welcher hübsch in Form eines Balkens angezeigt wird, und holt, sobald er bei 100% angekommen ist, die Artikel vom Server ab.
So, und jetzt zu meinem Problem: Der Status ist jedesmal schon bei 100% bevor alle Artikel angekommen sind. Bei wenigen Calls an den Webdienst (in meinem Fall nur einer) bekommt der Client somit manchmal garkeine Artikel, und manchmal nur einen Teil davon. Ich habe dem Client daher daher jedesmal einen timestamp mitgeschickt (ich weiß, ist nicht unbedingt Debugging der Königsklasse), und dabei folgendes bemerkt:
Status-Update: [...] 614.6392 Sekunden (Ausgabe kurz bevor der Query abgeschickt wurde)
Beim Client Status=100%: [...] 612.2205 Sekunden (also 2 Sekunden vor dem Status-Update)
Artikel-Abholung vom Client: [...] 612.462 Sekunden (folgerichtig kurz nachdem Status=100% beim Client angekommen ist. Allerdings werden keine Artikel übertragen)
Das alles muss irgendwie damit zu tun haben, dass für das Status-Update und die Status-Abfrage vom Client natürlich zwei unterschiedliche Datenbankverbindungen genutzt werden, und die Datenbankverbindung 1, die auch das Einfügen der Artikel übernimmt, noch nicht geschlossen wurde. Auch die satten 2 Sekunden Zeitverzögerung kann ich mir einfach nicht erklären, ich steh also echt aufm Schlauch...
Daher meine Frage an die MySQL-Experten unter euch: Woran kann es liegen, dass ein Datenbankeintrag über 2 Sekunden bevor er eigentlich gemacht werden sollte, ausgeführt wird? Und was kann man dagegen tun?
PS: Es liegt übrigens nicht an meinem Script. Ist mir natürlich auch schon in den Sinn gekommen, dass da irgendwo vorher am Status rumgepfuscht wird. Deshalb habe ich die Tabellenspalte einfach umbenannt - mit dem gleichen Ergebnis...