Moin liebe CB Runde!
Ich sitzte aktuell an einem Projekt welches im Kern auf PHP und JS aufbaut. Aber es müssen auf der Seite auf der sich der User befindet ohne aktuallisierung der kompletten Zeite zeitnah updates geladen werden.
Ich habe das ganze schon mit NodeJS und SSE gelöst, also der Server pusht updates der datenbank direkt an den Browser. Dennoch habe ich nur mal so zum Spaß überlegt wie man ein einigermaßen performantes Poll System mit PHP und JS baut, würde mich mal Interessieren was ihr so zu meinen Ideen sagt.
Idee 1:
Datensätze die mich interessieren bekommen eine "updated_at" spalte die mit einem index versehen ist und der browser fragt z.B. alle 10 Sekunden an ob veränderte Daten seit der letzten abfrage vorliegen.
Könnte aber bei vielen anwendungen recht "Teuer" werden, oder sehe ich das falsch? Ist es vlt. sogar kontropruktiv die spalte zu indizieren weil zu viel gewuselt wird in der DB?
Idee 2:
Auf dem Server liegt eine datei "updated_rows", die ist z.B. immer 30 Zeilen lang. Ändert ein User etwas wird die der neue datensatz in diese datei geschrieben und der älteste entfernt. Bzw. man fügt immer eine neue ein und löscht die erste.
Man könnte auch nur die IDs der betroffenen Datensätzte speichern und sich diese dann aus der DB hohlen, vlt. im CSV Format.
Hier sehe ich aber das Problem, wenn 2 User etwas gleichzeitig updaten ist die Datei für einen der User gesperrt, man müsste da also ggf. warten, was die Antwort des Servers verzögert. Außerdem habe ich massiven overhead weil ich immer alle daten lade. Auch hier könnte man dann natürlich vorfiltern welche am Ende zum clienten geschickt werden, aber dann wird das update script wirklich ziemlich kompliziert.
Zudem sehe ich in dem Zeilen Verfahren das problem das ich ja nicht einfach die erste Zeile löschen kann, sondern jedesmal die gesamte Datei neu schreiben müsste?
Wenn man nur die IDs im CSV speichert bleibt das problem, zwar aber die Menge an Bytes ist wesentlich geringer.
Idee 3:
Wie idee 2 nur mit einer Datenbank und ggf. kombiniert mit Idee 1 um den overhead zu minimieren.
Das PHP für sowas nicht die Sprache der Wahl ist weiß ich, ist halt nur ein gedanken experiment weil ich vor Jahren mal mit so einem Problem beschäftigt war und dann habe ich SSE und NodeJS kennen gelernt. (Übrigens hier im Forum
)
Seitdem denke ich da immer mal wieder drüber nach.
Würde mich freuen eure Meinungen zu hören.
Ich sitzte aktuell an einem Projekt welches im Kern auf PHP und JS aufbaut. Aber es müssen auf der Seite auf der sich der User befindet ohne aktuallisierung der kompletten Zeite zeitnah updates geladen werden.
Ich habe das ganze schon mit NodeJS und SSE gelöst, also der Server pusht updates der datenbank direkt an den Browser. Dennoch habe ich nur mal so zum Spaß überlegt wie man ein einigermaßen performantes Poll System mit PHP und JS baut, würde mich mal Interessieren was ihr so zu meinen Ideen sagt.
Idee 1:
Datensätze die mich interessieren bekommen eine "updated_at" spalte die mit einem index versehen ist und der browser fragt z.B. alle 10 Sekunden an ob veränderte Daten seit der letzten abfrage vorliegen.
Könnte aber bei vielen anwendungen recht "Teuer" werden, oder sehe ich das falsch? Ist es vlt. sogar kontropruktiv die spalte zu indizieren weil zu viel gewuselt wird in der DB?
Idee 2:
Auf dem Server liegt eine datei "updated_rows", die ist z.B. immer 30 Zeilen lang. Ändert ein User etwas wird die der neue datensatz in diese datei geschrieben und der älteste entfernt. Bzw. man fügt immer eine neue ein und löscht die erste.
Man könnte auch nur die IDs der betroffenen Datensätzte speichern und sich diese dann aus der DB hohlen, vlt. im CSV Format.
Hier sehe ich aber das Problem, wenn 2 User etwas gleichzeitig updaten ist die Datei für einen der User gesperrt, man müsste da also ggf. warten, was die Antwort des Servers verzögert. Außerdem habe ich massiven overhead weil ich immer alle daten lade. Auch hier könnte man dann natürlich vorfiltern welche am Ende zum clienten geschickt werden, aber dann wird das update script wirklich ziemlich kompliziert.
Zudem sehe ich in dem Zeilen Verfahren das problem das ich ja nicht einfach die erste Zeile löschen kann, sondern jedesmal die gesamte Datei neu schreiben müsste?
Wenn man nur die IDs im CSV speichert bleibt das problem, zwar aber die Menge an Bytes ist wesentlich geringer.
Idee 3:
Wie idee 2 nur mit einer Datenbank und ggf. kombiniert mit Idee 1 um den overhead zu minimieren.
Das PHP für sowas nicht die Sprache der Wahl ist weiß ich, ist halt nur ein gedanken experiment weil ich vor Jahren mal mit so einem Problem beschäftigt war und dann habe ich SSE und NodeJS kennen gelernt. (Übrigens hier im Forum
Seitdem denke ich da immer mal wieder drüber nach.
Würde mich freuen eure Meinungen zu hören.