需求是这样的,做一个评价排名,用户可以对一个帖子进行评价,然后根据评价次数进行排名,需要在前端展示排名
用户的属性:用户id(userid),用户所在城市id(cityid),评价次数(count),排名(rank)
数据的增长是每天5W的速度进行增加,根据PM的要求,暂时定为1小时计算排名一次,根据城市统计用户在当前城市下的排名
目前我做的做法:数据库采用的Mysql,表设计的很简单,就是一张表和上述几个字段
做定时任务每隔一个小时,根据城市id将数据取出,然后在内存中进行计算排名,计算后更新rank字段值写回数据库
以目前的数据情况是没问题,但是很矬,当数据量增大到一定程度,这种设计肯定扛不住,所以寻求新的设计,也想知道成熟的排名更新统计系统是如何做的
希望有大神能指点一二
----------------------
偶然发现我还发过这么求助帖,结果发在了博客上,自我回复吧,当用户进行评价后,使用消息总线做异步,消费端收到消息后第一步先更新db,然后更新缓存,缓存使用redis,使用sorted set数据结构,key采用city_ranking(city使用具体的城市id),而score值就是评价次数,member就是用户id,基于sorted set天然的排序结构,可以方便的获取用户排名。
用户的属性:用户id(userid),用户所在城市id(cityid),评价次数(count),排名(rank)
数据的增长是每天5W的速度进行增加,根据PM的要求,暂时定为1小时计算排名一次,根据城市统计用户在当前城市下的排名
目前我做的做法:数据库采用的Mysql,表设计的很简单,就是一张表和上述几个字段
做定时任务每隔一个小时,根据城市id将数据取出,然后在内存中进行计算排名,计算后更新rank字段值写回数据库
以目前的数据情况是没问题,但是很矬,当数据量增大到一定程度,这种设计肯定扛不住,所以寻求新的设计,也想知道成熟的排名更新统计系统是如何做的
希望有大神能指点一二
----------------------
偶然发现我还发过这么求助帖,结果发在了博客上,自我回复吧,当用户进行评价后,使用消息总线做异步,消费端收到消息后第一步先更新db,然后更新缓存,缓存使用redis,使用sorted set数据结构,key采用city_ranking(city使用具体的城市id),而score值就是评价次数,member就是用户id,基于sorted set天然的排序结构,可以方便的获取用户排名。