2

我试图弄清楚如何设置数据库和/或模型以处理各种徽章。让我们以 Stack Overflow徽章为例。每个规则都有不同的规则,有些可能只是变量不同(例如 10 条评论与 100 条评论)。

我的问题是如何在应用程序中设置这种类型验证/检查?每个徽章应该有自己的方法吗?

4

3 回答 3

1

我想有些是实时计算的,而另一些是在间歇运行的进程中计算的。

例如,对于在您的答案获得 10 次赞成时出现的徽章,可以实时计算而对性能影响很小。

另一方面,对于检查您是否达到每日声誉上限 x 次的徽章,您可能希望将其作为某种批处理作业来执行,因为您只在每天结束时检查。

关键是要让事情保持快速运行。堆栈溢出每天会收到数千个(可能是数万个)问题,可能有数十万条评论。任何计算起来不简单的东西都应该在单独的进程中运行。它使核心功能保持紧凑、有限和干净,从而实现高性能。在核心发布系统之外的流程中运行复杂的计算可以让您在不影响用户使用网站的能力的情况下这样做。如果一项任务足够复杂,您可以通过在多台机器上运行相同的进程来水平扩展。

于 2010-12-21T01:22:01.437 回答
1

如果我需要,这就是我将如何实现它:

我将设置一些队列管理器(有很多这样的软件)并编写一个代理,它将处理来自队列的消息。

每次发生任何事件时,例如:您查看了一个主题,您编辑了您的评论,您编辑了您的答案,您编辑了另一个人的答案,您投票等等 - 您收集了更多的消息,以及事件描述。是的,那里的消息量真的很大。

收集大量消息后,您可以启动一个代理,该代理将按计划或实时处理消息。

使用此模式,您可以根据需要将代理扩展到尽可能复杂的徽章。

于 2010-12-21T01:22:44.917 回答
1

由于 SO 运行 SQL Server,SQL Server 代理作业定期运行以制表统计。当满足条件时,作业中的存储过程将插入到徽章/等表中。

触发器将是另一种选择,但它们的执行不能针对多个用户的范围而延迟。

于 2010-12-21T01:24:39.427 回答