Comment gérer les données en temps réel dans une perspective de base de données?

14

J'ai une idée en tête, mais cela m'embrouille toujours dans la zone de la base de données .

Imaginez que je souhaite afficher des données en temps réel , et en utilisant l'une des dernières technologies de navigateur ( sockets Web - même en utilisant des navigateurs plus anciens ), il est très facile de montrer à tous les observables (navigateur utilisateur) ce que tout le monde fait.

Remy Sharp a un exemple de la simplicité à ce sujet.

Mais je ne reçois toujours pas la partie de la base de données, comment pourrais-je me nourrir , imaginons (en utilisant Remy game Tron) que je veux enregistrer le chemin pour chaque utilisateur connecté dans une base de données et si un client veut voir ce qui se passe avec un retard de 5 sec , il verra que, non seulement les 5 sec jusqu'à ce moment mais la continuation dans le temps ...

comment puis-je interroger une base de données comme ça?

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

n'est pas le chemin recommandé à droite?

et en tirant ce x en x temps ... ce n'est pas un vrai flux de données correct?

Si quelqu'un peut m'aider à comprendre le point de vue de la base de données, je l'apprécierais grandement.

balexandre
la source

Réponses:

7

Les bases de données relationnelles sont optimisées pour les relations. Les bases de données de séries temporelles sont optimisées pour stocker et travailler avec une série de valeurs qui changent dans le temps. Dans le monde industriel, ils appellent ces "historiens". Le plus célèbre est probablement le PI d'OSI .

Vous pouvez interroger un ensemble de signaux pour un moment donné, même s'il n'a pas stocké de valeur pour ce point particulier (il peut interpoler entre des points connus).

Cependant, chaque requête ne vous donne qu'un seul point dans le temps. Vous devez encore interroger.

Poursuivant sur le thème de la base de données des séries chronologiques, consultez openPDC (un concentrateur de données Phasor est spécifique au réseau électrique, mais il est un historien des séries chronologiques). Plus précisément, cette citation:

utilitaire de lecture en continu qui peut être utilisé pour rejouer des événements à partir des archives de l'historien local et extraire de grands ensembles de données

C'est vraiment ce que vous voulez ... une sorte de mécanisme de lecture.

Je ne pense pas que vous vouliez vraiment une base de données. Vous voulez un tas de FIFO.

Scott Whitlock
la source
7

Le temps réel et la base de données n'ont rien à voir l'un avec l'autre.

Lorsque j'ai fabriqué des radars (et des pompes à chaleur et des systèmes de contrôle des navires), j'ai appris que les données en temps réel vivent entièrement dans des tampons et de la mémoire partagée.

Les données peuvent également être envoyées à une base de données pour une analyse et une récupération ultérieures. Le volume doit être petit, donc ce sont des résumés ou des résumés ou des échantillons de données vont au stockage persistant.

Les données réelles en temps réel, cependant, transitent par le réseau via des files d'attente de messages pour la fiabilité ou des paquets UDP pour une notification instantanée (mais éventuellement fragile).

S.Lott
la source
4

En tombant sur cette question, je pense que vous pensez mal à cela, et les autres réponses ne mettent pas vraiment en évidence le problème.

Marteler votre base de données n'est pas vraiment une bonne idée. Bien que je sois presque sûr que vous vous en êtes rendu compte, d'autres pourraient ne pas l'avoir fait. Je me souviens qu'un de mes amis a essayé d'utiliser un script php et une fonction Javascript AJAX en boucle pour un jeu en temps semi-réel. Il s'est très vite rendu compte que les performances se dégradaient à mesure que de plus en plus de personnes se joignaient, simplement parce qu'il exécutait une tonne de requêtes par seconde qui martelaient la base de données.

D'après moi, il doit y avoir une application de longue durée qui se situe entre l'utilisateur et la base de données. Les utilisateurs se connectent directement à cette application et transmettent toutes ses informations à l'application. Cette application les copie immédiatement les informations à tous ceux qui y sont connectés. Cela se charge dans une application très légère, peu de trafic et en temps réel.

Si vous devez utiliser une base de données, l'application doit alors gérer cela dans une file d'attente de mises à jour en arrière-plan. Évidemment, vous devez choisir ce que vous enregistrez car vous ne voulez pas marteler la base de données avec un mur de petits morceaux d'informations (comme la position actuelle d'un utilisateur dans un jeu), ce qui vous ramène au même problème que vous avez commencé avec. Au lieu de la position, enregistrez la distance parcourue sur 5 secondes ou d'autres informations plus significatives

TheLQ
la source
1

Ce site possède des fonctionnalités "en temps réel". Vous constaterez que de nombreux sites à fort trafic ont de nombreux jouets entre le serveur Web et la base de données. Redis est quelque chose que vous pouvez utiliser pour conserver des données en mémoire. Je suis sûr qu'il y en a d'autres pour différentes piles.

Je pense que Firebase.com est un excellent service de données en temps réel.

JeffO
la source