需求概述
积分排名在很多项目都会出现,大家都不会陌生,需求也很简单,积分排名主要满足以下需求:
- 查询用户名次。
- 查询TopN(即查询前N名的用户)
- 实时排名(很多项目是可选的)
当排序的数据量不大的时候,这个需求很容易满足,但是如果数据量很大的时候比如百万级、千万级甚至上亿的时候,或者有实时排名需求;这个时候要满足性能、低成本等需求,在设计上就变得复杂起来了。
常规积分排名处理
这里列举下日常对于排名的常规做法和缺陷。
1. 数据库解决方案
这是最简单的做法,数据存储在数据库里面,然后利用数据库做排序处理。
这里分两种情况:
1.1单库/单表
参与排名的数据量小的时候的做法,所有数据存储在一张表上。
查询操作示例:
查询用户名次:
SELECT count(*) as rank FROM 积分表 WHERE 积分 > (SELECT 积分 FROM 积分表 WHERE uid=’用户ID’)
</