我们将如何实现像StackOverflow这样的徽章系统?
只是想知道我们将如何做。我们是否有某种过程可以扫描过去X分钟内发生的所有操作?每次进行任何操作(表决,否决,标签等)时,我们都会触发徽章更新检查吗?看来这将是一种相对昂贵的过程。
解决方案
也许两者兼而有之。我可能会在每次操作发生时将支票排队,并有一个流程排入队列并确定是否为每张支票都赢得了徽章。这样,它是半实时的,而不会导致页面花费更多的时间来加载。实际上,在StackOverflow上,我注意到获得徽章和系统意识到徽章之间存在延迟,因此该站点可能使用相同的方法。
我个人会有一份定期的工作,或者定期处理这些工作。可能是在"假cron"流程系统上,在那里我将进行不可见的图像调用,并通过内部的" cron堆栈"查看需要执行的操作。
但是,许多徽章不需要太多的工作...它们应该能够通过精心设计的查询来完成
每当有人执行操作时,我都不会触发更新;我要做的是一个批处理过程,该过程查看最后一分钟执行的所有操作,将每个用户的"分钟前"状态汇总起来,然后根据该状态发出新的标志。
将数据库与"挂钩/触发器"配合使用。然后,我们可以在某些状态变化时触发事件,例如,我们有一个表记录给定答案的每一次投票。
我们知道Answer> 10 Upvotes ==" Good Answer",因此我们只需要在LAST_STATE = 9和NEXT_STATE = 10且ENTRY_AWARDED_GOODANSWER = false时触发。
Postgresql是一种支持此类触发器的数据库。
在此处阅读更多信息:http://www.postgresql.org/docs/8.1/static/triggers.html
我可能会在SQL Server中使用Service Broker队列将操作发送到队列上,然后激活过程一次拾取一堆操作并针对Badge检查过程运行它。例如,徽章规则引擎。