Как ограничить количество голосов, которые пользователь может отдать за 24 часа? - PullRequest
1 голос
/ 27 июля 2011

Я работаю над созданием модуля в Pligg CMS , который ограничил бы количество голосов, которое он может дать за 24 часа. Если они превышают лимит (скажем, 40 / день), всплывающее окно JavaScript появляется, чтобы сказать «замедлиться!» ... похоже на то, как Digg обновил свою систему.

Каков наилучший способ отслеживать ежедневные голоса? Должен ли я запрашивать базу данных MySQL каждый раз, когда проводится голосование, чтобы проверить, превышают ли они предел? Или разумнее хранить данные в каком-то физическом файле на сервере? Я действительно не знаю, как создать данные кеша, поэтому я думаю о создании функции, чтобы каждый раз вручную проверять количество голосов. Хотелось бы услышать лучшие предложения, конечно!

Ответы [ 2 ]

4 голосов
/ 27 июля 2011

Используйте вашу базу данных и при сохранении - запросите в базе данных количество голосов, поданных за определенный период времени, и, если ниже вашего порога, сохраните. Если превышено пороговое значение, верните предупреждение JavaScript, чтобы сообщить пользователю о проблеме.

0 голосов
/ 27 июля 2011

Возможно, вы захотите получить что-то масштабируемое, например memcached или membase, чтобы отслеживать, будет ли объем большим.Если вы используете memcaced, вы захотите реализовать его так, чтобы каждый голос обновлял счетчик в memcached и одновременно добавлял запись журнала, которая свернулась бы в консолидированную запись MySQL.Хорошая вещь в том, что вы сохраните MySQL в качестве основного источника, который может догонять с любой скоростью - то есть не имеет особого значения, если он несколько минут отстает в кактусе.Когда вы пытаетесь обновить memcached копию и обнаруживаете, что она не находится в memcache, вы просто извлекаете счет из MySQL, и у вас не будет синхронизированного счета 99,99%, который был бы достаточно хорош для дополнения всплывающего окна, когда использование достигает 40голосов.

Однако, если вы ожидаете получить только несколько голосов в час, вы можете просто использовать MySQL без каких-либо средств масштабирования для кэширования.

...