Хранилище данных для захвата голосов и их агрегирования
-
22-09-2019 - |
Вопрос
Я заинтересован в использовании Node.js в качестве сервера сокета для потоковой связи с десятками тысяч клиентов. Клиенты будут отправлять голоса за определенные части контента и получать обновления в реальном времени агрегированных голосов с сервера.
ДАННАЛЬНОЕ СЛУЖУЯ НУЖНА ПОДДЕРЖИВАТЬ:
- Хранение голосов
- Суммирование голосов почти в реальном времени
- Предотвращение нескольких голосов в течение произвольного периода времени (например, клиенты могут голосовать только один раз за контент каждые 1 минуту)
Что -то, что уже имеет клиентские библиотеки для node.js, было бы предпочтительным.
Решение
Я очень рекомендую Редис. Анкет Это клавиш/хранилище значения с операциями Set и List. Это также поддерживает атомные операции для прилавков. Есть клиент для redis для node.js доступен на GitHub. Анкет Вот как я бы реализовал ваши функции:
Хранение голосов
INCR votes:option:<option>
Суммирование голосов
MGET votes:option:<option1> votes:option:<option2> ... votes:option:<optionN>
Предотвращение нескольких голосов (создайте истекающий ключ блокировки для IP клиента)
EXPIRE lock:<encoded ip> 60
Не связан с StackOverflow