[FRAGE] AJAX-Scripte blockieren sich einander. Normales Verhalten???

thordirk

New member
Hi Leute!

Ich hab mal eine Verständnis-Frage.

Damit eure grauen Zellen nicht überstrapaziert werden, versuche ich mich in Kurz und Einfach. Und lasse bis auf Weiteres mal den Code außen vor. Ist ja erst Mal nur eine Verständnis-Frage.

Also: Mit Ajax lassen sich bekanntlich Daten dynamisch nachladen.

Mit einer solchen Funktion - Nennen wir sie AJAX-Funktion-1 - veranlasse ich PHP, den Index für eine selbstgebastelte Volltextsuche zu generieren. Das klappt soweit ganz gut.

Nun dachte ich, in dem AJAX-Script-1 einfach mal mittels setInterval() eine zweite AJAX-Funktion zu starten, die alle paar Sekunden den mengenmäßigen Zwischenstand der Volltext-Indexierungen abfragt und per DOM in die HTML-Seite einbaut. Das klappt auch, aber leider nicht fortlaufend, sondern immer erst dann, wenn die AJAX-Funktion-1 ihre Arbeit vollendet hat.

Nach langer Überlegung dachte ich mir - ah, klar! - MyIsam sperrt ja die Tabellen nicht auf zeilenbasis, sondern komplett. Und so würde meine zweite AJAX-Funktion, bzw. das sich dahinter befindliche PHP-Script gar nicht zum Zuge kommen. So eine Indexierung ballert innerhalb eines Wimpernschlags schon einige hundert Einträge in die Datenbank.

Und so habe ich in dem dazugehörigen PHP-Skript von der AJAX-Funktion-1 nach jeweils 10.000 Indexierungen veranlasst, einen mengenmäßigen Zwischenbericht in einen zweiten MySQL-Table zu schreiben.

Trotzdessen, liefert mir die zweite Funktion keine Zwischenergebnisse. Sie folgen immer erst dann, wenn die AJAX-Funktion-1 fertig ist. Und die nachfolgend angetrudelten Zwischenstände melden alle samt die gleich lautende Endsumme.

Ist das bei AJAX so, dass nicht mehrere Prozesse gleichzeitig stattfinden können?

Ich habe in den beiden AJAX-Funktionen den Aufruf des XHR-Objekts selbstverständlich gekapselt, sodass die eine Funktion nicht das Objekt der anderen zerstört. Und auch alle übrigen Variablen kommen sich einander nicht in die Quere.

Nun hab ich grad noch einen zweiten Test gemacht. Und zwar habe ich während PHP mit dem Schreiben des Volltext-Indexes beschäftigt war, die lokale Webseite in einem zweiten Browser-Tab aufgerufen um dort eine völlig andere Seite zu starten. Und die lädt sich trotz i7-Prozessors mit gerade mal 13-25% Auslastung einen Wolf.

Wenn jetzt jemand von euch sagt, das ist ein seltsames Verhalten, rücke ich selbstverständlich mit dem Code raus. Ansonsten - sofern es einfach nur einen banalen Grund gibt - möchte ich lieber die Ressourcen dieses Portals schonen, zumal die einzelnen Codeabschnitte doch recht groß sind.

Freue mich nun auf eure Antworten!!

Gruß Thor
 
Beim lesen des Textes schoss mir als allererstes in den Kopf die Frage, ob die DB diese zweite Tabelle nicht auch komplett sperrt während sie arbeitet? Hast du mal versucht, die Zwischenergebnisse über eine Datei zu lösen anstatt über die DB? Damit hab ich bisher sehr gute Erfahrung gemacht, weil man für Dateien über flock sehr einfach sagen kann, ob sie gesperrt sind oder nicht.
 
Ajax ist erst mal so aufgebaut, dass es nur asynchrone Requests sendet. Hast du mal versucht diese zu synchronisieren?

Ansonsten kann es sehr gut sein, dass MySQL alle Tabellen sperrt, wenn ein Prozess gerade schreibenden Zugriff auf eine hat. Da bin ich mir aber auch unsicher.
 
Hallo Mikdoe!

Mit Heidi-SQL kann ich während der Indexerstellung die Zwischenwerte abfragen. So dürfte die Tabelle nicht gänzlich gesperrt sein.
Allerdings kann ich auch über Heidi mit: "select * from indexierung" den Verlauf der Indexierung einsehen.
Die Locks scheinen Blitzschnell verarbeitet zu werden, sodass scheinbar gar keine auftreten.
Aber MySQL sperrt - wie wir wissen - die Tabellen. Analysierend lässt sich wohl im ersten Schritt festhalten, dass die Datenbank an meinem geschilderten Problem nicht beteiligt ist.

Für weitere Ideen wäre ich dankbar!

Gruß Thor

- - - Aktualisiert - - -

Hallo Rico!

Ich hatte mal das true auf false gesetzt (xhr.open('GET', str, true)). Da passierte irgendwie gar nichts, zumindest tat sich nichts auf dem Bildschirm.

Gruß Thor
 
Zurück
Oben