2

这不是 SO Meta 问题。我仅使用 SO 作为示例。

在 StackoverFlow 中,每个答案、每个评论、每个问题、每个投票都会在某个时间点产生一个徽章。我的意思是在每个操作之后都会测试一个查询列表。

例如,如果 Mr.A 投票赞成 Mr.B Answer。所以我们必须检查这个 Mr.B 的答案是否被投票了 100 次,所以给 Mr.B 一个徽章,是否 Mr.A 第 100 次投票所以给他一个徽章。

这意味着我必须为每个操作运行至少 100 个查询/IfElse。

现在我的真实例子是我有一个应用程序,我从考勤机接收在线数据。当用户向机器出示他的卡时。我收到这个并将其存储为记录。现在根据这个记录我有多个计算。即他迟到了吗。他迟到了 3 天。他在右班吗(白班/夜班)。今天是假期。这是加班吗。他是不是早……等等……等等……等等。

这种要求的最佳策略是什么。

更新:SO 团队可以指导我们吗?

4

4 回答 4

3

您使用队列和工作流。通过这种方式,您可以将更新时刻与实际通知分离,从而允许系统扩展。紧密耦合、基于触发器或类似的解决方案无法扩展,因为每次更新都必须等待所有相关方对通知做出反应。使用工作流的处理引擎设计允许通过更改数据轻松添加步骤和通知消费者,而无需更改架构。

例如,查看 MSDN 如何使用队列来处理 MSDN 内容的类似问题:构建 MSDN 聚合系统

于 2009-09-18T03:15:57.457 回答
0

您不能只使用“标志”(其他表、其他列等)来指示这些特殊情况何时发生吗?这样,您只需进行一次查找(每个特殊情况),而不是大量查找和/或连接。您可以在插入时记录更改(迟到第三天等)。

于 2009-09-18T03:11:36.333 回答
0

此外,要检查的内容取决于阈值。

例如,有人最近 3 天缺席吗?仅当此人缺席 2 天时才需要进行该检查。

我的意思是-您不必每次都检查所有内容。
另外,有多少信息需要立即更新?SO不会实时更新内容。

于 2009-09-18T03:23:52.550 回答
0

可能您必须使用两个数据库并在它们之间进行在线复制 - 一个用于获取实时数据,第二个您可以使用硬计算(例如每 10 分钟或按请求计算所有 latings)。在不同的服务器上找到此数据库。

于 2009-09-18T03:28:31.817 回答