Você está preso à pesquisa com sua pilha de tecnologia atual. O MySQL não tem nenhuma boa maneira de enviar uma notificação para você de que há algo novo para ver.
(Você pode considerar adicionar um subsistema de enfileiramento de mensagens, como RabbitMQ, por exemplo, mas isso exigiria uma grande mudança na estrutura do seu aplicativo).
Algumas diretrizes para lidar com o polling com o menor custo possível.
-
Defina as expectativas do usuário para latência de alguns segundos nas mensagens em vez de milissegundos.
-
Consulte quantas vezes forem necessárias para atender às expectativas de latência.
-
Evite consultar muitos dados com cada consulta. Como você pode fazer isso?
uma. Salve o carimbo de data/hora mais recente sempre que executar uma consulta
b. Não useSELECT *
. Em vez disso, dê os nomes das colunas que você realmente precisa. Isso permite que o otimizador do MySQL ajude a reduzir o custo de suas consultas.
c. Faça suas consultas fazeremSELECT whatever WHERE timestamp > saved_timestamp ORDER BY timestamp
então você só recebe novos itens da sua mesa, em ordem. Se o seu sistema não estiver muito ocupado, esses SELECTs geralmente não retornarão nenhuma linha. Isso é bom.
d. Certifique-se de ter um índice de várias colunas no carimbo de data/hora e nas outras colunas em sua instrução SELECT. Isso é chamado de índice de cobertura .
e. Logo após abrir sua conexão com o MySQL, emita esta instrução SQL. Ele permite que o MySQL busque seus dados com menos contenção com outros clientes MySQL inserindo linhas na tabela.
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
Se estiver fazendo isso com AJAX a partir dos navegadores de seus usuários, você deseja incluir o carimbo de data/hora mais recente nas solicitações AJAX para que possa entregar os novos itens necessários ao navegador de cada usuário.