2009-06-29 75 views
1

我曾经看到过几个关于如何确保和防止滥用排名系统(如凝视电影,产品等)的问题,但实际上并没有实现它。为了简化这个问题,安全性并不是我关心的问题,访问这个系统的人都是可信的,如果发生这种情况,滥用排名系统是微不足道的,而且更易于恢复。无论如何,我很好奇如何存储选票。实现排名系统

一个想法是拥有一张投票表,记录每张投票,然后立即在预定时间或产品的每个负载(这看起来效率低,但也许不是)投票结果和一个双在0到5之间更新到产品表中的产品条目中。

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

或者还有更好的方法来做到这一点,我没有?我希望在产品表中只有'评分'字段,但不能想到在没有额外数据的情况下更新投票的方式。

同样,数据完整性很重要,但绝不是必要的,任何想法?

+2

这可能是你感兴趣的:http://www.evanmiller.org/how-not-to-sort-by-average-rating.html – Svante 2009-06-29 10:53:19

回答

1

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

这允许快速排序,并且您还有一张桌子可以重新计算得分并阻止人们进行双重投票。

有没有必要等待写投票和更新分数。 引入问题,如果它的行为像一个传统的系统(更多的读取比写入),给你没有任何好处。

0

您的意思是说,您会将表格分开存储在一个表格中,然后用定义的策略更新产品表格中产品的相应排名? 这似乎是一种低效的存储方式。也许有这样的背景,但为什么你不想把所有选票都存放在一个表格中,并且继续将这些选票参考到相应的产品中。这给你一个实时计数。

在用户界面上,您将计算所有投票的平均值,以显示一个近似整数。这就够了,不是吗?或者我错过了什么?

+0

我认为存储产品排名的原因是速度 - 这种方式只需要在新的投票进行时进行计算,而不是在每次页面加载时进行。这不是真的关心吗? – dimo414 2009-06-29 19:00:31

0

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