Como lidar com dados em tempo real a partir de uma perspectiva de banco de dados?

14

Eu tenho uma ideia em mente, mas ainda me confunde a área de banco de dados .

Imagine que eu quero mostrar dados em tempo real e, usando uma das mais recentes tecnologias de navegador ( soquetes da Web - mesmo usando navegadores antigos ), é muito fácil mostrar a todos os observáveis ​​(navegador do usuário) o que todos estão fazendo.

Remy Sharp tem um exemplo sobre a simplicidade disso.

Mas ainda não entendi a parte do banco de dados, como eu alimentaria , vamos imaginar (usando o Remy game Tron) que quero salvar o caminho de cada usuário conectado em um banco de dados e se um cliente deseja ver o que está acontecendo. um atraso de 5 segundos , ele verá que, não apenas os 5 segundos até aquele momento, mas a continuação no tempo ...

como posso consultar um banco de dados como esse?

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

não é o caminho recomendado, certo?

e puxando esse x no tempo x ... esse não é o feed de dados real correto?

Se alguém puder me ajudar a entender o ponto de vista do banco de dados, eu agradeceria muito.

balexandre
fonte

Respostas:

7

Bancos de dados relacionais são otimizados para relacionamentos. Os bancos de dados de séries temporais são otimizados para armazenar e trabalhar com uma série de valores que mudam com o tempo. No mundo industrial, eles chamam esses "historiadores". Provavelmente o mais famoso é o PI da OSI .

Você pode consultar um conjunto de sinais para um determinado ponto no tempo, mesmo que ele não armazene um valor para esse ponto específico (ele pode interpolar entre pontos conhecidos).

No entanto, cada consulta fornece apenas um único ponto no tempo. Você ainda precisa fazer uma pesquisa.

Continuando com o tema do banco de dados de séries temporais, confira o openPDC (um concentrador de dados fasorial é específico da rede elétrica, mas é um historiador de séries temporais). Especificamente, esta citação:

utilitário de reprodução de streaming que pode ser usado para reproduzir eventos do arquivo do historiador local e extrair grandes conjuntos de dados

É isso mesmo que você quer ... algum tipo de mecanismo de reprodução.

Eu não acho que você realmente queira um banco de dados. Você quer um monte de FIFOs.

Scott Whitlock
fonte
7

Tempo real e banco de dados não têm nada a ver um com o outro.

Quando fiz radares (e bombas de calor e sistemas de controle de navios), aprendi que os dados em tempo real vivem inteiramente em buffers e na memória compartilhada.

Os dados também podem ser enviados para um banco de dados para posterior análise e recuperação. O volume deve ser pequeno, portanto, resumos, resumos ou amostras de dados vão para o armazenamento persistente.

Os dados reais em tempo real, no entanto, fluem pela rede por meio de filas de mensagens para obter confiabilidade ou pacotes UDP para notificação instantânea (mas possivelmente frágil).

S.Lott
fonte
4

Tropeçando nessa pergunta, acho que você está pensando sobre isso errado, e as outras respostas realmente não destacam o problema.

Martelar seu banco de dados não é realmente uma boa ideia. Enquanto eu tenho certeza que você já percebeu isso, outros podem não ter. Lembro que um amigo meu tentou usar um script php e uma função Javascript AJAX em um loop para um jogo em tempo semi-real. Ele rapidamente percebeu que o desempenho diminuía à medida que mais pessoas se juntavam, simplesmente porque ele estava executando uma tonelada de consultas por segundo que martelava o banco de dados.

Do meu ponto de vista, é necessário que exista um aplicativo de longa duração entre o usuário e o banco de dados. Os usuários se conectam diretamente a este aplicativo e passam todas as suas informações ao aplicativo. Este aplicativo eles copia imediatamente as informações para todos os que estão conectados a ele. Isso carrega um aplicativo muito leve, pouco tráfego e tempo muito real.

Se você precisar usar um banco de dados, o aplicativo deverá lidar com isso em uma fila de atualizações em segundo plano. Obviamente, você precisa escolher o que salvar, pois não deseja martelar o banco de dados com uma parede de pequenas informações (como a posição atual de um usuário em um jogo), o que o leva de volta ao mesmo problema que você iniciou com. Em vez de posição, a distância da loja percorrida por 5 segundos ou outras informações mais significativas

TheLQ
fonte
1

Este site possui alguns recursos "em tempo real". Você verá que muitos sites de alto tráfego têm muitos brinquedos entre o servidor da Web e o banco de dados. Redis é algo que você pode usar para armazenar dados na memória. Tenho certeza que existem outros para várias pilhas.

Eu acho que o Firebase.com é um ótimo serviço de dados em tempo real (não tenho certeza do que eles fazem para o back-end real do banco de dados, mas, como o servem, não tenho certeza se realmente me importo além da curiosidade.).

JeffO
fonte