Magasin de données pour capturer votes et les agréger
-
22-09-2019 - |
Question
Je suis intéressé à utiliser Node.js comme serveur de socket pour la communication basée sur les flux avec des dizaines de milliers de clients. Les clients enverraient votes pour les pièces particulières de contenu et de recevoir des mises à jour en temps quasi réel des décomptes de votes agrégés à partir du serveur.
Le datastore doit soutenir:
- Le stockage des votes
- Résumer les votes en temps quasi-réel
- Empêcher plusieurs voix dans une période de temps arbitraire (par exemple les clients ne peuvent voter qu'une seule fois pour un morceau de contenu chaque 1 minute)
Quelque chose qui a déjà les bibliothèques clientes pour Node.js serait préférable.
La solution
Je recommande fortement Redis . Il est un magasin clé / valeur des opérations de réglage et la liste. Il prend également en charge les opérations atomiques pour les compteurs. Il y a un client pour Redis pour Node.js disponibles sur github . Voici comment je mettre en œuvre vos fonctions:
Stockage voix
INCR votes:option:<option>
Résumant les votes
MGET votes:option:<option1> votes:option:<option2> ... votes:option:<optionN>
Prévention votes multiples (créer une clé de verrouillage venant à échéance pour IP du client)
EXPIRE lock:<encoded ip> 60