Estou criando um programa dashboard para monitoramento de dados em tempo real.
Minha duvida é: Eu envio os dados diretamente do servidor ate o cliente via socket ou envio uma “mensagem” do servidor para o cliente via socket e, quando o cliente receber, eu faço uma requisição ao banco de dados e pego o ultimo valor salvo desses dados?
No primeiro caso eu preciso de um array de objetos no servidor para enviar via socket. Consumindo assim memoria do servidor.
No segundo caso eu preciso enviar uma “mensagem” do servidor para o cliente e, dai sim, eu posso requisitar do cliente ate o banco de dados os ultimos valores salvos. Consumindo mais processamento do servidor do banco de dados.
Meu pensamento esta correto? E qual dos casos é uma melhor aplicação para dados em tempo real?
Consultas excessivas ao banco de dados pode ser custoso.
A primeira opção me parece mais adequada.
Ficará mais rapido tambem, porque voce tem um unico retorno e esse retorno será enviado para “N” clientes.
No seu segundo caso, digamos que tenham 1000 clientes, então serão 1000 consultas ao banco de dados, pessima ideia, mesmo porque um SGBD tem que lidar com muitas coisas.
Se for crescer a base de clientes, socket puro e simples tendo uma Thread para cada conexão, acaba consumindo muita memoria do lado servidor. Usando o java.nio canais não bloqueantes é incrivel como consome pouca memoria e suporta um numero enorme de conexoes simultaneas.