¿Cómo manejar los datos en tiempo real desde la perspectiva de una 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 usar una de las últimas tecnologías de navegador ( sockets web , incluso usando navegadores más antiguos ) es muy fácil mostrar a todos los observables (navegador de usuario) lo que todos están haciendo.

Remy Sharp tiene un ejemplo de sobre la simplicidad de esto.

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

¿Cómo puedo consultar una base de datos como esa?

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

¿no es el camino recomendado correcto?

y tirando de este x en x tiempo ... ¿esto no es real feed de datos correcto?

Si alguien me puede ayudar a entender el punto de vista de la base de datos, lo apreciaría enormemente.

    
pregunta balexandre 04.02.2011 - 23:36

4 respuestas

7

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

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

Sin embargo, cada consulta solo te da un punto en el tiempo. Todavía tienes que hacer una encuesta.

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

  

la utilidad de reproducción de transmisión por secuencias que se puede usar para reproducir eventos del archivo histórico 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.

    
respondido por el Scott Whitlock 04.02.2011 - 23:54
7

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 búferes y en memoria compartida.

Los datos pueden también enviarse a una base de datos para su posterior análisis y recuperación. El volumen debe ser pequeño, por lo que los resúmenes, 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 la confiabilidad o paquetes UDP para notificaciones instantáneas (pero posiblemente frágiles).

    
respondido por el S.Lott 05.02.2011 - 01:12
4

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

Martillear tu base de datos no es realmente una buena idea. Aunque estoy bastante seguro de que te has dado cuenta de esto, es posible que otros no lo hayan 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, lo que martilleaba la base de datos.

De la forma en que lo veo, es necesario que haya una aplicación de ejecución larga 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 copia inmediatamente la información a todos los que están conectados a ella. Esto se carga en una aplicación muy liviana, poco tráfico y en tiempo real.

Si debe usar una base de datos, la aplicación debe manejar esto en una cola de actualizaciones en segundo plano. Obviamente, debe elegir y elegir lo que guarda, ya que no quiere amañar la base de datos con una pared de pequeños fragmentos de información (como la posición actual de un usuario en un juego), lo que le devuelve al mismo problema que comenzó con. En lugar de la posición, almacene la distancia recorrida durante 5 segundos u otros bits de información más significativos

    
respondido por el TheLQ 21.03.2011 - 03:14
0

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 puedes 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 como lo sirven, no estoy seguro de que me importe más allá de la curiosidad).

    
respondido por el JeffO 26.03.2016 - 20:23

Lea otras preguntas en las etiquetas