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:

  1. Armazenando os votos
  2. Resumindo os votos em quase tempo real
  3. 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.

Foi útil?

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
scroll top