IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

实时排名,其实很简单

风轻扬 2009-11-08 23:17:30 累计浏览 4,422 次
本机暂存
    前两天写用skip list实现实时排名,搞得挺复杂,显得挺有学问的。嘿嘿,其实没必要搞那么复杂,对于博客这种积分取值范围很小(在较长一段时期内可能都只在0-10000之间)的,只需要用一个数组记录每个分值有多少人就够了,计算排名的时候只要对这个数组做下遍历,代价小很多了。

    初步的实现呢,只需要用以下的一张数据库表可能就行了。

    CREATE TABLE BlogScoreSummary (

     Score INT, -- 分值

     Count INT, -- 积分为这一分值的人数

     IDX BSS_SCORE_COUNT(Score, Count)

    );

    这样,计算排名时只需要用以下查询

    SELECT SUM(Count) FROM BlogScoreSummary WHERE Score > ?;

    这一查询会用索引,并且由于排名高的人被浏览的次数多,这个查询每次需要遍历求和的项平均就不大(查询中指定的参数越小,查询每次需要遍历求和的项就越多),因此很可能用数据库就可以搞定了。如果一台数据库不行,可以用复制搞个几十台嘛,反正这个表也很小。

    更新的时候也很简单,只要把原积分对应的人数--,新积分对应的人数++就行了。

    嗯哼,这么好的方法,竟然是巴望暴富的男人想出来的。    

同分类推荐文章

  1. 第七章 事务 (2026-04-07 08:00:00)
  2. 第六章:分区 (2026-03-29 08:00:00)
  3. Neko Master: 从 0 到 1K+ Star 的 Vibe Coding 实践 (2026-03-01 08:00:00)

查看更多 数据库 文章 →

建议继续学习

  1. 数学之美:StackOverflow问答排名算法 (累计阅读 11,340)
  2. Hacker News 排名算法工作原理 (累计阅读 7,400)
  3. 用skip list实现实时排名? (累计阅读 6,923)
  4. 数学之美:Reddit评论排名算法 (累计阅读 5,943)
  5. scala入门手记 (累计阅读 4,702)
  6. xml转数组的方法 (累计阅读 4,621)
  7. javascript扩展Array(数组)类 (累计阅读 4,140)
  8. javascript数组排序的问题 (累计阅读 3,880)
  9. python数组使用说明 (累计阅读 3,422)
  10. 浅谈 WHR 全历史排名 (累计阅读 2,802)