百万级用户的积分排名

魏永胜 发布于 2013/03/05 13:35
阅读 803
收藏 2

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

请问:

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

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

谢谢!

加载中
0
8
870177103
800W的话虽然内存用多点,但QuickSort还是无压力的吧,直接排序就好,数据库的话,等待楼下的会的
0
thor.lee
thor.lee

引用来自“870177103”的答案

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

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

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

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

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

0
leo108
leo108
如果实时性要求不高的话,可以考虑用缓存
0
溟溟
溟溟
积分加索引,用存储过程写
0
去闲
把前100的用户数据复制到一个单独的表中,直接查询。再做个触发器,当有用户积分大于第100位的时,移除旧的,加入新的,也可在程序里做这个操作。
灰花走湿
灰花走湿
呵呵,这个注意不错,
0
dedenj
dedenj
800w的积分排个序毫无压力啊,要有索引,可以加缓存的话就更没问题了。。
0
amonxu
amonxu
一个索引足矣!
0
专业打酱油
专业打酱油
800W用户,一个用户1K(应该没这么大)数据,80G内存足以!
8
870177103
为何不用INDEX?
0
酒逍遥
酒逍遥

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

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

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