代码之家  ›  专栏  ›  技术社区  ›  dimo414

实行分级制度

  •  1
  • dimo414  · 技术社区  · 17 年前

    我已经看到了几个关于如何保护和防止滥用排名系统的问题(比如看电影、产品等),但实际上并没有看到任何问题。为了简化这个问题,安全性对我来说不是一个问题,访问这个系统的人都是可信的,如果发生排名系统被滥用的话,这是微不足道的,而且比原因更容易恢复。不管怎样,我很好奇如何保存选票。

    一种想法是建立一个投票表,记录每一次投票,然后立即、在预定的时间或在产品的每一个负载上(这看起来效率很低,但可能不是),对投票进行计数,并在产品表的条目中更新一个介于0和5之间的双精度值。

    或者,我在Products表中存储总得分和投票数,并在显示时将其除以,然后在某人投票时将投票添加到total和increment number。

    还是有更好的方法来做我还没有想到的?我希望在产品表中有一个“评级”字段,但如果没有其他数据,就无法想到更新投票的方法。

    同样,数据完整性也很重要,但绝对没有必要,有什么想法吗?

    3 回复  |  直到 17 年前
        1
  •  1
  •   Oli    17 年前

    我会对你的产品进行“评分”,但也会保留一个投票表,看谁投了什么票。当有人投票时,插入投票,更新产品得分。

    这允许快速排序,并且您还可以有一个表来重新计算来自和阻止人们双重投票的分数。

    不需要等待写投票和更新分数。那 引入问题,如果它像一个传统的系统(读比写多得多),则不会给您带来任何好处。

        2
  •  0
  •   Priyank    17 年前

    您的意思是,您将把投票单独存储在一个表中,然后用定义的策略更新产品表中产品的相应排名? 这似乎是一种效率低下的存储方式。也许有这样一个背景;但是为什么你不想把所有的投票都存储在一个表中,并且不断地将这些投票引用到各自的产品中。这会给你一个实时计数。

    在UI上,您将计算所有投票的平均值,并将其显示为一个接近整数的值。这就足够了,是吗?还是我错过了什么?

        3
  •  0
  •   Sathya    17 年前

    我同意奥利的观点。此外,您还可以缓存分数。因此,您更新了缓存中的产品得分,并且您的应用程序总是获取缓存值。因此,即使在页面刷新时,您也可以在不访问数据库的情况下获得最新的分数。