Wie gehe ich aus Datenbanksicht mit Echtzeitdaten um?

14

Ich habe eine Idee, aber sie verwirrt mich immer noch im Datenbankbereich .

Stellen Sie sich vor, ich möchte Echtzeitdaten anzeigen und mit einer der neuesten Browsertechnologien ( Web-Sockets - auch mit älteren Browsern ) kann allen Observablen (Benutzer-Browser) auf einfache Weise gezeigt werden, was alle tun.

Remy Sharp hat ein Beispiel dafür, wie einfach dies ist.

Aber ich verstehe den Datenbankteil immer noch nicht. Wie würde ich füttern ? Stellen wir uns vor (mit Remy-Spiel Tron), dass ich den Pfad für jeden verbundenen Benutzer in einer Datenbank speichern möchte und ob ein Client sehen möchte, was los ist Mit einer Verzögerung von 5 Sekunden wird er sehen, dass nicht nur die 5 Sekunden bis zu diesem Moment, sondern auch die Fortsetzung in der Zeit ...

Wie kann ich so eine DB abfragen?

SELECT x, y FROM run WHERE time >= DATEADD(second, -5, rundate);

ist der empfohlene Weg nicht richtig?

und diese x in x Zeit ziehen ... das ist kein richtiger Datenfeed?

Wenn mir jemand helfen kann, den Standpunkt der Datenbank zu verstehen, wäre ich sehr dankbar.

Balexandre
quelle

Antworten:

7

Relationale Datenbanken sind für Beziehungen optimiert. Zeitreihendatenbanken sind für das Speichern und Bearbeiten einer Reihe von Werten optimiert, die sich mit der Zeit ändern. In der industriellen Welt nennen sie diese "Historiker". Am bekanntesten ist wohl OSIs PI .

Sie können eine Reihe von Signalen für einen bestimmten Zeitpunkt abfragen, auch wenn kein Wert für diesen bestimmten Punkt gespeichert wurde (es kann zwischen bekannten Punkten interpolieren).

Jede Abfrage gibt Ihnen jedoch nur einen einzigen Zeitpunkt. Sie müssen noch abstimmen.

Fahren Sie mit dem Thema Zeitreihendatenbank fort und schauen Sie sich openPDC an (ein Phasor Data Concentrator ist für das Stromnetz spezifisch, aber ein Zeitreihenhistoriker). Speziell dieses Zitat:

Streaming-Wiedergabedienstprogramm, mit dem Ereignisse aus dem lokalen Historian-Archiv wiedergegeben und große Datenmengen extrahiert werden können

Das ist wirklich was Sie wollen ... eine Art Wiedergabemechanismus.

Ich glaube nicht, dass Sie wirklich eine Datenbank wollen. Sie wollen ein paar FIFOs.

Scott Whitlock
quelle
7

Echtzeit und Datenbank haben nichts miteinander zu tun.

Als ich Radargeräte (und Wärmepumpen und Schiffssteuerungssysteme) herstellte, erfuhr ich, dass die Echtzeitdaten vollständig in Puffern und gemeinsamem Speicher gespeichert sind.

Die Daten werden möglicherweise auch an eine Datenbank gesendet, um sie anschließend zu analysieren und abzurufen. Das Volumen muss klein sein, damit Zusammenfassungen oder Zusammenfassungen oder Datenproben in den dauerhaften Speicher gelangen.

Die tatsächlichen Echtzeitdaten fließen jedoch über Nachrichtenwarteschlangen für Zuverlässigkeit oder UDP-Pakete für sofortige (aber möglicherweise fragile) Benachrichtigungen durch das Netzwerk.

S.Lott
quelle
4

Wenn Sie über diese Frage stolpern, denken Sie, dass dies falsch ist, und die anderen Antworten heben das Problem nicht wirklich hervor.

Das Hämmern Ihrer Datenbank ist keine gute Idee. Obwohl ich mir ziemlich sicher bin, dass Sie das erkannt haben, haben es andere vielleicht nicht. Ich erinnere mich, dass ein Freund von mir versucht hat, ein PHP-Skript und eine Javascript-AJAX-Funktion in einer Schleife für ein Halb-Echtzeit-Spiel zu verwenden. Er stellte sehr schnell fest, dass sich die Leistung verschlechterte, wenn mehr Leute beitraten, einfach weil er eine Tonne von Abfragen pro Sekunde ausführte, die die Datenbank erschütterten.

So wie ich das sehe, muss es eine Anwendung geben, die lange läuft und sich zwischen dem Benutzer und der Datenbank befindet. Benutzer stellen eine direkte Verbindung zu dieser Anwendung her und geben alle Informationen an die App weiter. Diese App kopiert sie sofort die Informationen an alle damit verbundenen. Dies führt zu einer sehr leichten App, wenig Verkehr und sehr Echtzeit.

Wenn Sie eine Datenbank verwenden müssen, muss die App dies in einer Hintergrundwarteschlange von Updates verarbeiten. Offensichtlich müssen Sie auswählen, was Sie speichern möchten, da Sie die Datenbank nicht mit einer Wand aus kleinen Informationsblöcken (wie der aktuellen Position eines Benutzers in einem Spiel) bearbeiten möchten, wodurch Sie zu demselben Problem zurückkehren, mit dem Sie begonnen haben mit. Speichern Sie anstelle der Position die zurückgelegte Distanz über 5 Sekunden oder andere aussagekräftigere Informationen

TheLQ
quelle
1

Diese Seite hat einige "Echtzeit" -Funktionen. Sie werden feststellen, dass auf vielen stark frequentierten Websites viele Spielzeuge zwischen dem Webserver und der Datenbank vorhanden sind. Mit Redis können Sie Daten im Speicher halten. Ich bin sicher, es gibt andere für verschiedene Stapel.

Ich denke, Firebase.com ist ein großartiger Echtzeit-Datendienst (Ich bin nicht sicher, was sie für das eigentliche Datenbank-Backend tun, aber da sie es bereitstellen, bin ich mir nicht sicher, ob es mich wirklich interessiert.).

JeffO
quelle