遊戲排行榜
02-28
排行榜要解決的幾個問題:
一、 數據收集
首先談數據來源問題,因為排行榜涉及到所有用戶的數據,如果粗暴的周期性從資料庫中取,會對資料庫造成比較大的壓力。另外,排行榜演算法只使用了用戶很小一部分數據,在取排行榜所需用戶數據時,要避免將用戶的所有數據從資料庫中取出。目前我們採用的方式是專門存儲了一個表來存儲用戶排行榜用到的數據,在開服時全部讀入(要考慮一次性讀出的數據大小是否超出了資料庫的限制),在伺服器運行期間不再讀取資料庫,而是定時將在線用戶的信息刷新到排行榜所使用的信息中。通服架構下,需要由中心伺服器做排行榜功能,用戶的信息由各伺服器收集並向中心伺服器同步。
二、 排序演算法
排序演算法問題,首次排序是一個比較典型的top-k問題,採用堆排序演算法複雜度為O(k*lgn),採用hash(sort-key)的方法演算法複雜度為O(k)。在後續排序時,可以加入一些過濾優化,快速排除不會出現在排行榜的用戶,這個跟具體的排行規則有關係。
三、 周期
周期是指多久進行一次排行榜排序,不宜實時排序,目前採用10分鐘進行一次排序。
misc
一個比較常見的第三方的解決方案是依賴redis排序功能做排行榜功能。這個方案我沒有測試過,不知道在跨服環境海量數據下,會不會出現性能瓶頸。
推薦閱讀:
※通服整體架構設計概述
※記錄一次伺服器宕機分析過程(1)-排查問題
※記錄一次伺服器宕機分析過程(2)-深入Lua GC
※遊戲線上的伺服器風險
※skynet初探
TAG:遊戲伺服器 |