16
回答
百万级用户的积分排名
利用AWS快速构建适用于生产的无服务器应用程序,免费试用12个月>>>   

有800W用户,在用户界面显示出用户积分的排名

请问:

1、数据库怎么设计?程序的思路?

2、如果还需要列出前100名,那怎么样设计才能快速排出名次?

谢谢!

<无标签>
举报
魏永胜
发帖于5年前 16回/740阅
共有16个答案 最后回答: 5年前

引用来自“870177103”的答案

800W的话虽然内存用多点,但QuickSort还是无压力的吧,直接排序就好,数据库的话,等待楼下的会的

用数据库做这个排序的话估计不太合适吧。redis的zset可以比较好的处理这类问题

--- 共有 2 条评论 ---
thor.lee回复 @870177103 : 不要求实时性的话,自己做排序是ok的。如果有实时性要求的话,要处理的事情就比较多了,要考虑数据更新后的重排问题....话又说回来了,没有实时性要求的情况下,直接用数据库排序加上缓存也就可以应对了。 5年前 回复
870177103我看了一下,redis还是很好的。不过不懂楼主的数据格式(数据大小),800W的话自己实现一个读写方案也不会很困难吧,维护头信息+数据需要几十m的运存,用qsort还是可以的。而且是单种数据,从开发到运作比redis还是各有优劣的。 5年前 回复

积分上加索引,  然后 count 小于指定用户积分的, 不过不确定效率怎么样。

前 100 就简单了, 存 第 100 位的积分,找的时候找 大于这个积分的。

以前也做过类似的程序.一个比较关键的问题..积分相同的 怎么算.

这个会影响到后面一系列的逻辑

--- 共有 3 条评论 ---
魔力猫回复 @酒逍遥 : 排序100的话,其实未必很慢。但是确实没必要。所以保证每个几分钟到几个小时刷新一下缓存就可以了。 5年前 回复
酒逍遥回复 @魔力猫 : 那就定期更新就可以了. 实时的话 纯靠数据库 数据量大的话 效率肯定很低的 5年前 回复
魔力猫积分相同的比如按名字、注册时间等等,规则业务定咱不用操心。 5年前 回复
顶部