明顯的(但昂貴)的解決方案:數學!近似均值,而不存儲整個數據集
我想用來存儲軌道(1-10)的評價在這樣的表:
TrackID
Vote
然後簡單
SELECT AVERAGE(Vote) FROM `table` where `TrackID` = some_val
計算平均值。
但是,我擔心可擴展性,尤其是每次需要重新計算時。
建議,但可能笨,解決方法:
TrackID
Rating
NumberOfVotes
每當有人張選票,Rating
與
new_rating = ((old_rating * NumberOfVotes) + vote)/(NumberOfVotes + 1)
更新,併爲TrackID
的新Rating
值存儲。現在每當需要Rating
時,這是一個簡單的查找,而不是計算。
顯然,這並不計算平均值。我已經嘗試了一些小數據集,並且接近平均值。我相信隨着數據集的增加,它可能會收斂?但我擔心它可能會發生分歧!
你們認爲什麼?謝謝!
現在很明顯,您提到它了!感謝Oli :-) – 0atman 2011-01-10 10:55:36