關于游戲排行榜設計開發的一些總結

前言

不管是手游還是端游,貌似都離不開排行榜,沒有排行榜的游戲是沒有靈魂的游戲,因為排行榜可以讓用戶分泌多巴胺,這樣日活才會上來,有了用戶就有錢賺。產品想方設法的讓用戶留存,設計各種排行榜:個人段位排名、個人積分或金幣排名、全球榜單實時排名。如果用戶量少的話,直接用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的功能,不需要其他復雜邏輯,對于數據量比較少、性能要求不高,可以

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444243.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444243.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444243.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

leetcode6. Z 字形變換

將一個給定字符串根據給定的行數,以從上往下、從左到右進行 Z 字形排列。 比如輸入字符串為 "LEETCODEISHIRING" 行數為 3 時,排列如下: L C I R E T O E S I I G E D H N 之后,你的輸出需要從左往右逐行…

游戲排行榜-跳表實現原理分析

前言 做游戲的一般都有游戲排行榜的需求,要查一下某個uid的積分排名第幾,這里我給大家推薦之前我們使用的一種排序算法,跳表skiplist。 跳表是一個隨機化的數據結構。它允許快速查詢一個有序連續元素的數據鏈表。跳躍列表的平均查找和插入時間復雜度都是O(log n),優于普通隊…

如何使用redis來實現常見的游戲排行榜

前言 前面幾篇文章給大家聊了下目前的常用的排行榜做法。 關于游戲排行榜設計開發的一些總結 游戲排行榜-跳表實現原理分析 那么這篇文章將給大家帶來如何使用redis來實現常見的游戲排行榜功能。 為什么使用redis 如果你已經是redis的高級玩家可以跳過這段介紹。下面這段redis的…

leetcode43. 字符串相乘 經典大數+和*

43. 字符串相乘 難度中等264 給定兩個以字符串形式表示的非負整數 num1 和 num2,返回 num1 和 num2 的乘積,它們的乘積也表示為字符串形式。 示例 1: 輸入: num1 "2", num2 "3" 輸出: "6" 示例 2: 輸入: num1 &q…

ffmpeg優化mp4以及hls參數設置

ffmpeg是開源的音頻視頻編解碼工具 然而默認的參數對MP4不友好,需要自己設置 這里記錄一下簡單的優化參數 優化MP4使moov atom位于文件開頭 moov atom是mp4的索引信息. 瀏覽器獲得moov atom后,可以隨機搜索文件位置,讓拖動自由 ffmpeg默認是將moov atom放在文件末尾,我們需要前…

游戲熱更新:游戲客戶端熱更新那點事

前言 熱更新的內容可以是美術資源,可以是代碼,但相對來說,美術資源的更新不會受到約束,代碼實際上是重災區。本文介紹的主要是客戶端代碼熱更新。 熱更新對于開發者來說是一件麻煩事,特別對于看重效率、便捷性和結構的程序員來說,熱更新就是運營人員的不懂技術的…

Unity客戶端開發優化要點

腳本方面1、不需要高頻率調用的函數,使用InvokeRepeating(或Time.frameCount%n)代替Update2、SetParent、Instantiate、Find、IO操作、SetActive、GetComponent等耗時較長的接口應在loading的時候做3、Update盡量減少代碼邏輯、減少臨時變量、…

leetcode214. 最短回文串

214. 最短回文串 難度困難114 給定一個字符串 s,你可以通過在字符串前面添加字符將其轉換為回文串。找到并返回可以用這種方式轉換的最短回文串。 示例 1: 輸入: "aacecaaa" 輸出: "aaacecaaa"示例 2: 輸入: "abcd" 輸出: "…

Java對象的序列化

對象序列化就是把一個對象變為二進制數據流的一種方法。 一個類要想被序列化,就行必須實現java.io.Serializable接口。雖然這個接口中沒有任何方法,就如同之前的cloneable接口一樣。實現了這個接口之后,就表示這個類具有被序列化的能力。 先…

游戲服務器架構:網絡服務器端程序線程劃分

服務器端高性能網絡編程的核心在于架構,而架構的核心在于進程-線程模型的選擇。 作為服務器需要做網絡數據的收發,需要做數據庫拉取和保存,需要做日志存儲,需要做常規的游戲邏輯處理.....在這里我把這些功能劃分為三個大的線程類型:IO線程,事件線程,第三方庫線程。 …

游戲中的常見概率設計分析

前言游戲中的概率真的是讓人又愛又恨,很多玩家因為自己的屌絲氣質(白嫖)而棄坑玩不下去的,比如人盡皆知的某陰陽師,除了氪金,還肝,而且如果你的臉真的非常的黑,那也是打不過那些0氪金…

一個通用游戲后臺的設計模式實踐總結

搞業務開發的時候,發現有一些代碼的開發會讓人感覺非常簡便舒服,有一些代碼的開發卻有時候會讓人感覺心智負擔比較大。逐步總結的過程中,發現讓開發人員寫起來感覺舒服的代碼,大概率是因為當前模塊與其他模塊代碼耦合度低&#xf…

leetcode103. 二叉樹的鋸齒形層次遍歷

給定一個二叉樹,返回其節點值的鋸齒形層次遍歷。(即先從左往右,再從右往左進行下一層遍歷,以此類推,層與層之間交替進行)。 例如: 給定二叉樹 [3,9,20,null,null,15,7], 3 / \ 9 20 …

大型游戲后臺實踐淺談

國家新聞出版署8月30日下發切實防止未成年人沉迷網絡游戲的通知,要求從今天(9月1日)起,所有網絡游戲企業僅可在周五、周六、周日和法定節假日每日20時至21時向未成年人提供1小時服務,其他時間均不得以任何形式向未成年人提供網絡游戲服務。通知發布后,各大游戲廠商火速回…

如何使用弱網環境來驗證游戲中的一些延遲問題

關于弱網 在當今移動互聯網盛行的時代,網絡的形態除了有線連接,還2G/3G/Edge/4G/Wifi等多種手機網絡連接方式。不同的協議、不同的制式、不同的速率,使移動應用運行的場景更加豐富。 從測試角度來說,需要額外關注的場景就遠不止斷網、網絡故障等情況了。對于弱網的數據定義…

使用nginx分片功能提升緩存效率,支持可拖拽式播放視頻

Nginx的slice模塊可以將一個請求分解成多個子請求,每個子請求返回響應內容的一個片段,讓大文件的緩存更有效率。 HTTP Range請求 HTTP客戶端下載文件時,如果發生了網絡中斷,必須重新向服務器發起HTTP請求,這時客戶端已經有了文件的一部分,只需要請求剩余的內容,而不需要…

Nginx 配置TCP和UDP負載均衡

前言 Nginx除了以前常用的HTTP負載均衡外,Nginx增加基于TCP協議實現的負載均衡方法。 HTTP負載均衡,也就是我們通常所有“七層負載均衡”,工作在第七層“應用層”。而TCP負載均衡,就是我們通常所說的“四層負載均衡”,工作在“網絡層”和“傳輸層”。例如,…

leetcode116. 填充每個節點的下一個右側節點指針

116. 填充每個節點的下一個右側節點指針 難度中等128 給定一個完美二叉樹,其所有葉子節點都在同一層,每個父節點都有兩個子節點。二叉樹定義如下: struct Node {int val;Node *left;Node *right;Node *next; } 填充它的每個 next 指針&am…

你的代碼是否按照高內聚、低耦合的原則來設計的?

我們一直強調軟件開發中要按照高內聚、低耦合的設計原則來做代碼結構設計。c語言和c++不同,c語言面向過程、c++面向對象。 真正的項目中,要對業務升級,原來的業務函數需要保留,要保證老的功能繼續維持,不能直接刪除,這時候c語言面向過程,通常使用回調的方法。c+…

leetcode117. 填充每個節點的下一個右側節點指針 II

給定一個二叉樹 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每個 next 指針,讓這個指針指向其下一個右側節點。如果找不到下一個右側節點,則將 next 指針設置為 NULL。 初始狀態下,所有 next 指針都被…