第9章排行榜服务——9.2 排行榜技术的特点

第9章排行榜服务——9.2 排行榜技术的特点
John Yaml9.2 排行榜的技术特点
与现实生活中的排行榜不同,互联网应用中的排行榜一般具有如下特点。
- 曝光量大:一个成功的排行榜会受到大量用户的关注,这是一个自带流量的功能场景,会带来高并发读取排行榜的请求。
- 竞争激烈:为了获得流量优势和排名靠前的奖励,排行榜可能受到参与者的激烈竞争,这就要求排行榜服务能应对高并发的写请求。
- 实时变化:不同于考试结果排名,互联网应用中排行榜的排名情况在实时变化,参与者会随时关心自己的最新名次。
- 周期滚动:排行榜可能以月、周、天、小时甚至分钟为周期滚动排名。
所以,在排行榜的技术实现方面,要重点考虑高并发读/写、实时展示最新排名,以及可以轻松支持周期滚动的能力。在设计排行榜服务时,首先要考虑的问题是使用什么存储系统来维护排行榜。假如使用关系型数据库的话,因为它对高并发读/写的支持较弱,而且为了支持按照积分排序,在关系型数据库中需要根据积分字段,使用 SELECT语句的 ORDER BY子句来实现。而该方式具有如下缺点。
- 性能开销:在有大量数据的情况下,排序操作会耗费大量的系统资源和处理时间,尤其是当需要进行多字段排序或者排序字段的数据类型不同时,查询效率更低。
- 磁盘I/O:当需要对大量数据进行排序时,可能要使用临时表或者磁盘存储技术,使排序操作不再全部运行在内存中,而这需要进行大量的磁盘读/写操作,从而导致性能降低,查询的响应时间变长。
所以,实现排行榜不太适合使用关系型数据库。排行榜是按照积分排序的,因此很容易让人想到Redis的ZSET数据结构。ZSET是一种有序集合形式,该集合由Member组成,每个Member都有一个Score(积分),集合会按照Score自动排序。所以,目前Redis ZSET便成为实现排行榜的首选。