日期:2014-05-17  浏览次数:20613 次

求各路大神帮忙解决大量用户的排行榜问题
        本人要做一个OJ(Online Judge)系统,想根据用户答对的题目的数量给用户一个实时排名,即当用户答对一个题目,就立即更新所有用户的排名,用户也可以实时查询到自己的排名。但是如果将排名持久化到数据库,使用视图、触发器或存储过程之类的计算并更新数据库字段都很耗时,尝试过使用视图,但是当用户量达到一万的时候,查询需要四十多秒。
        网上有人说不持久化到数据库,而是在内存中处理,请问这种方法可行吗?具体如何实现?哪位大神做过类似的项目,可不可以给一下建议?不胜感激!

------解决方案--------------------
可以用Redis的sorted set数据类型来做
------解决方案--------------------
在内存里处理即可,但还需要注意与数据库的同步,参考下缓存方面的框架(建议使用)
------解决方案--------------------
引用:
即使此时只有一位用户提交了题目,那么他的排名就会改变,同时也会使其他用户的排名改变,这样就需要更新大量用户的排名,所以很耗时间


删掉排名,改成正确题目数,把姓名和题目数做成联合索引,每次做排序查询。
------解决方案--------------------
排名这种即时更新的数据不应该持久化,或者不应该每次更新所有人