实时排名,其实很简单
浏览:4213次 出处信息
前两天写用skip list实现实时排名,搞得挺复杂,显得挺有学问的。嘿嘿,其实没必要搞那么复杂,对于博客这种积分取值范围很小(在较长一段时期内可能都只在0-10000之间)的,只需要用一个数组记录每个分值有多少人就够了,计算排名的时候只要对这个数组做下遍历,代价小很多了。
初步的实现呢,只需要用以下的一张数据库表可能就行了。
CREATE TABLE BlogScoreSummary (
Score INT, -- 分值
Count INT, -- 积分为这一分值的人数
IDX BSS_SCORE_COUNT(Score, Count)
);
这样,计算排名时只需要用以下查询
SELECT SUM(Count) FROM BlogScoreSummary WHERE Score > ?;
这一查询会用索引,并且由于排名高的人被浏览的次数多,这个查询每次需要遍历求和的项平均就不大(查询中指定的参数越小,查询每次需要遍历求和的项就越多),因此很可能用数据库就可以搞定了。如果一台数据库不行,可以用复制搞个几十台嘛,反正这个表也很小。
更新的时候也很简单,只要把原积分对应的人数--,新积分对应的人数++就行了。
嗯哼,这么好的方法,竟然是巴望暴富的男人想出来的。
建议继续学习:
- 数学之美:StackOverflow问答排名算法 (阅读:10998)
- Hacker News 排名算法工作原理 (阅读:6892)
- 用skip list实现实时排名? (阅读:6595)
- 数学之美:Reddit评论排名算法 (阅读:5564)
- IMDB评分排名算法 (阅读:5369)
- 数学之美:Hacker News的热门排名算法 (阅读:5096)
- Reddit排名算法工作原理 (阅读:3028)
- 教你如何查询当前主流数据库及其排名? (阅读:2419)
- 浅谈 WHR 全历史排名 (阅读:2428)
QQ技术交流群:445447336,欢迎加入!
扫一扫订阅我的微信号:IT技术博客大学习
扫一扫订阅我的微信号:IT技术博客大学习
<< 前一篇:用skip list实现实时排名?
后一篇:c/c++访问超过2G的文件 >>
文章信息
- 作者:风轻扬 来源: 风轻扬
- 标签: 排名
- 发布时间:2009-11-08 23:17:30
建议继续学习
近3天十大热文
-
[318] WordPress插件开发 -- 在插件使用 -
[151] 解决 nginx 反向代理网页首尾出现神秘字 -
[92] IOS安全–浅谈关于IOS加固的几种方法 -
[51] 到底什么是MVC? -
[50] Linux Used内存到底哪里去了? -
[50] 二维码的生成细节和原理 -
[48] Shell的那些事儿 -
[47] 中间件和稳定性平台 -
[47] Hacker News 排名算法工作原理 -
[47] 浏览器的工作原理:新式网络浏览器幕后揭秘
