문제

I was working on a project a few months ago, and had the need to implement an award system. Similar to StackOverflow's badge system. Badges

I might have not implemented it in the best possible way, and I am curious what your say in it would be.


What would a good way to track user activities, needed for badge awarding be?

Stackoverflow's system needs to know of a lot of information, and I also get the impression that there would be a lot of data processing complicating things.

I would assume that SO calculates badges once or twice every 24, and that maybe logs are stored or a server dedicated to badge calculation.


Thoughts?

도움이 되었습니까?

해결책

I don't think is as complicated as you think. I highly doubt that SO calculates badges with some kind of user activity log (although technically the entire database is a user activity log). When I look at the lists of badges, I don't see anything that can't be implemented by running a SQL select query.

Some of the queries could be pretty complicated, and there might be some sort of fancy caching mechanism, but I don't see any reason why you would have to calculate badges in batches.

다른 팁

In general badge/point systems can be based on two things.

  • Activity log of interesting events, this is effectively the paper register receipt of what has happend such that you can re-compute from the ground up if it's ever needed. Can be as simple as (user_id, timestamp, event_id, event_detail)

  • Most of the time you've pre-designed your scoring/point system so you know exactly which counters to keep on a user. Now it's as simple as having a big record that contains all of the details. (user_id, reply_points, login_points, last_login, thumbs_up_points, etc.,etc.)

Now you can slap some simple methods on that model object and have it manage/store the points as needed.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top