2 Stimmen

Benachrichtigung der Benutzer über Datenbankänderungen

Ich habe im Kern eine php/mysql-Anwendung. Alle ~15 Minuten werden neue Daten in die Datenbank aufgenommen. Ich möchte die Benutzer benachrichtigen, dass neue Daten in der Datenbank sind. Ich dachte an einige JS auf dem Client-Computer laufen zu lassen, um für Updates alle 60 Sekunden zu überprüfen, aber ich möchte nicht die Ergebnisse nach unten ziehen, es sei denn, etwas hat tatsächlich geändert / in der DB hinzugefügt werden.

Also meine Frage ist: mit PHP/JS/MYSQL was ist der beste Weg für Clients, neue Zeilen in der DB zu erkennen?

Eine mögliche Lösung, die ich im Kopf hatte, war eine separate Tabelle namens "switch" mit einem BOOL namens 'switch', und jedes Mal, wenn ich die DB aktualisiere, wird "switch" für 60 Sekunden auf true gesetzt. Dann prüfen die Client-Computer alle 60 Sekunden, ob switch.switch = '1' (true) ist. Was denken Sie? Ich bin offen für Vorschläge zu jedem Teil dieses Plans? Ich habe die jQuery-Bibliothek geladen, falls jemand einen jQuery-Vorschlag machen möchte...

7voto

Pointy Punkte 387467

Anstatt dass Ihr "Schalter" nur eine Markierung ist, sollte er eine Versionsnummer sein. Erhöhen Sie die Nummer jedes Mal, wenn Sie neues Material in die Datenbank eingeben. Dann vergleichen die Clients einfach ihre Nummer mit der, die sie regelmäßig abrufen, und wenn die Nummern unterschiedlich sind, wissen sie, dass es Zeit für ein Update ist. (Natürlich merken sie sich die neue Nummer für den nächsten Test ...)

5voto

Jay Punkte 1236

Ich würde die Verwendung eines Zeitstempels oder eines Datums-/Zeitfelds im Gegensatz zu einem booleschen Wert in Ihrer Tabelle in Betracht ziehen. Der Client könnte die letzte Überprüfung (vorzugsweise mit der Serverzeit) mit den Daten in der Tabelle vergleichen. Wenn neue Daten geladen wurden, weil das Datum/die Uhrzeit der Tabelle neuer ist als das, was der Client angegeben hat, werden die aktualisierten Daten zurückgeschickt.

1voto

Larry K Punkte 45322

Eine Aktualisierungs-/Versionsnummer (entweder der Zeitpunkt der Aktualisierung oder eine aufsteigende ganze Zahl) ist der richtige Weg. Ich mache das in meiner App.

Einige Tipps:

1 Verwendung memcache anstatt die Daten in der Datenbank zu speichern. Dies senkt die Belastung der Datenbank und führt zu einer schnelleren Beantwortung der Abfragen.

2 Gibt es nur einen Datensatz, der alle 15 Minuten aktualisiert wird? Wenn ja, könnte der Cache-Schlüssel ein einfaches "data_ver" sein. Wenn es mehrere Datensätze gibt, von denen jeder seinen eigenen Aktualisierungszyklus hat, sollte die Nummer des Datensatzes als Teil des Schlüssels aufgenommen werden. Z.B. data__ver oder data_1_ver, data_2_ver, usw.

3 Anstatt den Client raten zu lassen, ob das Laden der Daten abgeschlossen ist oder nicht (Sie haben in einem Kommentar vorgeschlagen, 60 Sekunden zu warten), wäre es viel besser für den Datenladeprozess, um anzuzeigen, dass er abgeschlossen ist. -- Und wenn er abgeschlossen ist, würde die Version aktualisiert werden.

4 Ein Vorteil der Speicherung eines Versionsdatums/einer Versionszeit anstelle einer einfachen Zahl besteht darin, dass Sie dem Benutzer eine Statusmeldung wie "Data updated 1 Jan 2010 11:12 AM EST" geben können. Beachten Sie die Zeitzonenproblematik - Ihre Clients befinden sich möglicherweise NICHT in derselben Zeitzone wie der Server. Sie könnten sich östlich oder westlich des Servers befinden.

5 Wenn Sie auf dem Client warten wollen, bis sich die Dinge nach einer Änderung "beruhigt" haben, können Sie einen lokalen Zeitgeber im Browser starten. Sie müssen sich nicht um die Synchronisierung der Uhren zwischen Browser und Server kümmern. Warten Sie einfach 60 Sekunden nach der Änderung der Aktualisierungsnummer, bevor Sie die neuen Daten herunterladen.

6 Wenn Sie viele Clients haben und der Datendownload eine beträchtliche Größe hat, sollten Sie darüber nachdenken, auf dem Client eine zufällige Verzögerung von 0-90 Sekunden oder so einzubauen, nachdem die Version geändert wurde und bevor der Download angefordert wird. Andernfalls kann es dazu kommen, dass alle Clients versuchen, die aktualisierten Daten auf einmal herunterzuladen.

0voto

Jaydee Punkte 4108

Mir gefällt Ihre einzeilige Tabelle, aber ich würde einen Zeitstempel der letzten Aktualisierung haben, der erst nach der Batch-Aktualisierung aktualisiert wird.

Ist es ein Problem, wenn Clients während einer Aktualisierung Daten lesen?

0voto

Alexander Punkte 239

Können Sie eine Flagge in PHP pflegen und Ihre Kunden alle 60 Minuten übermitteln und die Flagge überprüfen lassen?

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X