Отслеживание пользовательских привычек и действий? - Джанго - PullRequest
2 голосов
/ 24 марта 2010

Я работал над проектом несколько месяцев назад, и мне было необходимо внедрить систему вознаграждений . Аналогично системе значков TackOverflow S . Значки

Возможно, я не реализовал это наилучшим образом, и мне любопытно, что бы вы сказали по этому поводу.


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

Системе Stackoverflow нужно знать много информации, и у меня также складывается впечатление, что обработка данных будет усложнять.

Я бы предположил, что SO рассчитывает значки один или два раза в 24, и что, возможно, журналы хранятся или сервер, предназначенный для расчета значков.


Мысли

Ответы [ 2 ]

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

Я не думаю, что это так сложно, как вы думаете. Я очень сомневаюсь, что SO вычисляет значки с помощью своего рода журнала активности пользователя (хотя технически вся база данных является журналом активности пользователя). Когда я просматриваю списки значков, я не вижу ничего, что не может быть реализовано с помощью запроса выбора SQL.

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

0 голосов
/ 25 марта 2010

Как правило, системы бейджей / баллов могут основываться на двух вещах.

  • Журнал активности интересных событий, это, по сути, бумажный регистр поступления того, что произошло, так что вы можете пересчитать с нуля, если это когда-либо понадобится. Может быть простым (user_id, timestamp, event_id, event_detail)

  • Большую часть времени вы заранее проектировали свою систему подсчета очков, чтобы точно знать, какие счетчики оставить на пользователя. Теперь это так же просто, как иметь большую запись, которая содержит все детали. (user_id, reply_points, login_points, last_login, thumbs_up_points и т. д. и т. д.)

Теперь вы можете добавить несколько простых методов к этому объекту модели и заставить его управлять / сохранять точки по мере необходимости.

...