2012-07-31 56 views
1

在我的要求中,網站上的每個用戶都可以看到附加到其他用戶的分數。它根據他們的配置文件參數進行計算。我給別人的分數將是1分,但他們對我的分數將是另一分。需要數據庫中的用戶到用戶數據。如何避免災難?

我在MySQL數據庫中已經做了迄今爲止 表所示:

 
___UserID1___|___UserID2___|___Score___|___Last_Uopdated___ 
    1   |  2  | 45  | 1235686744 
    2   |  1  | 24  | 1235645332 

當用戶查看某人的頁面,如果在數據庫中,如果存在這種對記錄我的分數類檢查不是,計算並記錄它。這工作正常,因爲沒有人會絕對看到網站上的每個用戶頁面。

現在我需要吸引用戶並根據分數進行排序。所以我想,我可以創建一個cronjob,並且每天晚上都運行它,因此它會更新數據庫中的分數併爲每對用戶創建它們。

那麼,問題是我正在爲超過50萬用戶計劃一個系統,我很擔心,它會將我的數據庫關閉並創建巨大的數據庫。因此,對於500,000我們正在談論大約250億條記錄...:/

有沒有人知道任何其他方式來創建此功能?可以即時計算......或以其他方式計算?

+1

你爲什麼不在飛行中計算它? – 2012-07-31 06:31:58

+1

爲什麼用戶分數取決於查看用戶配置文件的用戶?或者用戶可以分配個人點給彼此? – 2012-07-31 06:33:40

+0

問:當user1登錄時,他究竟看到了什麼? 499,999行,爲他的「相對」分數給對方用戶?或者是什麼? – paulsm4 2012-07-31 06:35:43

回答

0

如果我處於您的情況,我會即時創建計算。我會使用你的函數生成分數,然後將這些值存儲到數據庫中。這樣,每當任何用戶訪問任何頁面時,分數都會更新。這是一種漸進式方法,而不是試圖在一次可能的每一種組合上運行該功能。再加上沒有更多的數據庫災難:)

如果你有一個頁面,所有的用戶評分排名,它會更簡單,如果你使用分頁和使用ORDER BY和OFFSET,SQL查詢的LIMIT功能,而不是全部獲取用戶一次。