前言
不管是手游還是端游,貌似都離不開排行榜,沒有排行榜的游戲是沒有靈魂的游戲,因為排行榜可以讓用戶分泌多巴胺,這樣日活才會上來,有了用戶就有錢賺。產品想方設法的讓用戶留存,設計各種排行榜:個人段位排名、個人積分或金幣排名、全球榜單實時排名。如果用戶量少的話,直接用mysql一張表存儲著用戶跟某個段位或者積分,然后查的時候再從高到低order by排序下。當然用戶量很少的話是可以的,但隨著用戶量猛增,達到千萬、億級的話,這個肯定行不通了。你可能說我加索引、再多的話分庫分表總行了吧。思路是沒錯的,但這不是很好的方案,排行榜實時更新,億級用戶這io想象都怕。
常用方案和對比
在游戲中,經常會有當玩家的某一個屬性,或者多個屬性發生變化的時候會根據一個加權公式來計算score,根據score來動態調整排名,查看前top N的排名用戶。那么針對這種需求,我們經常會使用如下一些方案:
方案一:
利用MySQL來實現,存放一張用戶積分表user_score,結構如下:
取前top N,自己的排名都可以通過簡單的sql語句搞定。
select * from user_score order by score limit 0,10;//查詢前10名
算法簡單,利用sql的功能,不需要其他復雜邏輯,對于數據量比較少、性能要求不高,可以