明白な(しかし高価な)解決策:全体のデータを格納することなく、平均値を近似するには、設定
私はこのような表にトラック(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
が欲しいときは、計算ではなく簡単なルックアップです。
明らかに、これは平均を計算しません。私はいくつかの小さなデータセットを試しました、そしてそれは平均に近似します。私はそれがデータセットが増えるにつれて収束するだろうと信じていますか?しかし、私はそれが発散するかもしれないと心配です!
あなたはどう思いますか?ありがとう!
これで明らかになりました。おかげでオリ:-) – 0atman