哪一个更好地计算星级评分(在性能意义上)

时间:2016-12-14 07:49:58

标签: database algorithm web

我认为哪一个是显示平均星级的最佳方式。当给出星级值的评论时,计算平均值是否更好,并将平均值存储在DB字段中,所以当我加载页面时,我只检查1个字段的值?或者每次用户加载页面时计算平均值?

1 个答案:

答案 0 :(得分:0)

如果没有样本架构和典型用法的概念,几乎不可能提供一个好的答案。

你提出的问题是"我应该对我的数据库进行非规范化" - 此主题有lots other {。}}。

从性能的角度来看,问题归结为“你需要多久写一次,你需要多久阅读一次,以及数据的一致性有多重要?"”

如果您的应用程序用户体验是"星级评分"显示几乎从不,并计算星级评分是“便宜的”,然后性能影响很小。

如果您显示带有项目的长页面滚动页面,每个项目都有一个星级评分,性能优势可能很高,特别是如果计算星级评级是一项昂贵的操作。

如果星级评分在所有情况下都非常准确,那么您必须添加一些额外的逻辑,例如锁定行为,这可能会对您的数据库产生巨大影响。

如果您的应用程序体验意味着您可能拥有大量新评级的时段,则可能会对"写"操作

通常,最好将应用程序设计为规范化(因此它易于调试和维护),并衡量是否需要执行更多操作。现代数据库引擎可以处理的远远超过大多数人意识到的。

**更新**

感谢您的更新。

您的架构建议应该是快速的,没有非规范化 - 您应该加入reviews表上的外键。这一切都取决于具体情况,但除非您需要扩展到数以亿计的产品和评论,否则我怀疑您是否曾经看到数据库性能存在可衡量的差异。保持平均得分的逻辑"更新列可能比在运行中计算更多的性能开销。

根据我的经验,非规范化是一件昂贵的事情 - 它使您的代码更难理解和调试,并导致有趣的错误。从性能的角度来看,如果您正在构建一个网站,那么通过关注HTTP级别的缓存,您将获得更好的回报。