2012-06-11 23 views
0

我正在爲用戶創建一個小應用程序來創建集合。我想在那裏有一個評級系統。而現在,因爲我想覆蓋我的所有領域,讓我們假裝我有很多訪問者。性能起作用,尤其是在價格方面。在db中獲取平均值或保留臨時數據 - 性能問題

讓我們假設我有rates表,在那裏我有idgame_iduser_idrate。數據很簡單,每個用戶都有一個條目。我們再假設,有1000個用戶會對一個遊戲進行評分。我想打印出該遊戲子頁面上的平均費率(以及其他地方,如遊戲列表中的平均費率)。現在,我有兩個場景一起去:

  1. 每次顯示的遊戲時間獲得AVG

  2. games中創建另一列,調用temprate並存儲遊戲的費率。它會在有人投票時更新。

這兩種情況有明顯的缺陷。第一個對我的主機來說更加緊張,因爲它確實會消耗更多的電源。 Secound在評級時更多地工作(獲取所有遊戲數據,提交速度,獲得新的AVG)。

請指教一下,我應該選擇哪種場景?或者,也許你有其他想法?

我使用PDO而沒有框架。

+1

(3)保持在平均Memcache等緩存。 – Wrikken

+0

有點相關的問題 - 用戶可以不止一次地給一個給定的遊戲打分嗎? –

+0

Wrikken - memcache看起來非常非常好。你能否給我更多的細節(直截了當,沒有深入研究文檔)?我仍在考慮要走的路。 Girish Rao - 是和否。用戶可以更改他的投票,這將被視爲更新,而不是新記錄。 –

回答

0

所以我終於設法解決這個問題。我使用基於轉儲數組的文件緩存到文件中。我只是喜歡if (cache) { $var = cache } else { $var = db }。目前,我正在使用JG Cache,但我可以很快寫下類似的東西,但現在 - 這是一個很好的解決方案。

0

我已經與你的「第2號」解決方案的變體(更新單獨的評級專欄),也許在一個單獨的表中爲此。

如果寫入次數成爲問題,那麼在select avg(foo) from ...之後會很好,並且有很多方法可以通過定期更新平均評分或每隔一段時間處理新的投票來減輕寫入次數。

可能的那麼最終你不能只是做一個AVG()反正,因爲你必須要考慮每票欺詐,calculating a sort score,誰知道還有什麼,

+0

感謝您的寶貴意見!我從來沒有想過把投票視爲欺詐,因爲我只有「積極」的投票。或者我應該認爲「積極」只有5-10,「消極」是1-5? –

+0

這真的取決於你的用戶和事物被「投票」。通常情況下,選票將以1-2或7-10落在一起(如果你認爲某個選票是5票,爲什麼選票呢?)。這也取決於你想要測量什麼。例如,如果您正在製作推薦引擎併爲此尋找輸入內容,那麼也許5或更好的內容可能足以表明用戶(大多數情況下可能)喜歡它。 –