海量数据如何实现排行榜

news/2025/2/13 11:07:06/

在海量数据中如何去获取TOPK,或者如何查询一个数据的排名。
常见的方法:

mysql索引存储

这种方法根据设置一个排行分数作为索引即可,但在海量数据场景下,它的查询性能变得低下,占用的内存也很高,只适合数据量不高和对性能要求不高情况下。

区间排序树

思路:比如存储100万个数据,以积分作为排行分数。
我们可以把[0,1000000]一级区间分为两个二级区间[0,500000)和[500000,1000000],在将二级区间往下细分,直到划分21级区间为[0,1),[1,2)…
这种思想二分查找和二叉查找树类似。
比如,需要查找一个积分为490000数据的排名,那么在是属于一级区间的[0,500000)当中的,那么的它的排名应该在[500000,1000000]count个用户后面,所以它的排名应该+= count ,然后继续往[0,500000]的右子树区间[250000,500000]查找,它在右子树,排名在[0,250000)用户前面,故不需要+=count,类似继续往下,直到[490000,490001)区间,就是这个数据的排名了。

redis的zset


http://www.ppmy.cn/news/191595.html

相关文章

基于redis排行榜的实战总结

前言:   之前写过排行榜的设计和实现, 不同需求其背后的架构和设计模型也不一样.   平台差异, 有的立足于游戏平台, 为多个应用提供服务, 有的仅限于单个游戏.排名范围差异, 有的面向全局排名, 有的只做朋友圈排名. 实时性差异, 离线统计有之, 实时排名更常见.   不管如何…

【100万用户量“排行榜列表”和“我的排名”功能优化记录】

100万用户量“排行榜列表”和“我的排名”功能优化记录 前言背景:难点:解决过程:mongodb小坑:总结优化过程:最后:参考: 前言背景: 最近做一个预算100万用户量的项目,需要…

凉了呀,面试官叫我设计一个排行榜。

这是why哥的第89篇原创文章 前两天,有一个读者给我发了一张图片。 我问:发什么肾么事了? 于是有了这样的对话: 他发的图,就是微信运动步数排行榜的截图: 其实扯了这么多,这就是个常见的面试场景…

微信小游戏排行榜功能快速开发教程

要做这个好友排行榜.必然要有好友的战绩比分,然后再做排序,最后将数据呈现在UI上 , 可以分为下面几个步骤: 保存每个用户的分数获取好友列表,并获取好友的分数渲染排行榜 保存每个用户的分数 保存每个用户的分数,需要调用微信的云存储API,将用户的分数持久化的存起来 . // 保…

Redis结合业务逻辑实现排行榜

文章目录 前言实现个人总结附加信息缓存问题删除问题排序问题 测试demo 前言 大家好,我又回来了。已经好久没有写博客了,今天要写的排行榜的需求:排名前50,然后标记自己的位置,如果超过就补到后面去。 其实实现很简单…

golang笔记:游戏中排行榜的实现

date: 2017-08-29 title: “golang笔记:游戏中排行榜的实现” draft: false categories: golanggame tags:golanggame thumbnailImagePosition: left 原文地址https://github.com/liyiheng/blog-gen 游戏开发中排行榜经常出现,接触过的排行榜有两种。一种是由玩家挑…

使用Redis构建高效稳定低延迟的排行榜业务

一、业务描述 现有一排行榜业务,数据库中拥有百万级用户,中秋佳节将要来临,用户可以写一篇关于中秋的故事,故事可邀请好友点赞,也可以打赏该故事,现在要挑选出关于中秋话题相关的故事,根…

PyFlink 有状态流处理实例 实时排行榜

01 UDAF 聚合函数的使用 自定义聚合函数(UDAF),将多条记录聚合成一条记录。其输入与输出是多对一的关系,即将多条输入记录聚合成一条输出值。 需要注意的是:当前聚合函数仅在流模式下的 GroupBy 聚合和 Group Window…