论坛首页 Java企业应用论坛

网站实时积分排名

浏览 11535 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2012-02-18  
programming 写道
  我提一个方案不知道可行性|:

            新建一张表   积分值     人数    
            求排名的时候,只要  select sum(人数) table 积分值 > ##     + 1 排名  具体细节实践 可以自己想。

楼上的方案也可行,就是在数据库中建表来实现缓存,这样就是空间换时间,也可以在用户表冗余积分值。用户数据量大的时候,积分操作可以用jms加异步处理来做,积分保存到应用缓存中,这样在积分操作频繁的时候可提高效率。
0 请登录后投票
   发表时间:2012-02-19  
ben.lee 写道
通过搜索引擎。

积分变更 动态更新索引文件。


0 请登录后投票
   发表时间:2012-02-20  
order by 更影响性能,如果真的大了,建议读写分离。
0 请登录后投票
   发表时间:2012-02-20  
tomleader 写道
你这个我做过类似的一个项目,实时性排序要求高,不建议用db做,db只是恢复数据用,排序及前端获取排行列表,我推荐用redis,数据结构采用其内置的sorted list,性能非常好,redis只保存最简单的id+积分这么一个数据,关闭实体化选项,全部用内存来保存数据,搭建主从防止宕机,然后自己实现一个从db到redis的数据恢复过程即可。
数据保存的话,根据你实际并发量考虑,并发不高的话可以定时写入db,并发很高的话,中间需要再做一个缓冲队列。


这是个解决办法,之前在网上查也考虑过redis的sorted list,不过要增加两台机器,对于我要做的不太划算。不过谢谢你的策略,很好以后应该会用到。
0 请登录后投票
   发表时间:2012-02-20  
程序新手 写道
tomleader 写道
你这个我做过类似的一个项目,实时性排序要求高,不建议用db做,db只是恢复数据用,排序及前端获取排行列表,我推荐用redis,数据结构采用其内置的sorted list,性能非常好,redis只保存最简单的id+积分这么一个数据,关闭实体化选项,全部用内存来保存数据,搭建主从防止宕机,然后自己实现一个从db到redis的数据恢复过程即可。
数据保存的话,根据你实际并发量考虑,并发不高的话可以定时写入db,并发很高的话,中间需要再做一个缓冲队列。



      很好的解决方案,不过多想下需要增加至少两台redis主从物理服务器,这个需要leader知晓,如果考虑成本之后不需要实时,定时查一次加个缓存就可以了,如果依然需要实时,除了tomleader的方法,也可以考虑在MC中存储SortedMap对象,key为用户ID ,value为用户积分 没有测试过这个性能,但这个维护起来应该比redis方便些


将排行榜放到mc中,可能不太靠谱,因为这个sortedMap的数据量很大,不能每次取都取这个sortedMap数据。
0 请登录后投票
   发表时间:2012-02-20  
programming 写道
  我提一个方案不知道可行性|:

            新建一张表   积分值     人数    
            求排名的时候,只要  select sum(人数) table 积分值 > ##     + 1 排名  具体细节实践 可以自己想。


感觉是可行的,我想想,怎么弄
0 请登录后投票
   发表时间:2012-02-20  
如果有2亿条应该怎么处理呢?计算积分是已经排好寻了的,要直接找其排名
0 请登录后投票
论坛首页 Java企业应用版

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