Datenspeicher zur Erfassung von Stimmen und zur Aggregation
-
22-09-2019 - |
Frage
Ich bin daran interessiert, Node.js als Socket-Server für Stream-basierte Kommunikation mit Zehntausenden von Clients zu verwenden. Clients senden Stimmen für bestimmte Inhalte und erhalten nahezu Zeitaktualisierungen der aggregierten Abstimmung vom Server.
Der Datenspeicher muss unterstützen:
- Die Stimmen speichern
- Zusammenfassung der Stimmen in der Nähe von Real Time
- Verhinderung mehrerer Stimmen innerhalb eines willkürlichen Zeitraums (z. B. Kunden können alle 1 Minute nur einmal für einen Inhalt stimmen)
Etwas, das bereits Client -Bibliotheken für node.js hat, wäre vorzuziehen.
Lösung
Ich würde sehr empfehlen Redis. Es ist ein Schlüssel-/Wertspeicher mit Set- und Listenvorgängen. Es unterstützt auch Atomoperationen für Zähler. Es gibt einen Client für Redis für node.js auf Github. So würde ich Ihre Funktionen implementieren:
Die Stimmen speichern
INCR votes:option:<option>
Zusammenfassung der Stimmen
MGET votes:option:<option1> votes:option:<option2> ... votes:option:<optionN>
Verhinderung mehrerer Stimmen (Erstellen Sie einen ablaufenden Sperrschlüssel für die Kunden -IP)
EXPIRE lock:<encoded ip> 60
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow