海量使用者積分排名演算法

2021-08-08 19:00:59 字數 592 閱讀 4298

使用者**,使用者擁有積分,積分可能會在使用過程中隨時更新,設計一種演算法,在使用者登入時顯示其當前基本排名,積分為非負整數,且小於100萬。

海量使用者積分排名演算法:

1. 利用資料庫,建立表結構為使用者id和積分的表,用sql查詢得到排名。優點是簡單,利用sql功能,無需複雜查詢邏輯,不引入額外的儲存結構。缺點也明顯,每次全表掃瞄,如果積分更新的鎖定會影響查詢效率。

2.均勻分割槽設計。將資料庫分成幾張表,表結構是from_score, to_score, count。優點避免全表掃瞄。缺點:積分非均勻分布使得效能提公升不理想

3. 樹形分割槽設計。採用分級分割槽:一級分割槽:分成兩個區間;二級分割槽:把一級區間分成多個子區間。以此類推,直到葉子節點。這就成為了乙個平衡二叉樹結構。每次更新使用者積分,則更新此排名樹。每次更新是log n級別。缺點是演算法相對複雜。

4. 積分排名陣列:使用者積分從s變成s+n,積分小於s的和大於s+n的都沒有變化,區間[s,s+n)內的使用者排名下降一位。用陣列表示所有使用者積分的排名。查詢的複雜度為o(1),更新排名的複雜度是o(n)。優點是演算法簡單,在積分變化不大的情況下非常高效。缺點是當n比較大時,需要更新大量的元素,效率不如樹形分割槽。

from《碼農.演算法》

MySQL海量使用者積分排序問題

某海量使用者 使用者擁有積分,積分可能會在使用過程中隨時更新。現在要為該 設計一種演算法,在每次使用者登入時顯示其當前積分排名。使用者最大規模為2億 積分為非負整數,且小於100萬。儲存結構 首先,我們用一張使用者積分表user score來儲存使用者的積分資訊 表結構 示例資料 下面的演算法會基於...

海量積分排名 簡化後的具體實現

首先積分值有個最大值,積分由n變化到m 排名變化的只是在積分n到積分m的客戶排名會發生變化故此 有如下實現 使用rankandnum來表示處在該積分的排名和數值 使用rankandnums數值來儲存所有積分排名 注意 rankandnums n 中rankandnum中的rank和num則表示積分為...

海量積分資料實時排名演算法

積分排名在很多專案都會出現,積分排名主要滿足以下需求 當排序的資料量不大的時候,這個需求很容易滿足,但是如果資料量很大的時候比如百萬級 千萬級甚至上億的時候,或者有實時排名需求 這個時候要滿足效能 低成本等需求,在設計上就變得複雜起來了。高效做法是不對積分進行排序,僅僅是統計每個積分區間的人數,用積...