需求分析
排名这个需求在比较多的项目中都有出现过,大家对此都不会感到太陌生,排名需要满足一下需求:
1查询用户所在的名次。
2查询前N名的用户。
3实时排名。
解决的办法有:
一数据库解决方案
- 单表操作
mysql使用limit ,SqlServer使用top,单表操作就让数据帮我们进行操作,简便,但是缺点也是明显的,当数据量大时,数据库的IO读写会出现严重的性能问题。 - 分库分表操作
分库分表后没法实现关联查询,而且数据分布在好几个库/表中,那就需要把数据合并。效率低和实现起来比较麻烦。
二排名算法
- 根据N个用户建立长度为N的排名对象数组,然后使用一个常用的排序算法,当有新的用户加入进来,重新排序。数据量少时使用还是可以的,当数据量大,程序所占用的内存会大,影响实时排序的效率。
- 换一个角度想,我们在一个具体的积分下有多少个用户。所以下面根据积分范围创建平衡二叉树