我正在我的说唱歌词解释网站Rap Genius上实现类似Stackoverflow的声誉系统:
我的问题是如何实现这一点。具体来说,我正在尝试决定是否应该创建一个reputation_events
表来帮助重新计算声誉,或者我是否应该在需要时从头开始重新计算。
reputation_events
表格中包含以下列:
每当发生影响声誉的事情时,我会在reputation_events
中插入相应的行。这样可以轻松重新计算声誉并生成人类可读的事件序列,从而生成给定人员的声誉。
另一方面,任何给定的操作都可能影响多个用户的声誉。例如,假设用户A在给定歌曲上超过用户B;基于“对歌曲有最多解释”的目标,我必须记住删除B的原始“has_the_most_explanations”事件(或者我可能会为B添加新事件?)
答案 0 :(得分:5)
一般来说,我从不喜欢数据存在于多个地方。听起来您的“reputation_events”表将包含可以从其他数据计算的数据。如果是这样,我会从头开始重新计算,除非性能影响成为一个真正的问题。
当您计算了存储的数据时,您可能无法正确对应基础数据 - 基本上是损坏的状态。为什么即使你可以避免它也可以实现呢?
答案 1 :(得分:1)
为了重新计算,我会做一个声誉事件列表,并且能够追踪总重复值的原因。
但为什么要有一个“名称”列,为什么不只是一个带有正数或负数的值?
此表格会变得很大,请确保您缓存。