Просто интересно, как вы это сделаете. Будет ли у вас какой-то процесс, который сканирует все действия, которые произошли за последние X минут? Вы будете запускать проверку обновления значка каждый раз, когда будут предприняты какие-либо действия (голосование, пониженное голосование, тег и т. Д.)? Похоже, что это будет относительно дорогостоящий процесс так или иначе.Как бы вы реализовали систему значков, такую как StackOverflow?
ответ
Возможно, что-то вроде того и другого. Вероятно, я бы поставил в очередь проверку каждый раз, когда произошло действие, и процесс, который сходит с очереди, и определяет, был ли получен значок для каждой проверки. Таким образом, это полуреальное время, не заставляя страницы загружать больше времени. Фактически, здесь, в StackOverflow, я заметил задержку между тем, когда заработал значок и когда система его реализует, поэтому этот сайт, вероятно, использует тот же подход.
Обратите внимание, что на самом деле это не реальное время при переполнении стека - на пару моих значков потребовалось несколько обновленных страниц. – 2008-09-23 00:58:44
SO использует взломы, связанные с обратными вызовами кеша сервера, чтобы как-то имитировать повторяющуюся задачу. Это обсуждается в одном из подкастов. – 2008-09-23 01:03:19
+1 Я только понял, что вы можете рассчитать его на каждое действие, но делайте это в отдельном потоке, чтобы не замедлить работу сайта. – 2008-09-23 01:03:51
У меня лично было бы задание cron или подобное, которое обрабатывало бы их на регулярной основе. Вероятно, в системе потоков «поддельный cron», где у меня будет невидимый вызов изображения и пройдите через внутренний «стек cron», чтобы увидеть, что нужно сделать.
Много значков, однако, не следует, что нужно многое сделать с ними ... они должны быть в состоянии сделать с хорошо продуманной запрос
Я бы не запустить обновление каждый раз, когда кто-то сделал действие; вместо этого я бы сделал пакетный процесс, который просматривает все действия, выполненные в последнюю минуту, суммирует все с «минутой назад» каждого пользователя и выдает на нем новые значки.
Используйте базу данных с помощью «крючков/триггеров». Затем вы можете инициировать событие при определенных изменениях состояния, например, например, у вас есть таблица, в которой каждый конкретный ответ записывается каждый раз.
Вы знаете, что ответ> 10 Upvotes == «Хороший ответ», поэтому вы просто поместите триггер, когда LAST_STATE = 9 и NEXT_STATE = 10 и ENTRY_AWARDED_GOODANSWER = false.
Postgresql - одна из таких баз данных, которая поддерживает такие триггеры.
Подробнее здесь: http://www.postgresql.org/docs/8.1/static/triggers.html
Я бы, вероятно, использовать Broker Queue Service в SQL Server для отправки действий на порядок очереди и активации поднимает кучу действий в то время, и запускает его на значок процедура проверки. Например, механизм правил значков.
Академия Khan в значительной степени присуждает значки в режиме реального времени. Они утверждают, что это важно для игрового чувства веб-сайта. У них также есть пакетная работа, которая периодически переоценивает данные и присуждает пропущенные значки.
Ben Kamens, Badges on App Engine: Implementing a real-time.... Блог был опубликован в январе 2011 года, поэтому с тех пор все изменилось.
Отправить Jeff Atwood по электронной почте, он, вероятно, расскажет вам, как они на самом деле это сделали, и если я правильно помню, это, возможно, косвенно обсуждалось в подкасте или, возможно, в одном из блогов. Я забыл. – 2008-09-23 01:00:45