2009-06-29 160 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

我同意奧利。另外,你可以緩存你的分數。因此,您需要更新緩存中的產品分數,並且應用程序始終會提取緩存值。因此,即使在頁面刷新時,您也可以在不碰到數據庫的情況下獲得最新的分數。