Armazenamento de dados para capturar votos e agregá -los
-
22-09-2019 - |
Pergunta
Estou interessado em usar o Node.js como um servidor de soquete para comunicação baseada em fluxo com dezenas de milhares de clientes. Os clientes enviarão votos para peças específicas de conteúdo e receberão atualizações quase em tempo real dos prolongados de votos agregados do servidor.
O armazenamento de dados precisa suportar:
- Armazenando os votos
- Resumindo os votos em quase tempo real
- Prevenção de vários votos dentro de um período de tempo arbitrário (por exemplo, os clientes só podem votar uma vez por um conteúdo a cada 1 minuto)
Algo que já possui bibliotecas de clientes para Node.js seria preferível.
Solução
Eu recomendo Redis. É um armazenamento de chave/valor com operações de conjunto e lista. Também suporta operações atômicas para contadores. Existe um cliente para redis para node.js disponível em Github. Aqui está como eu implementaria seus recursos:
Armazenando os votos
INCR votes:option:<option>
Resumindo os votos
MGET votes:option:<option1> votes:option:<option2> ... votes:option:<optionN>
Prevenção de vários votos (crie uma chave de bloqueio expirando para o IP do cliente)
EXPIRE lock:<encoded ip> 60
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow