排行榜幾乎是每個網路遊戲都有的系統,以下用erlang以例,分享一種排行榜實現方式。
每個排行榜對應乙個actor,state使用如下結構:
%
% 通用排行榜結構
-record
(rank_list,
] 已經排好序的列表
ready_list =
,%%[one_rank
] 待排序的列表
sort_time =0%
% 排行榜的重新整理間隔})
.-record
(one_rank,
).
排序是一種消耗效能的操作,因此服務端要盡量避免實時重新整理的排行榜。最好是定下每種排行榜的重新整理間隔,再用定時器實現定時排序。
有資料插入排行榜時,插入or更新ready_list裡的資料
執行排序時,對ready_list裡的資料進行排序,同時賦值給sort_list
限制排行榜的長度,也是就限制sort_list的長度,提高查詢sort_list的效能
增加1個標誌位,記錄在重新整理間隔時間內,ready_list是否發生過改變,若沒有改變,即使到達排序時間也不進行排序
每次執行排序後,同時產生兩個map, 乙個以user(玩家id)為key,#one_rank{}為value;另乙個以rank(排名)為key,#one_rank{}為value; 以空間換時間,提高查詢速度
遊戲服務端開發系列
遊戲服務端開發-好友系統
遊戲服務端開發-排行榜
遊戲服務端開發-郵件系統
遊戲服務端開發-全域性唯一id
遊戲服務端開發-aoi-九宮格法解析
遊戲服務端開發 排行榜演算法比較
以前在 做過一些實時投票,積分排名 單曲 等排行榜 遊戲中也有類似的戰鬥力排行 sns的遊戲又有好友排行等,對於此類的排行演算法在此做個總結。需求背景 檢視前top n的排名使用者 檢視自己的排名 使用者積分變更後,排名及時更新 方案一 利用mysql來實現,存放一張使用者積分表user score...
系統開發排行榜
很多時候我們找我們想要找到的人總是很難,比如技術人員想要找真正需求者,又比如需求者想找靠譜的開發團隊。於是就有了橋梁 產品經理的誕生,他們連線客戶與開發團隊,與客戶溝通好需求,再將需求整理給開發團隊。但是客戶與產品經理也是需要乙個橋梁的,這就出現了像大大神網這樣的能夠將他們連線到一起的平台。no.1...
遊戲服務端開發 一
資料儲存伺服器 遊戲中的資料大致分為靜態配置資料和動態的玩家資料。這裡主要討論玩家資料儲存的解決方案。雖然遊戲應用的寫操作要多於讀操作,但是加入快取層仍然有其必要性。多個應用伺服器啟動時從資料庫讀取資料會在瞬間給資料庫造成巨大壓力,如果將相對靜態的資料以檔案的形式放在應用伺服器本地,可以避免這個問題...