2008-09-23 2 views
16

Просто интересно, как вы это сделаете. Будет ли у вас какой-то процесс, который сканирует все действия, которые произошли за последние X минут? Вы будете запускать проверку обновления значка каждый раз, когда будут предприняты какие-либо действия (голосование, пониженное голосование, тег и т. Д.)? Похоже, что это будет относительно дорогостоящий процесс так или иначе.Как бы вы реализовали систему значков, такую ​​как StackOverflow?

+0

Отправить Jeff Atwood по электронной почте, он, вероятно, расскажет вам, как они на самом деле это сделали, и если я правильно помню, это, возможно, косвенно обсуждалось в подкасте или, возможно, в одном из блогов. Я забыл. – 2008-09-23 01:00:45

ответ

12

Возможно, что-то вроде того и другого. Вероятно, я бы поставил в очередь проверку каждый раз, когда произошло действие, и процесс, который сходит с очереди, и определяет, был ли получен значок для каждой проверки. Таким образом, это полуреальное время, не заставляя страницы загружать больше времени. Фактически, здесь, в StackOverflow, я заметил задержку между тем, когда заработал значок и когда система его реализует, поэтому этот сайт, вероятно, использует тот же подход.

+0

Обратите внимание, что на самом деле это не реальное время при переполнении стека - на пару моих значков потребовалось несколько обновленных страниц. – 2008-09-23 00:58:44

+1

SO использует взломы, связанные с обратными вызовами кеша сервера, чтобы как-то имитировать повторяющуюся задачу. Это обсуждается в одном из подкастов. – 2008-09-23 01:03:19

+0

+1 Я только понял, что вы можете рассчитать его на каждое действие, но делайте это в отдельном потоке, чтобы не замедлить работу сайта. – 2008-09-23 01:03:51

0

У меня лично было бы задание cron или подобное, которое обрабатывало бы их на регулярной основе. Вероятно, в системе потоков «поддельный cron», где у меня будет невидимый вызов изображения и пройдите через внутренний «стек cron», чтобы увидеть, что нужно сделать.

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

2

Я бы не запустить обновление каждый раз, когда кто-то сделал действие; вместо этого я бы сделал пакетный процесс, который просматривает все действия, выполненные в последнюю минуту, суммирует все с «минутой назад» каждого пользователя и выдает на нем новые значки.

2

Используйте базу данных с помощью «крючков/триггеров». Затем вы можете инициировать событие при определенных изменениях состояния, например, например, у вас есть таблица, в которой каждый конкретный ответ записывается каждый раз.

Вы знаете, что ответ> 10 Upvotes == «Хороший ответ», поэтому вы просто поместите триггер, когда LAST_STATE = 9 и NEXT_STATE = 10 и ENTRY_AWARDED_GOODANSWER = false.

Postgresql - одна из таких баз данных, которая поддерживает такие триггеры.

Подробнее здесь: http://www.postgresql.org/docs/8.1/static/triggers.html

1

Я бы, вероятно, использовать Broker Queue Service в SQL Server для отправки действий на порядок очереди и активации поднимает кучу действий в то время, и запускает его на значок процедура проверки. Например, механизм правил значков.

0

Академия Khan в значительной степени присуждает значки в режиме реального времени. Они утверждают, что это важно для игрового чувства веб-сайта. У них также есть пакетная работа, которая периодически переоценивает данные и присуждает пропущенные значки.

Ben Kamens, Badges on App Engine: Implementing a real-time.... Блог был опубликован в январе 2011 года, поэтому с тех пор все изменилось.