2013-08-23 88 views
1

我正在創建當然需要顯示結果的網球網站。目前要獲得排名,我需要爲每個球員總結分數,然後再排序,即使我只需要單個球員的結果。我認爲當系統中的玩家數量會增加時,它會非常慢。這就是爲什麼我需要某種方式來緩存結果,並且只在某些更改時更新它們(或者在結果必須更新時添加某種超時)。創建排名表的正確方法?

另外其他的要求是能夠計算總分數,即我將有幾個比賽,我需要分別顯示所有比賽和每場比賽的比分。

我目前認爲的將是單個表來存儲所有內容。它的模式是:

ranking_tbl瑪

rank_type(可能是競爭,團隊,球員或者別的什麼)

rank_owner(誰擁有的行列,可球隊的球員行列 - 老闆將團隊)

rank_item(誰是排在隊伍的例子是播放器)

得分(實際得分排名)

排名(預緩存級別,只有當添加了新的成績更新)

排名會在我的系統的重要組成部分,大量使用,所以我需要它儘可能高效。

問題:是否有更好的方法來實現排名比使用我的表格shema?

回答

1

我認爲你的模式將起作用。我可以看到3種可能的解決方案,您可以使用它們來獲得所需的功能。

  1. 克朗 - 使用cron作業(計劃任務)更新每晚的基礎上的排名就意味着你可以在非高峯時間進行大量的處理(凌晨2點爲例)。您會安排一個腳本,按照分數重新排列玩家,爲他們分配一個等級並將其保存到數據庫中。
  2. Single Save Recalculation - 如果您一次插入一個玩家的分數,您可能會在保存任何分數後重新計算排名。這將提供出色的最新排名,但在添加大量分數時可能會有一些折中。
  3. 多重保存重新計算 - 將您的分數編譯爲包含玩家ID和分數的CSV文件。然後你可以編寫腳本來解析你的CSV,更新所有玩家的分數。一旦保存得分,您可以重新計算所有球員的等級。

我個人比較喜歡第三種選擇,但它在初始設置時會花費更多的時間消耗。

希望這會有所幫助。

+0

謝謝你的時間,系統將從少量的玩家開始,所以第二個選項應該現在做。我會接受你的回答。 – insanebits