Хранилище данных для захвата голосов и их агрегирования

StackOverflow https://stackoverflow.com/questions/2515415

  •  22-09-2019
  •  | 
  •  

Вопрос

Я заинтересован в использовании Node.js в качестве сервера сокета для потоковой связи с десятками тысяч клиентов. Клиенты будут отправлять голоса за определенные части контента и получать обновления в реальном времени агрегированных голосов с сервера.

ДАННАЛЬНОЕ СЛУЖУЯ НУЖНА ПОДДЕРЖИВАТЬ:

  1. Хранение голосов
  2. Суммирование голосов почти в реальном времени
  3. Предотвращение нескольких голосов в течение произвольного периода времени (например, клиенты могут голосовать только один раз за контент каждые 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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top