论坛首页 Java企业应用论坛

用户评价排名系统设计

浏览 5693 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2014-03-01   最后修改:2014-03-01
需求是这样的,做一个评价排名,用户可以对一个帖子进行评价,然后根据评价次数进行排名,需要在前端展示排名

用户的属性:用户id(userid),用户所在城市id(cityid),评价次数(count),排名(rank)

数据的增长是每天5W的速度进行增加,根据PM的要求,暂时定为1小时计算排名一次,根据城市统计用户在当前城市下的排名,前端实时显示当前排名和评价次数

目前我做的做法:数据库采用的Mysql,表设计的很简单,就是一张表和上述几个字段
做定时任务每隔一个小时,根据城市id将数据取出,然后在内存中进行计算排名,计算后更新rank字段值写回数据库

以目前的数据情况是没问题,但是很矬,当数据量增大到一定程度,这种设计肯定扛不住,所以寻求新的设计,也想知道成熟的排名更新统计系统是如何做的

希望有大神能指点一二
   发表时间:2014-03-04  
另设计一张表: 次数 数量 计算排名:select sum(数量)  from table where  (次数>xxx值)
次数做为主键:1 2 3 4 5 6.。。。。。。

  大致的思路,可能还有一些细节,自己慢慢想。
0 请登录后投票
   发表时间:2014-03-05  
programming 写道
另设计一张表: 次数 数量 计算排名:select sum(数量)  from table where  (次数>xxx值)
次数做为主键:1 2 3 4 5 6.。。。。。。

  大致的思路,可能还有一些细节,自己慢慢想。

不太明白。。
0 请登录后投票
   发表时间:2014-03-05  
timer_yin 写道
programming 写道
另设计一张表: 次数 数量 计算排名:select sum(数量)  from table where  (次数>xxx值)
次数做为主键:1 2 3 4 5 6.。。。。。。

  大致的思路,可能还有一些细节,自己慢慢想。

不太明白。。



另设计一张表:字段有:  次数  获得相同次数的人数
这个能懂不?
0 请登录后投票
   发表时间:2014-03-05  
一天5W,一个月150W,一年1800W,五年以上才超1亿
你这数据量其实不太大,可以考虑“
1、mysql分区表,按城市分区
2、上面哥们说的,统计表放到一个新表中,线程自动统计,到时候只要读就OK
1 请登录后投票
   发表时间:2014-03-05  
我是没看懂,到底是用户排名,  还是帖子排名。


根据什么排名。根据评价次数排名吗?




0 请登录后投票
   发表时间:2014-03-05  
一个java程序员 写道
我是没看懂,到底是用户排名,  还是帖子排名。


根据什么排名。根据评价次数排名吗?





是的 根据评价次数更新rank字段值
0 请登录后投票
   发表时间: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 表的索引.

0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics