锁定老帖子 主题:网站实时积分排名
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2012-02-18
programming 写道 我提一个方案不知道可行性|:
新建一张表 积分值 人数 求排名的时候,只要 select sum(人数) table 积分值 > ## + 1 排名 具体细节实践 可以自己想。 楼上的方案也可行,就是在数据库中建表来实现缓存,这样就是空间换时间,也可以在用户表冗余积分值。用户数据量大的时候,积分操作可以用jms加异步处理来做,积分保存到应用缓存中,这样在积分操作频繁的时候可提高效率。 |
|
返回顶楼 | |
发表时间:2012-02-19
ben.lee 写道 通过搜索引擎。
积分变更 动态更新索引文件。 |
|
返回顶楼 | |
发表时间:2012-02-20
order by 更影响性能,如果真的大了,建议读写分离。
|
|
返回顶楼 | |
发表时间:2012-02-20
tomleader 写道 你这个我做过类似的一个项目,实时性排序要求高,不建议用db做,db只是恢复数据用,排序及前端获取排行列表,我推荐用redis,数据结构采用其内置的sorted list,性能非常好,redis只保存最简单的id+积分这么一个数据,关闭实体化选项,全部用内存来保存数据,搭建主从防止宕机,然后自己实现一个从db到redis的数据恢复过程即可。
数据保存的话,根据你实际并发量考虑,并发不高的话可以定时写入db,并发很高的话,中间需要再做一个缓冲队列。 这是个解决办法,之前在网上查也考虑过redis的sorted list,不过要增加两台机器,对于我要做的不太划算。不过谢谢你的策略,很好以后应该会用到。 |
|
返回顶楼 | |
发表时间: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数据。 |
|
返回顶楼 | |
发表时间:2012-02-20
programming 写道 我提一个方案不知道可行性|:
新建一张表 积分值 人数 求排名的时候,只要 select sum(人数) table 积分值 > ## + 1 排名 具体细节实践 可以自己想。 感觉是可行的,我想想,怎么弄 |
|
返回顶楼 | |
发表时间:2012-02-20
如果有2亿条应该怎么处理呢?计算积分是已经排好寻了的,要直接找其排名
|
|
返回顶楼 | |