¿Cómo manejar datos en tiempo real desde una perspectiva de base de datos?

14

Tengo una idea en mente, pero todavía me confunde el área de la base de datos .

Imagine que quiero mostrar datos en tiempo real , y usando una de las últimas tecnologías de navegador ( enchufes web , incluso con navegadores antiguos ) es muy fácil mostrar a todos los observables (navegador de usuario) lo que todos están haciendo.

Remy Sharp tiene un ejemplo sobre la simplicidad de esto.

Pero todavía no obtengo la parte de la base de datos, ¿cómo me alimentaría ? Imaginemos (usando el juego Remy Tron) que quiero guardar la ruta para cada usuario conectado en una base de datos y si un cliente quiere ver qué está pasando. un retraso de 5 segundos , verá eso, no solo los 5 segundos hasta ese momento sino la continuación en el tiempo ...

¿Cómo puedo consultar un DB como ese?

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

no es la ruta recomendada ¿verdad?

y tirando de esta x en x tiempo ... ¿esto no es correcto?

Si alguien puede ayudarme a comprender el punto de vista de la base de datos, lo agradecería enormemente.

balexandre
fuente

Respuestas:

7

Las bases de datos relacionales están optimizadas para las relaciones. Las bases de datos de series temporales están optimizadas para almacenar y trabajar con una serie de valores que cambian con el tiempo. En el mundo industrial, los llaman "historiadores". Probablemente el más famoso es el IP de OSI .

Puede consultar a través de un conjunto de señales para un punto dado en el tiempo, incluso si no almacenó un valor para ese punto en particular (puede interpolar entre puntos conocidos).

Sin embargo, cada consulta solo le da un punto en el tiempo. Aún tienes que sondear.

Continuando con el tema de la base de datos de series temporales, consulte openPDC (un Concentrador de datos fasoriales es específico de la red eléctrica, pero es un historiador de series temporales). Específicamente, esta cita:

utilidad de reproducción de transmisión que se puede usar para reproducir eventos del archivo de historiador local y extraer grandes conjuntos de datos

Eso es realmente lo que quieres ... algún tipo de mecanismo de reproducción.

No creo que realmente quieras una base de datos. Quieres un montón de FIFOs.

Scott Whitlock
fuente
7

El tiempo real y la base de datos no tienen nada que ver entre sí.

Cuando hice radares (y bombas de calor y sistemas de control de barcos) aprendí que los datos en tiempo real viven completamente en memorias intermedias y memoria compartida.

Los datos también pueden enviarse a una base de datos para su posterior análisis y recuperación. El volumen tiene que ser pequeño, por lo que los resúmenes o resúmenes o muestras de datos van al almacenamiento persistente.

Sin embargo, los datos reales en tiempo real fluyen a través de la red a través de colas de mensajes para confiabilidad o paquetes UDP para notificación instantánea (pero posiblemente frágil).

S.Lott
fuente
4

Tropezando con esta pregunta, creo que estás pensando en esto mal, y las otras respuestas realmente no resaltan el problema.

Martillar su base de datos no es realmente una buena idea. Si bien estoy bastante seguro de que te has dado cuenta de esto, otros podrían no haberlo hecho. Recuerdo que un amigo mío intentó usar un script php y una función Javascript AJAX en un bucle para un juego en tiempo semi real. Rápidamente se dio cuenta de que el rendimiento se degradaba a medida que más personas se unían, simplemente porque estaba ejecutando una tonelada de consultas por segundo que afectaban la base de datos.

Desde mi punto de vista, debe haber una aplicación de larga ejecución que se encuentre entre el usuario y la base de datos. Los usuarios se conectan directamente a esta aplicación y pasan toda su información a la aplicación. Esta aplicación les copia inmediatamente la información a todos los que están conectados a ella. Esto se carga en una aplicación muy ligera, poco tráfico y en tiempo muy real.

Si debe usar una base de datos, la aplicación debe manejar esto en una cola de actualizaciones en segundo plano. Obviamente, debes elegir qué guardar, ya que no quieres forzar la base de datos con un muro de pequeños fragmentos de información (como la posición actual de un usuario en un juego), que te devuelve al mismo problema que comenzaste. con. En lugar de la posición, almacene la distancia recorrida durante 5 segundos u otros bits de información más significativos

TheLQ
fuente
1

Este sitio tiene algunas características "en tiempo real". Encontrará que muchos sitios de alto tráfico tienen muchos juguetes entre el servidor web y la base de datos. Redis es algo que puede usar para guardar datos en la memoria. Estoy seguro de que hay otros para varias pilas.

Creo que Firebase.com es un excelente servicio de datos en tiempo real (no estoy seguro de lo que hacen para el backend de la base de datos real, pero dado que lo sirven, no estoy seguro de que realmente me importe más allá de la curiosidad).

JeffO
fuente