浏览 5693 次
锁定老帖子 主题:用户评价排名系统设计
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2014-03-01
最后修改:2014-03-01
用户的属性:用户id(userid),用户所在城市id(cityid),评价次数(count),排名(rank) 数据的增长是每天5W的速度进行增加,根据PM的要求,暂时定为1小时计算排名一次,根据城市统计用户在当前城市下的排名,前端实时显示当前排名和评价次数 目前我做的做法:数据库采用的Mysql,表设计的很简单,就是一张表和上述几个字段 做定时任务每隔一个小时,根据城市id将数据取出,然后在内存中进行计算排名,计算后更新rank字段值写回数据库 以目前的数据情况是没问题,但是很矬,当数据量增大到一定程度,这种设计肯定扛不住,所以寻求新的设计,也想知道成熟的排名更新统计系统是如何做的 希望有大神能指点一二 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2014-03-04
另设计一张表: 次数 数量 计算排名:select sum(数量) from table where (次数>xxx值)
次数做为主键:1 2 3 4 5 6.。。。。。。 大致的思路,可能还有一些细节,自己慢慢想。 |
|
返回顶楼 | |
发表时间:2014-03-05
programming 写道 另设计一张表: 次数 数量 计算排名:select sum(数量) from table where (次数>xxx值) 次数做为主键:1 2 3 4 5 6.。。。。。。 大致的思路,可能还有一些细节,自己慢慢想。 不太明白。。 |
|
返回顶楼 | |
发表时间:2014-03-05
timer_yin 写道 programming 写道 另设计一张表: 次数 数量 计算排名:select sum(数量) from table where (次数>xxx值)
次数做为主键:1 2 3 4 5 6.。。。。。。 大致的思路,可能还有一些细节,自己慢慢想。 不太明白。。 另设计一张表:字段有: 次数 获得相同次数的人数 这个能懂不? |
|
返回顶楼 | |
发表时间:2014-03-05
一天5W,一个月150W,一年1800W,五年以上才超1亿
你这数据量其实不太大,可以考虑“ 1、mysql分区表,按城市分区 2、上面哥们说的,统计表放到一个新表中,线程自动统计,到时候只要读就OK |
|
返回顶楼 | |
发表时间:2014-03-05
我是没看懂,到底是用户排名, 还是帖子排名。
根据什么排名。根据评价次数排名吗? |
|
返回顶楼 | |
发表时间:2014-03-05
一个java程序员 写道 我是没看懂,到底是用户排名, 还是帖子排名。
根据什么排名。根据评价次数排名吗? 是的 根据评价次数更新rank字段值 |
|
返回顶楼 | |
发表时间:2014-03-06
看不下去了,一定要一步一步说清楚,才能想得出来。
根据评价次数更新rank字段值:这个设计是不是每次更新评价次数都要运算一次的。 我教你的: 设计一张表:字段有: 评价次数 获得相同评价次数的人数 如果一个人的评价次数更新为5了,你就把上表的评价次数等于5的。人数加1 它本身原先是4的则要减1 需求1:显示最前100名的: 上表 己经有人数了,人数加起来等于100 ,里面都有评价次数的,你通过评价次数去查评价次数相同的:用户的属性:用户id(userid),用户所在城市id(cityid),评价次数(count) select * from table count = xxx 需求2:显示其中一个人的排名:通过这个人的评价次数,select sum(人数字段) from table where (次数>通过这个人的评价次数) 当前这个人的排名 细节,1同评价次数的排名,2数据量大,分表分库方案很多。 3 表的索引. |
|
返回顶楼 | |
发表时间:2014-03-07
http://redis.readthedocs.org/en/latest/index.html
SortedSet(有序集合) 可以满足需求 -- 添加投票记录 ZADD vote_${cityid} 票数 用户id -- 增加票数 zincrby vote_${cityid} 票数 用户id -- 得到用户票数 ZSCORE vote_${cityid} 用户id -- 获取前几名 zrevrange vote_${cityid} 0 2 |
|
返回顶楼 | |