Seiteninhalt nachladen nach Ändern eines Datensatzes in einer DB

Aruyan

Grünschnabel
Hallo Wissende,

ich bin ein Neuling in AJAX und ich stehe vor einem komplizierten Problem:

Vorerst: Ich habe google (sofern meine halbwegs intelligenten Suchwörter) und die Forensuche ausgiebig genutzt, aber nicht wirklich etwas passendes zu meinem Problem gefunden.

Zum Problem:
Ich möchte , dass sich ein Teil meiner Seite dynamisch nachlädt, sobald sich ein Datensatz in meiner Datenbank geändert hat.
Und dies auch nur, wenn sich dieser Datensatz geändert hat.
Ich möchte explizit keinen setTimeOut - Intervall von 1 Sekunde oder ähnlichem nutzen. (Hohe Traffic Erwartung)

Ist sowas generell möglich?
Und wenn JA : Wie ? :) (Hilfe, Referenzen, Dokumentationen oder Pseudo-Code würden mir sehr helfen)

Danke im voraus,

gruß,

Aruyan
 
Zuletzt bearbeitet:
hmmmm ein "server push"..

hab mich mal eben ein bisschen reingelesen:

also tut Comet folgendes:

Comet: serverseitiges Skript überprüft (bspw. alle 10 sekunden) auf Änderungen in der Datenbank -> wenn Änderung eingetreten, dann Ajax Request starten und Inhalte nachladen

und

AJAX: User löst Event Handler aus -> Request startet an serverseitiges Skript -> und erhält Response womit Inhalte nachgeladen werden.

Sehe ich das richtig?
 
Das was du vorhast geht garnicht mit Javascript, nehnt sich aber Socket in Flash ist eine Socket Verbindung möglich,
aber ist halt Flash, in der Zukunft von Javascript ist eine Socket Verbindung auch eingeplant aber bevor das mal kompatibel ist hast du dich für settimeout oder Flash entschieden :D
 
Okay.

Mir stellte sich nur die Frage ob es nicht unnötig viel Traffic verursacht, wenn man alle X Sekunden einen Request sendet und dieser ein Skript aufruft, der einen Query aus der Datenbank ausführt.
Das würde ja nämlich bedeuten, dass jede X Sekunden ein Query ausgeführt wird, was theoretisch den Server schnell in die Knie zwingen könnte...
Aber ich denke Versuch macht Kluch. Ich werde einfach das Traffic / Performance Verhalten analysieren und dann ggf. andere Wege einschlagen.

Danke für die Hilfe jedenfalls :-)
 
Du startest ja keine komplexen Abfragen, sondern schaust nur ob nach der letzten ID eine neue eingetragen wurde,
und nur dann lädst du den Inhalt nach, das ganze ist so minimal das du es selber auch garnicht analysieren kannst :D

MFG.one6666
 
Ich hoffe es ist wirklich nur so minimal, wenn man jede Sekunde einen Query ausführt und auswertet :-)
 
Moin,

Ich hoffe es ist wirklich nur so minimal, wenn man jede Sekunde einen Query ausführt und auswertet :-)

Wie ressourcenraubend es sein wird, hängt zum grossen Teil davon ab, wieviel Besucher du erwartest...ich halte das für recht problematisch :eek:
Auf jeden Fall solltest du vorher dein Server-Logging anpassen.
Mein erster Versuch, soetwas zu machen(Chat) resultierte darin, dass in kürzester Zeit die Server-Logs so anwuchsen, dass mein verfügbarer Speicherplatz gesprengt wurde :suspekt:

Um bspw. die Anfragen auf die DB zu vermeiden, könntest du so vorgehen:
Bei jedem DB-Update speichere bspw. in einer Datei den aktuellen Timestamp.
Den Request führe auf diese Datei aus und vergleiche den Timestamp mit dem zuletzt gelesenen....sind beide nicht identisch, laden das Gewünschte nach.

Aber schaue dir lieber mal die Flash-Variante an.


Und dies auch nur, wenn sich dieser Datensatz geändert hat.
Was genau meinst du mit "dieser"?
 
Flash kommt für mich leider nicht in Frage. Da gibts noch Randbedingungen für die Problemlösung und das wäre definitiv überspezifiziert. Danke Trotzdem für den Denkanstoß.


mit "dieser Datensatz" meine ich nicht irgend einen Datensatz (das wäre ja viel zu allgemein) sondern eben nur einen spezifischen, den ich anhand einer ID selektiere.

Bspw. ist die Tabelle so aufgebaut, dass ich 2 Spalten habe mit dem Primärschlüssel 'ID' und einem Feld 'status', in diesem zb "online", "offline", "abwesend" ...etc als Strings drin stehen.
Dann soll nach Möglichkeit erst ein Request (Ohne selbst ausgelösten Event-Handler) , welches ein php skript ausführt, starten, wenn dieser Datensatz sich bei überführter ID sich geändert hat. Dieses PHP Skript soll dann nach per Select Query schauen ob bei der Datensatz eine Veränderung im Feld 'status' aufweist. Ist dies der Fall, soll der entsprechende neue Status als Resultergebnis zurück gesendet werden auf den User-Bildschirm

Das Beispiel ist frei erfunden und sollte mehr die Problematik verdeutlichen (Ich hoffe mir ist das gelungen).

Was den Speicherplatz sowie das Traffickonto angeht: Mir ist vollstens klar, dass ein time Intervall von 1 sekunde bei 10.000 Benutzern sehr viel unnötiger Datenverkehr entsteht - Dies gilt es zu verhindern.


Ich gehe davon aus, dass ich ohne weitere Technologien nicht drum herum komme? ;)

Vielen Dank für die vielen Ideen!
 
Was den Speicherplatz sowie das Traffickonto angeht: Mir ist vollstens klar, dass ein time Intervall von 1 sekunde bei 10.000 Benutzern sehr viel unnötiger Datenverkehr entsteht - Dies gilt es zu verhindern.


Ich gehe davon aus, dass ich ohne weitere Technologien nicht drum herum komme? ;)

Ich befürchte, ja :(

Bei 10000 Benutzern wird es aber generell problematisch, so oder so.
10000 Verbindungen permanent offen zu haben, was die Alternative zur Abfrage in festen Intervallen wäre, wird auf Dauer recht teuer werden, denke ich.

Ich würde daher eher empfehlen, darüber nachzusinnen, ob du dies Feature wirklich unbedingt brauchst.
 

Neue Beiträge

Zurück