我在说唱歌词解释网站Rap Genius上实现了类似Stackoverflow的信誉系统:
我的问题是如何实现这一目标。具体来说,我正在尝试决定是否应该创建
reputation_events
表来帮助重新计算信誉,或者是否只需要在需要时从头开始重新计算。reputation_events
表将包含以下列:每当发生影响声誉的事件时,我都会在
reputation_events
中插入相应的行。这使得重新计算声誉并生成易于理解的事件序列(生成给定人员的声誉)变得容易。另一方面,任何给定的 Action 都可能影响多个用户的声誉。例如,假设用户A在给定的歌曲上超过了用户B;基于“对歌曲拥有最多的解释”目标,我将不得不记住删除B的原始“has_the_most_explanations”事件(或者也许我会为B添加一个新事件?)
最佳答案
总的来说,我从来不希望数据存在于多个地方。听起来您的“reputation_events”表将包含可以从其他数据计算出的数据。如果是这样,除非性能影响成为一个真正的问题,否则我将重新进行计算。
存储计算出的数据后,就有可能与基本数据不正确对应-基本上是损坏的状态。如果可以避免,为什么还要使它成为可能?
关于ruby-on-rails - 实现Stackoverflow风格声誉的最佳方法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3293035/