1

我已经看到了几个关于如何保护和防止滥用排名系统(如盯着电影、产品等)的问题,但没有实际实施它。为了简化这个问题,我不关心安全性,访问这个系统的人都是值得信赖的,如果发生这种情况,滥用排名系统是微不足道的,而且比原因更容易恢复。无论如何,我很好奇如何存储选票。

一个想法是有一个投票表,记录每次投票,然后立即,在预定时间,或在产品的每次加载时(这似乎效率低下,但可能不是)投票被统计并在 0 和 5 之间加倍更新到产品表中的产品条目中。

或者,我将总分和投票数存储在产品表中,然后在显示时将其除以,然后将投票添加到总数中,并在有人投票时增加投票数。

或者有没有更好的方法来做到这一点,我还没有想到?我有点想在产品表中有一个“评级”字段,但想不出没有一些额外数据来更新投票的方法。

同样,数据完整性很重要,但绝不是必要的,有什么想法吗?

4

3 回答 3

1

我会为你的产品保留一个“分数”,但也会保留一张投票表,看看谁为什么投票。当有人投票时,插入投票,更新产品分数。

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

无需等待写入投票和更新分数。这带来问题,如果它像传统系统一样运行(读取次数多于写入次数),则不会给您带来任何好处。

于 2009-06-29T09:07:11.203 回答
0

您的意思是,您将投票单独存储在一个表中,然后使用定义的策略更新产品表中产品的相应排名?这似乎是一种低效的存储方式。也许有这个原因的背景;但是您为什么不想将所有投票存储在一张表中并继续将这些投票引用到相应的产品。这为您提供实时计数。

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

于 2009-06-29T09:05:59.833 回答
0

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

于 2009-07-02T07:00:11.503 回答