2011-02-24 77 views
3

我現在有兩個字段何時可以將派生數據存儲在數據庫中?

user_ID的遊戲桌,贏得

贏= 1勝,0損失

假設我想顯示的勝率。計數操作相當簡單。不過,假設我想在同一頁面上顯示數千個用戶,並且每個用戶的勝率都是一樣的。我有一些關於這種情況的可擴展性問題。是不是太黑客創建一個單獨的緩存表具有以下字段

USER_ID,win_percentage

這將每一個新遊戲被張貼的時間更新。現在勝率可以很快確定,而不是使用數千次計數操作。處理這個問題的最好方法是什麼?

回答

3

數據倉庫的鄉親說,它總是適當導出的數據存儲在數據庫中。只要它沒有更新。

的問題是更新之一。

第一。您的可伸縮性問題並不多。 「假設我想在同一頁面上顯示成千上萬的用戶,並且每個用戶的獲勝百分比」並不重要。這可以非常快速地計算出來。

這將每一個新遊戲被張貼的時間更新。

這是與存儲導出的數據的問題。更新的成本實際上可能超過計算成本。你不知道沒有實際的使用情況統計。

因此。

不要存儲派生數據,直到您可以證明(通過實際測量)它存儲它的效率更高。

2

當得出的數據是計算昂貴的並且是相對靜態的它不會變動非常頻繁或根本),你應該考慮在不同的數據庫倉儲它(不必是相同類型的數據庫或數據庫,它可能類似memcached)在不同的機器上,這樣它就不會影響事務數據庫的性能。

如果它不是一個性能問題(如計算不貴),則不要使用增加的複雜麻煩,緩存是很難得到正確的。

你已經測量並確定它是一個問題,不只是認爲它可能是一個問題吧?

記住我套用:

過早的優化,而不分析是一切罪惡的根源!

數據結構的變化可能是更好的解決方案。

user_id, wins, loses, percentage 

更新每個玩家一個記錄不會花費更多,也可能更少些取決於數據庫比一排每場比賽的結果,所得的計算。

相關問題