Хранилище данных для сбора голосов и их агрегирования - PullRequest
2 голосов
/ 25 марта 2010

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

Хранилище данных должно поддерживать:

  1. Хранение голосов
  2. Суммирование голосов почти в реальном времени
  3. Предотвращение нескольких голосов в течение произвольного периода времени (например, клиенты могут голосовать только один раз за часть контента каждую 1 минуту)

Было бы предпочтительнее то, что уже имеет клиентские библиотеки для Node.js.

1 Ответ

2 голосов
/ 27 марта 2010

Я очень рекомендую Redis . Это хранилище ключей / значений с операциями 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...