CN113986962A - 排行榜生成方法、装置、设备及存储介质 - Google Patents

排行榜生成方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN113986962A
CN113986962A CN202111402808.9A CN202111402808A CN113986962A CN 113986962 A CN113986962 A CN 113986962A CN 202111402808 A CN202111402808 A CN 202111402808A CN 113986962 A CN113986962 A CN 113986962A
Authority
CN
China
Prior art keywords
ranking
message
time
messages
consumer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202111402808.9A
Other languages
English (en)
Inventor
李南鹏
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Bigo Technology Pte Ltd
Original Assignee
Bigo Technology Pte Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Bigo Technology Pte Ltd filed Critical Bigo Technology Pte Ltd
Priority to CN202111402808.9A priority Critical patent/CN113986962A/zh
Publication of CN113986962A publication Critical patent/CN113986962A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24542Plan optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24552Database cache management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24564Applying rules; Deductive queries
    • G06F16/24565Triggers; Constraints
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/248Presentation of query results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/25Integrating or interfacing systems involving database management systems
    • G06F16/252Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Computational Linguistics (AREA)
  • Software Systems (AREA)
  • Operations Research (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

本发明涉及一种排行榜生成方法、装置、设备及存储介质,该方法包括:利用生产者将排名消息写入消息队列,其中排名消息包括排名对象信息、排名对象的排名分数和消息生成时间;利用消费者来消费消息队列中的排名消息以根据动态时间段内的排名消息更新排行榜,具体包括,对排名消息进行实时消费,以将属于动态时间段内的排名消息中的排名分数增加至对应的排名对象,和延迟动态时间段的时间长度对应的一段时间,对排名消息进行再一次消费,以将不再属于动态时间段内的排名消息中的排名分数从对应的排名对象的得分中减掉。利用本发明的排行榜生成方法,能够实现小容量存储、提高排行榜精度和提高排行榜的更新效率。

Description

排行榜生成方法、装置、设备及存储介质
技术领域
本发明涉及计算机技术领域,特别是涉及一种排行榜生成方法、装置、设备及存储介质。
背景技术
此处的陈述仅提供与本发明有关的背景信息,而不必然地构成现有技术。
现有排行榜一般是静态时间段的排行榜,以小时榜为例,所统计的时间段是当前时间点所在小时内的00分00秒至59分59秒内的数据。而动态时间段的排行榜要求统计当前时间点往前的固定长度的时间段内的数据,并随当前时间点动态更新统计的时间段,例如,根据当前时间点往前1小时内的数据生成排行榜,并随当前时间点的向后推移而更新时间段进而更新排行榜。
目前业界实现动态时间段的排行榜主要采用聚合数据的方式,将需要统计的时间段划分为多个小量级的时间段,将排行榜对象和排行榜数据按产生时间所对应的小量级时间段存储至数据库中,每隔一定时间获取多个小量级时间段内的数据,聚合后排序得到结果。以24小时排行榜例,将24小时划分为24个小时,数据按小时存储至数据库中,每隔一定时间获取当前时间点的前24个小时内的数据聚合生成排行榜。
现有的聚合数据的方式具有以下缺点:一、所有数据都需要存储至数据库,占用的存储空间大;二、每次聚合都需要读取大量数据,效率底下;三、排行榜的精度受到时间段的划分精度的影响,而划分越细存储越复杂,读取效率也会下降;四、排行榜的更新时间受到聚合间隔的影响,频繁聚合也会产生效率问题。
发明内容
本发明的目的在于提供一种新的排行榜生成方法、装置、设备及存储介质,用以实现小容量存储、提高排行榜精度和提高排行榜的更新效率。
本发明的目的采用以下技术方案来实现。依据本发明提出的一种排行榜生成方法,包括以下步骤:利用生产者将排名消息写入消息队列,其中所述排名消息包括排名对象信息、排名对象的排名分数和消息生成时间;利用消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜。其中,所述利用消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜包括:对所述排名消息进行实时消费,以将属于动态时间段内的所述排名消息中的所述排名分数增加至对应的排名对象;和,延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,以将不再属于动态时间段内的所述排名消息中的所述排名分数从对应的排名对象的得分中减掉。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种排行榜生成装置,包括:生产者模块,用于将排名消息写入消息队列,其中所述排名消息包括排名对象信息、排名对象的排名分数和消息生成时间;消费者模块,用于利用消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息来更新排行榜。其中,所述消费者模块包括第一子模块和第二子模块;所述第一子模块用于:对所述排名消息进行实时消费,以将属于动态时间段内的所述排名消息中的所述排名分数增加至对应的排名对象;所述第二子模块用于:延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,以将不再属于动态时间段内的所述排名消息中的所述排名分数从对应的排名对象的得分中减掉。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种排行榜生成装置,包括:接收模块,用于接收生产者发送来的排名消息并写入消息队列,其中所述排名消息包括排名对象信息、排名对象的排名分数和消息生成时间;发送模块,用于消费者发送指令,以利用所述消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜;其中,所述发送模块具体用于:向所述第一消费者组发送指令,用以对所述排名消息进行实时消费,以将属于动态时间段内的所述排名消息中的所述排名分数增加至对应的排名对象;和,向所述第二消费者组发送指令,用以延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,以将不再属于动态时间段内的所述排名消息中的所述排名分数从对应的排名对象的得分中减掉。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种排行榜生成设备,包括:存储器,用于存储非暂时性计算机可读指令;以及处理器,用于运行所述计算机可读指令,使得所述处理器执行时实现前述任意一种排行榜生成方法。
本发明的目的还采用以下技术方案来实现。依据本公开提出的一种计算机可读存储介质,用于存储非暂时性计算机可读指令,当所述非暂时性计算机可读指令由计算机执行时,使得所述计算机执行前述任意一种排行榜生成方法。
本发明与现有技术相比具有明显的优点和有益效果。借由上述技术方案,本发明提出的排行榜生成方法、装置、设备及存储介质至少具有下列优点及有益效果:
1、鉴于现有方案存在存储消耗大、排行榜精度低、更新效率低等问题,本发明提出了一种基于消息队列的动态时间段的排行榜生成方法,使用消息队列的延迟消费机制,生成动态时间段内的排行榜,达到小容量存储、秒级精度和实时更新的最终效果。
2、本发明提出的方法只需存储排行榜对象的实时数据,而不必存储每一条数据变动记录,极大程度地减少了数据存储量。同时,可以将数据存储在redis中,避免了关系型数据库从硬盘读取、写入时的效率问题。
3、本发明使用两个消费者组对消息队列中的消息进行消费,对于排行榜对象由于新数据生效触发的分数增加和旧数据失效触发的分数减少,都能够在秒级精度内进行处理。
4、本发明还能保证按照排行榜数据的生成时间对排行榜进行实时更新,避免了消息队列乱序消费的问题,达到有序更新的效果。
上述说明仅是本发明技术方案的概述,为了能更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为让本发明的上述和其他目的、特征和优点能够更明显易懂,以下特举较佳实施例,并配合附图,详细说明如下。
附图说明
图1是本发明一个实施例的排行榜生成方法的流程示意图;
图2是本发明另一实施例的排行榜生成方法的流程示意图;
图3是本发明一个实施例提供的延迟消费者主线程的流程示意图;
图4是本发明一个实施例提供的延迟消费者处理线程的流程示意图;
图5是本发明一个实施例的排行榜生成设备的示意图。
具体实施方式
为更进一步阐述本发明为达成预定发明目的所采取的技术手段及功效,以下结合附图及较佳实施例,对依据本发明提出的排行榜生成方法、装置、设备及存储介质的具体实施方式、结构、特征及其功效,详细说明如后。
需要说明的是,在本文中,诸如“第一”、“第二”等关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。另外,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本文提及的静态时间段是指:选定一个时间单位,将时间按所选时间单位进行量化,静态时间段指量化后当前时间点的上一个所选时间单位对应的时间段,当前时间点越过所选时间单位对应的时间段时才更新。
本文提及的动态时间段是指:从当前时间点往前的固定长度的时间段,随当前时间点动态更新。
本文提及的zset是指:redis中的一种有序集合类型。其中,Redis(RemoteDictionary Server)为远程字典服务,是一个开源的支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。在一些示例中,redis中的有序集合zset是字符串类型元素的集合,且不允许重复的成员,并且zset中的每个元素都会关联一个分数,redis可以通过该分数来为zset中的成员进行从小到大的排序。
本文提及的实时消费者是指:消费kafka消息后实时处理的消费者。
本文提及的延迟消费者是指:消费kafka消息后延迟一段时间再处理的消费者。
其中,kafka是一种开源的流处理平台,一种高吞吐量的分布式的发布订阅消息系统。kafka可以分为生产者、消费者和代理者(也称为broker)。这三者可以部署在同一硬件设备,例如由同一机器中的多个软件线程实现;也可以分别部署在多个相应的硬件设备来实现。发布订阅消息系统可以对消息进行生产-消费模式的处理,具体包括:生产者向broker写入消息,broker将消息存储在多个分区中;消费者向broker注册后,broker会为消费者分配分区,每个分区只能分配一个消费者,分配到分区的消费者会从offset处开始消费(如果有commit记录),没有commit记录则可以配置从头开始消费或者从最新消息开始消费。
图1为本发明的排行榜生成方法一个实施例的示意性流程框图。在本发明的一些实施例中,请参阅图1,本发明示例的排行榜生成方法主要包括以下步骤:
步骤S11,利用生产者将排名消息写入消息队列,其中该排名消息包括排名对象信息、排名对象的排名分数和消息生成时间。需注意,本发明提及的消息队列包括但不限于kafka消息队列;本发明可以采用任意的消息系统,包括但不限于kafka平台。
步骤S12,利用消费者来消费消息队列中的排名消息,以根据动态时间段内的排名消息来更新排行榜。
其中,动态时间段是指:从当前时间点往前的一段时间,而动态时间段的时间长度可以是固定的,如当前时间点往前的24小时,动态时间段随当前时间点的推移而动态更新。
由上面的内容可以看出,本发明的上述实施例采用了生产者消费者模式。需注意,在一个可选示例中,生产者消费者模式涉及一个或多个生产者以及一个或多个消费者,一个或多个生产者生产消息并放到消息队列中,一个或多个消费者同时监听该消息队列。在另一可选示例中,生产者消费者模式,除包括前述的生产者、消费者之外,还涉及代理者(也称为broker),该代理者用于对生产者进行的生产、消费者进行的消费进行管理和控制。
图2为本发明的排行榜生成方法另一实施例的示意性流程框图。在本发明的一些实施例中,请参阅图2,本发明的前述步骤S12可以具体包括以下的步骤S21和步骤S22:
步骤S21,对消息队列中的排名消息进行实时消费,以将排名消息中的排名分数增加至对应的排名对象,由于是实时消费,所以能够将属于动态时间段内的(亦即生效的新的)排名消息中的排名分数增加至对应的排名对象。
步骤S22,延迟动态时间段的时间长度对应的一段时间,对排名消息进行再一次消费,以将排名消息中的排名分数从对应的排名对象的得分中减掉,由于是延迟消费,所以能够将不再属于动态时间段内的(亦即失效的旧的)排名消息中的排名分数从对应的排名对象的得分中减掉。不妨将本步骤中的消费处理简称为延迟消费。
可选的,前述的延迟动态时间段的时间长度对应的一段时间,对排名消息进行再一次消费可以包括:判断排名消息的消息生成时间与动态时间段的时间长度之和大于当前时间是否成立,若成立则对排名消息进行前述的再一次消费。
可选的,对于消息队列中的多条排名消息,可以逐条地进行前述步骤S21、并可以逐条地进行前述步骤S22。
需注意,可以利用一存储器来记录排行榜中的所有排名对象的得分,并在利用本发明提供的方法进行处理的过程中,通过消费消息来更新排名对象的得分。
本发明的排行榜生成方法,通过对消息队列进行实时消费和延迟消费,能够实现动态时间段排行榜的秒级精度和实时更新。
本发明的一些可选示例中,可以利用消费者组来进行前述步骤S12。其中,一个消费者组内可以包括一个或多个消费者实例(consumer instance,也称为消费者)。组内的所有消费者协调在一起来共同消费消息队列中的排名消息。在一些具体示例中,前述步骤S12具体包括:利用第一消费者组(也称为实时消费者组)和第二消费者组(也称为延迟消费者组)来消费消息队列中的排名消息,以根据动态时间段内的排名消息来更新排行榜。具体的,利用第一消费者组中的一个或多个消费者来进行前述步骤S21的对排名消息进行实时消费;利用第二消费者组中的一个或多个消费者来进行前述步骤S22的对排名消息进行再一次消费。
需注意,不同消费者组可以消费同一条消息,亦即:在本发明中,第一消费者组和第二消费者组中的一个消费者组在从消息队列中取出一个消息并分配给一个消费者后,该消息是还可以被另一个消费者组中的消费者处理。
需注意,在本发明的一些示例中,第一消费者组和第二消费者组所消费的排名消息是相同的。两个消费者组在处理上的区别在于:第一消费者组实时消费排名消息,并在消费消息时将消息中的排名分数增加至对应的排名对象;第二消费者延迟一段时间后(延迟的时间由动态时间段的长度决定)再消费排名消息,并在消费消息时将消息中的排名分数从对应的排名对象的得分中扣除。
在本发明的一些实施例中,前述步骤S21具体包括:从消息队列中取出一个排名消息;对排名消息进行解析得到排名对象信息、排名对象的排名分数、消息生成时间;判断“排名消息的消息生成时间小于当前时间”是否成立,若排名消息的消息生成时间小于当前时间,则将排名消息中的排名分数增加至对应的排名对象的得分之中。
可选的,在第一消费者组中的第一消费者处理消息成功时,触发commit(也称为提交)。其中,触发提交(commit)的目的是将当前消费者的offset(也称为位移)提交给代理者(broker)。其中,offset值是消费者向broker注册,并分配到分区时,在对应分区中开始消费的位置。对于大型的消息队列,一般可以按分区存储的,每个分区会分配一个消费者,当分区分配给新的消费者时,新消费者会从代理者保存的offset处开始消费,这个offset就是由这个分区对应的上一任消费者提交(commit)给代理者的。
在本发明的一些实施例中,前述步骤S22具体包括:将消息队列中的多个排名消息取出,放入到缓存队列(buff map)中,并根据消息生成时间对排名消息进行排序,对缓存队列中的排序后的排名消息进行依次处理以对排行榜进行更新,并向缓存队列中动态补充排名消息,以实现对排行榜的有序更新。
本发明的排行榜生成方法,通过利用缓存队列,能够实现动态时间段排行榜的有序更新。
可以为第二消费者组中的每个第二消费者配置对应的缓存队列,或者也可以为第二消费者组配置一个缓存队列供多个第二消费者使用。在本发明的一些实施例中,本发明的排行榜生成方法还包括:预先为第二消费者组设置一个缓存队列的阈值数量(threshold)和延迟消费时间(delay);预先为第二消费者组中的每个第二消费者设置一个缓存队列和一个消息处理线程、或者预先为第二消费者组配置一个缓存队列并为第二消费者组中的每个第二消费者设置对应的消息处理线程。可选的,根据动态时间段来设定延迟消费时间(delay),可选地,动态时间段可以与延迟消费时间(delay)相等。
在前述的步骤S22的一个可选示例中,前述的步骤S22具体包括:从消息队列中取出一个或多个排名消息存入一个第二消费者的缓存队列;判断缓存队列中的排名消息的数量是否少于缓存队列的阈值数量,若该缓存队列中的排名消息的数量少于该阈值数量,则继续进行从消息队列中取出一个或多个排名消息存入缓存队列,直至缓存队列中的消息数量达到阈值数量、或消息队列中没有新的排名消息;按照消息生成时间将缓存队列中的排名消息排序;利用该第二消费者的消息处理线程,从缓存队列中取出消息生成时间最早的一条排名消息作为目标消息进行处理,具体包括对目标消息在延迟动态时间段的时间长度所对应的一段时间后进行处理;在对目标消息进行处理后继续进行前述的判断缓存队列中的排名消息的数量是否少于阈值数量,以对下一个目标消息进行处理。需注意,由于从消息队列中取出排名消息并不意味该消息一定会从消息队列中删除,因此这里所说的消息队列中的“新的排名消息”指的是消息队列中的未被第二消费者组利用的排名消息。
在前述的步骤S22的另一个可选示例中,前述的步骤S22具体包括:从消息队列中取出一个或多个排名消息存入第二消费者组的缓存队列;判断缓存队列中的排名消息的数量是否少于阈值数量,若缓存队列中的排名消息的数量少于阈值数量,则继续进行从消息队列中取出一个或多个排名消息存入缓存队列,直至缓存队列中的消息数量达到阈值数量、或消息队列中没有新的排名消息;按照消息生成时间将缓存队列中的排名消息排序;从缓存队列中取出消息生成时间最早的一条排名消息作为目标消息,将目标消息分配给第二消费者组中的一个第二消费者的消息处理线程进行处理,具体包括对目标消息在延迟动态时间段的时间长度所对应的一段时间后进行处理;需注意,同一时间可以有多条排名消息被对应的多个第二消费者处理;在对目标消息进行处理后继续进行前述的判断缓存队列中的排名消息的数量是否少于阈值数量,以对下一个目标消息进行处理。
在本发明的一些实施例中,前述的步骤S22的一个示例提及的从缓存队列中取出消息生成时间最早的一条排名消息作为目标消息进行处理,以及,前述的步骤S22的另一个示例提及的从缓存队列中取出消息生成时间最早的一条排名消息作为目标消息,将目标消息分配给第二消费者组中的一个第二消费者的消息处理线程进行处理,具体包括:判断目标消息的消息生成时间与延迟消费时间的相加结果是否大于当前时间(即判断“生成时间+delay>当前时间”是否成立),若目标消息的消息生成时间与延迟消费时间的相加结果大于当前时间(若“生成时间+delay>当前时间”成立),则将目标消息中的排名分数从对应的排名对象的得分中减掉,并从缓存队列中删除目标消息,若目标消息的消息生成时间与延迟消费时间的相加结果不大于当前时间(即若“生成时间+delay≤当前时间”成立),则设置第二消费者的处理线程以休眠时间进行休眠,并在休眠完成后继续进行的从缓存队列中取出消息生成时间最早的一条排名消息作为目标消息。其中,该休眠时间为目标消息的消息生成时间与延迟消费时间相加后再与当前时间相减而得到的结果(即“生成时间+delay-当前时间”)。
在本发明的一些实施例中,前述的步骤S22还包括:在当前的第二消费者对当前消息的处理完成后(即完成前述的“将目标消息中的排名分数从对应的排名对象的得分中减掉,并从缓存队列中删除目标消息”之后),并且判定当前消息的offset值(也称为位移值)为缓存队列(buff map)中最小时,触发commit(也称为提交)以将当前消息的第二消费者的位移值进行上报以便根据位移值来将下一消息分配给下一个第二消费者。其中,前述的位移offset表示消费者在对应分区上的位置,亦即表示消费者在对应分区上已经消费的消息数。在当前的第二延迟消费者对当前消息的处理完成后,若判定当前消息的位移offset值不是缓存队列中最小时,继续进行前述步骤S22中的“从缓存队列中取出消息生成时间最早的一条排名消息作为目标消息”的过程以及后续过程。
其中,触发提交(commit)的目的是将当前消费者的offset(也称为位移)提交给代理者(broker)。其中,offset值是消费者向broker注册,并分配到分区时,在对应分区中开始消费的位置。对于大型的消息队列,一般可以按分区存储的,每个分区会分配一个消费者,当分区分配给新的消费者时,新消费者会从代理者保存的offset处开始消费,这个offset就是由这个分区对应的上一任消费者提交(commit)给代理者的。
另外,通过进行前述的判定当前消息的位移值为缓存队列中最小时后才触发提交,能够保证提交的offset之前的消息都已经被处理。因为缓存队列中的消息是按生产时间排序,可能后面的消息offset比前面的小,如果不判断offset值是否为最小而直接提交,那么分区对应的消费者发生切换时,会从提交的offset处开始消费,而事实上前面还有未处理的消息,这些消息不会被取出处理,就会造成榜单数据错误。
在本发明的一些实施例中,前述的步骤S12还包括:重复消费检查,以实现对排行榜的有序更新。具体的,可以在第一消费者组或第二消费者组中的消费者处理排名消息之前,先根据排名消息的内容进行重复消费检查,若判定当前排名消息已经被处理过,则跳过当前排名消息的处理。
在本发明的一些实施例中,可以将排行榜对象和对应的分数存储在redis的zset数据结构中,通过zset自动排序的特点生成排行榜信息,通过消息队列的消费者对排行榜对象的分数进行操作,从而更新排行榜。
在本发明的一些实施例中,使用双消费者组消费同一个消息队列中的消息,实现对动态时间段内排行榜信息的更新。其中,第一消费者组根据消息生成时间实时消费。对于排行榜对象生效的新数据,由该第一消费者组在数据生效时实时触发分数增加。需注意,此处的分数增加指的是:为对应的排名对象添加新分数。另外,在分数可以取负数值的示例中,若新分数为负数值,分数增加可能导致排名对象的得分降低。第二消费者组根据消息生成时间,延迟动态时间段所对应时间长度后,对消息进行消费。对于排行榜对象失效的旧数据,由该第二消费者组在数据失效时实时触发分数减少。需注意此处的分数减少指的是:为对应的排名对象减去旧分数,在分数可以取负数值的示例中,若旧分数为负数值,分数减少可能导致分数值升高。
在本发明的一些实施例中,通过在消费者机器上维护一个缓存队列,对消息队列中的消息根据排行榜数据的生成时间进行重新排序,并动态补充被消费的消息,按照一定策略进行commit和重复消费检查,实现对排行榜的有序更新。
下面以利用redis的zset数据结构并利用kafka消息队列的24小时排行榜为例进一步阐述本发明提出的排行榜生成方法。图3是延迟消费者主线程流程图。图4是延迟消费者处理线程流程图。在本发明的一个具体实施例中,本发明提出的排行榜生成方法主要包括以下步骤:
步骤1,根据排行榜类型生成redis key(也称为键、或键字段,即键值对中的键),将排行榜对象、分数存储在redis对应的zset中。
步骤2,设置kafka主题(topic)、kafka分区数、kafka生产者,将排行榜数据即时写入消息队列中,排行榜数据包含对象、分数、生成时间等,生产者不需要严格按照生成时间写入。
步骤3,设置两个kafka消费者组,订阅上一步骤设置的kafka主题,分别称为实时消费者组和延迟消费者组,一个消费者组包含与kafka分区数同等数量的消费者线程。
其中,消费者组(consumer group)是kafka提供的可扩展且具有容错性的消费者机制。一个消费者组内可以有一个或多个消费者实例(consumer instance),它们共享一个公共的组ID,即group ID。consumer instance可以是一个进程,也可以是一个线程。组内的所有消费者实例协调在一起来消费订阅主题(subscribed topics)的所有分区(partition)。需注意,对于同一个主题(topic),每个消费者组都可以拿到相同的全部数据。事实上,不同消费者组可以消费同一条消息,亦即:在本发明中,实时消费者组和延迟消费者组中的一个消费者组在从kafka消息队列中取出消息后,该消息是还可以被另一个消费者组消费;消息删除的时间可以由代理者(broker)决定。另需注意,consumer group下订阅的主题下的每个分区只能分配给同一个消费者组下的一个consumer来消费(当然该分区还可以被分配给其他的消费者组)。
步骤4,实时消费者组从kafka消息队列中取出消息后,对消息进行解析,提取出对象、分数、生成时间,并实时触发排行榜对象的分数增加,即直接触发根据消息中的分数对消息中的排行榜对象的分数进行更新(增加),以对排名消息进行实时消费。可选的,也可以先判断“消息的生成时间<当前时间”是否成立,若为是,再触发排行榜对象的分数增加,从而可以避免生产消息的机器和消费消息的机器之间时间不同步的问题。
步骤5,延迟消费者组设置一个缓存队列阈值(threshold)和延迟消费时间(delay)。其中,延迟消费时间与动态时间段是相关的,一般来说,动态时间段的时间长度与延迟消费时间的时间长度一致。例如,动态时间段为24小时的排行榜的延迟消费时间可以设置为60*60*24=86400秒。每个延迟消费者线程设置一个缓存队列buff map和一个处理线程,这里缓存队列使用C++的map数据结构。
步骤6,延迟消费者线程从kafka消息队列中取出缓存队列阈值(threshold)对应数量的消息,解析消息取出生成时间,将消息存入缓存队列buff map并按生成时间排序。需注意,本步骤中的从kafka消息队列中取出缓存队列阈值对应数量的消息,可以是逐条取出的。当缓存队列buff map中的消息数量少于缓存队列阈值(threshold)时,延迟消费者线程会不断从kafka消息队列取出新消息补充至缓存队列buff map,直至缓存队列buff map中的消息数量达到缓存队列阈值(threshold),或kafka消息队列中没有新消息。当缓存队列(buff map)的大小还没有达到缓存队列阈值(threshold)而kafka消息队列中已经没有新消息时,也会停止从kafka消息队列取消息。
步骤7,每个延迟消费者线程的处理线程会从缓存队列buff map中取出生成时间最早的一条消息,判断“生成时间+delay>当前时间”是否成立,是则触发排行榜对象的分数减少,并删除buff map中对应消息。否则,设置处理线程休眠秒数为“生成时间+delay-当前时间”。
在前述步骤4中,实时消费者处理消息成功时,触发commit。在前述步骤7中,延迟消费者处理消息成功,并且当前消息的offset值(位移值)为缓存队列(buff map)中最小时,触发commit。
其中,触发commit的目的是将当前消费者的offset(也称为位移)提交给代理者(broker)。其中,offset值是消费者向broker注册,并分配到分区时,在对应分区中开始消费的位置。kafka消息队列是按分区存储的,每个分区会分配一个消费者,当分区分配给新的消费者时,新消费者会从broker保存的offset处开始消费,这个offset就是由这个分区对应的上一任消费者commit给broker的。
另外,通过进行前述的“当前消息的offset值为缓存队列中最小时,触发commit”,能够保证commit的offset之前的消息都已经被处理。因为缓存队列(buff map)中的消息是按生产时间排序,可能后面的消息offset比前面的小,如果不判断offset值是否为最小而直接提交commit,那么分区对应的消费者发生切换时,会从commit的offset处开始消费,而事实上前面还有未处理的消息,这些消息不会被取出处理,就会造成榜单数据错误。
在前述步骤4和7中,消费者处理消息前,会先进行重复消费检查,通过解析消息内容,构造一个与消息内容相关的key(键)并存入redis中,相同消息内容生成的key是相同的,若当前消息生成的key已存在,说明有相同的消息已经被处理过,则跳过当前消息的处理阶段。
在本发明的一些实施例中,本发明的排行榜生成方法包括:接收客户端发出的获取排行榜的请求,可选的,该请求可以是获取动态时间段排行榜的请求;响应于该请求来读取redis中排行榜的实时信息,构造成有序数组作为排行榜,并发送给客户端,可选的,根据当前时间点往前的动态时间段内的实时信息来形成当前时间的排行榜。
本发明能够解决现有技术实现动态时间段排行榜存在的存储消耗大、时间精度低、更新效率低等问题。redis只存储排行榜实时数据,实现小容量存储;排行榜数据生效和失效时能够实时触发分数增加和减少,实现秒级精度;redis直接存储排行榜结果,不需要聚合数据,能够实时更新。进一步的,本发明保证按排行榜数据生成时间有序更新。
本发明的实施例还提供一种排行榜生成装置,该装置可以用于包含生产者和消费者的系统。该装置主要包括:生产者模块以及消费者模块。
其中,该生产者模块用于:将排名消息写入消息队列,其中排名消息包括排名对象信息、排名对象的排名分数和消息生成时间。
该消费者模块用于:利用消费者来消费消息队列中的排名消息,以根据动态时间段内的排名消息来更新排行榜。
其中,该消费者模块可以包括第一子模块和第二子模块。
该第一子模块用于:对排名消息进行实时消费,以将属于动态时间段内的(亦即生效的新的)排名消息中的排名分数增加至对应的排名对象。
该第二子模块用于:延迟动态时间段的时间长度对应的一段时间,对排名消息进行再一次消费,以将不再属于动态时间段内的(亦即失效的旧的)排名消息中的排名分数从对应的排名对象的得分中减掉。
在一个可选示例中,该消费者模块用于:利用第一消费者组(实时消费者组)和第二消费者组(也称为延迟消费者组)来消费消息队列中的排名消息,以根据动态时间段内的排名消息来更新排行榜。该第一子模块用于:利用第一消费者组中的消费者,对排名消息进行实时消费。该第二子模块用于:利用第二消费者组中的消费者,对排名消息进行前述的延时消费。
另外,本发明实施例示出的各种排行榜生成装置可以包括有用于执行前述各个实施例所述方法对应的模块和单元,而其详细说明和技术效果可以参考前述各实施例中的相应说明,在此不再赘述。
本发明的实施例还提供另一种排行榜生成装置。该装置可以作为代理者,适用于包含代理者、生产者和消费者的系统。该装置主要包括:接收模块和发送模块。
其中,该接收模块用于:接收生产者发送来的排名消息并写入消息队列。其中排名消息包括排名对象信息、排名对象的排名分数和消息生成时间。
该发送模块用于:向消费者发送指令,以利用消费者来消费消息队列中的排名消息以根据动态时间段内的排名消息更新排行榜。
可选的,发送模块可以具体用于:向一个或多个消费者发送指令,用以对排名消息进行实时消费,以将属于动态时间段内的排名消息中的排名分数增加至对应的排名对象;和,向一个或多个消费者发送指令,用以延迟动态时间段的时间长度对应的一段时间,对排名消息进行再一次消费,以将不再属于动态时间段内的排名消息中的排名分数从对应的排名对象的得分中减掉。
在一个可选示例中,该发送模块具体用于:向第一消费者组和第二消费者组发送指令,以利用第一消费者组中的消费者和第二消费者组中的消费者来消费消息队列中的排名消息以根据动态时间段内的排名消息更新排行榜。可选的,发送模块可以具体用于:向第一消费者组发送指令,用以利用第一消费者组中的消费者,对排名消息进行实时消费;和,向第二消费者组发送指令,用以利用第二消费者组中的消费者,对排名消息进行延迟消费。
另外,本发明实施例示出的各种排行榜生成装置可以包括有用于执行前述各个实施例所述方法对应的模块和单元,而其详细说明和技术效果可以参考前述各实施例中的相应说明,在此不再赘述。
图5是图示根据本发明的一个实施例的排行榜生成设备的示意性框图。如图5所示,根据本公开实施例的排行榜生成设备100包括存储器101和处理器102。
该存储器101用于存储非暂时性计算机可读指令。具体地,存储器101可以包括一个或多个计算机程序产品,该计算机程序产品可以包括各种形式的计算机可读存储介质,例如易失性存储器和/或非易失性存储器。该易失性存储器例如可以包括随机存取存储器(RAM)和/或高速缓冲存储器(cache)等。该非易失性存储器例如可以包括只读存储器(ROM)、硬盘、闪存等。
该处理器102可以是中央处理单元(CPU)或者具有数据处理能力和/或指令执行能力的其它形式的处理单元,并且可以控制排行榜生成设备100中的其它组件以执行期望的功能。在本公开的一个实施例中,该处理器102用于运行该存储器101中存储的该计算机可读指令,使得该排行榜生成设备100执行前述的本公开各实施例的排行榜生成方法的全部或部分步骤。
有关本实施例的详细说明和技术效果可以参考前述各实施例中的相应说明,在此不再赘述。
本发明的实施例还提供一种计算机存储介质,该计算机存储介质中存储有计算机指令,当该计算机指令在设备上运行时,使得设备执行上述相关方法步骤实现上述实施例中的排行榜生成方法。
本发明的实施例还提供一种计算机程序产品,当该计算机程序产品在计算机上运行时,使得计算机执行上述相关步骤,以实现上述实施例中的排行榜生成方法。
另外,本发明的实施例还提供一种装置,这个装置具体可以是芯片,组件或模块,该装置可包括相连的处理器和存储器;其中,存储器用于存储计算机执行指令,当装置运行时,处理器可执行存储器存储的计算机执行指令,以使芯片执行上述各方法实施例中的排行榜生成方法。
其中,本发明提供的装置、计算机存储介质、计算机程序产品或芯片均用于执行上文所提供的对应的方法,因此,其所能达到的有益效果可参考上文所提供的对应的方法中的有益效果,此处不再赘述。
以上所述,仅是本发明的较佳实施例而已,并非对本发明做任何形式上的限制,虽然本发明已以较佳实施例揭露如上,然而并非用以限定本发明,任何熟悉本专业的技术人员,在不脱离本发明技术方案范围内,当可利用上述揭示的技术内容做出些许更动或修饰为等同变化的等效实施例,但凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所做的任何简单修改、等同变化与修饰,均仍属于本发明技术方案的范围内。

Claims (12)

1.一种排行榜生成方法,其特征在于,所述方法包括以下步骤:
利用生产者将排名消息写入消息队列,其中所述排名消息包括排名对象信息、排名对象的排名分数和消息生成时间;
利用消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜;
其中,所述利用消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜包括:
对所述排名消息进行实时消费,以将属于动态时间段内的所述排名消息中的所述排名分数增加至对应的排名对象;和,
延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,以将不再属于动态时间段内的所述排名消息中的所述排名分数从对应的排名对象的得分中减掉。
2.根据权利要求1所述的排行榜生成方法,其特征在于,所述利用消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜包括:
利用第一消费者组中的一个或多个消费者来进行所述的对所述排名消息进行实时消费;
利用第二消费者组中的一个或多个消费者来进行所述的对所述排名消息进行再一次消费。
3.根据权利要求2所述的排行榜生成方法,其特征在于,所述的对所述排名消息进行实时消费,以将属于动态时间段内的所述排名消息中的分数增加至对应的排名对象,具体包括:
从所述消息队列中取出一个所述排名消息;
对所述排名消息进行解析得到所述排名对象信息、所述排名分数、所述消息生成时间;
判断所述排名消息的所述消息生成时间是否小于当前时间,若所述消息生成时间小于当前时间,则将所述排名消息中的所述排名分数增加至对应的排名对象的得分之中。
4.根据权利要求2所述的排行榜生成方法,其特征在于,所述的延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,具体包括:
将所述消息队列中的多个排名消息取出到缓存队列并根据所述消息生成时间进行排序,对缓存队列中的排序后的排名消息进行依次处理以对排行榜进行更新,并向缓存队列中动态补充排名消息,以对排行榜进行有序更新。
5.根据权利要求4所述的排行榜生成方法,其特征在于,
所述方法还包括:预先为所述第二消费者组设置一个缓存队列的阈值数量和延迟消费时间,预先为所述第二消费者组中的每个第二消费者设置一个缓存队列和一个消息处理线程;其中,所述延迟消费时间的时间长度与所述动态时间段的时间长度一致;
所述的将所述消息队列中的多个排名消息取出到缓存队列并根据所述消息生成时间进行排序,对缓存队列中的排序后的排名消息进行依次处理以对排行榜进行更新,并向缓存队列中动态补充排名消息,以对排行榜进行有序更新,具体包括:
从所述消息队列中取出一个或多个排名消息存入一个第二消费者的缓存队列;
判断所述缓存队列中的排名消息的数量是否少于所述阈值数量,若所述缓存队列中的排名消息的数量少于所述阈值数量,则继续进行从所述消息队列中取出一个或多个排名消息存入所述缓存队列,直至所述缓存队列中的消息数量达到所述阈值数量、或所述消息队列中没有新的排名消息;
按照所述消息生成时间将所述缓存队列中的排名消息排序;
利用所述第二消费者的消息处理线程,从缓存队列中取出所述消息生成时间最早的一条排名消息作为目标消息,对所述目标消息在延迟动态时间段的时间长度对应的一段时间后进行处理;
在对所述目标消息进行处理后继续进行所述的判断所述缓存队列中的排名消息的数量是否少于所述阈值数量,以对下一个目标消息进行处理。
6.根据权利要求5所述的排行榜生成方法,其特征在于,所述的从缓存队列中取出所述消息生成时间最早的一条排名消息作为目标消息,对所述目标消息在延迟动态时间段的时间长度对应的一段时间后进行处理,具体包括:
判断所述目标消息的所述消息生成时间与延迟消费时间的相加结果是否大于当前时间,
若所述目标消息的所述消息生成时间与延迟消费时间的相加结果大于当前时间,则将所述目标消息中的排名分数从对应的排名对象的得分中减掉,并从缓存队列中删除所述目标消息,
若所述目标消息的所述消息生成时间与延迟消费时间的相加结果不大于当前时间,则设置所述第二消费者的处理线程以休眠时间进行休眠,并在休眠完成后继续进行所述的从缓存队列中取出所述消息生成时间最早的一条排名消息作为目标消息;其中,所述休眠时间为所述目标消息的消息生成时间与延迟消费时间相加后再与当前时间相减而得到的结果。
7.根据权利要求6所述的排行榜生成方法,其特征在于,所述的延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,还包括:
在当前的第二消费者对当前消息的处理完成后,并且判定当前消息的位移值为缓存队列中最小时,触发提交以将当前消息的第二消费者的位移值进行上报以便根据所述位移值来将下一消息分配给下一个第二消费者。
8.根据权利要求2所述的排行榜生成方法,其特征在于,所述利用消费者来消费所述消息队列中的所述排名消息,还包括:
在第一消费者组或第二消费者组中的消费者处理排名消息之前,先根据排名消息的内容进行重复消费检查,若判定当前排名消息已经被处理过,则跳过当前排名消息的处理。
9.一种排行榜生成装置,其特征在于,所述装置包括:
生产者模块,用于将排名消息写入消息队列,其中所述排名消息包括排名对象信息、排名对象的排名分数和消息生成时间;
消费者模块,用于利用消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜;
其中,所述消费者模块包括第一子模块和第二子模块;
所述第一子模块用于:对所述排名消息进行实时消费,以将属于动态时间段内的所述排名消息中的所述排名分数增加至对应的排名对象;
所述第二子模块用于:延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,以将不再属于动态时间段内的所述排名消息中的所述排名分数从对应的排名对象的得分中减掉。
10.一种排行榜生成装置,其特征在于,所述装置包括:
接收模块,用于接收生产者发送来的排名消息并写入消息队列,其中所述排名消息包括排名对象信息、排名对象的排名分数和消息生成时间;
发送模块,用于向消费者发送指令,以利用所述消费者来消费所述消息队列中的所述排名消息以根据动态时间段内的排名消息更新排行榜;
其中,所述发送模块具体用于:
向所述第一消费者组发送指令,用以对所述排名消息进行实时消费,以将属于动态时间段内的所述排名消息中的所述排名分数增加至对应的排名对象;和,
向所述第二消费者组发送指令,用以延迟动态时间段的时间长度对应的一段时间,对所述排名消息进行再一次消费,以将不再属于动态时间段内的所述排名消息中的所述排名分数从对应的排名对象的得分中减掉。
11.一种排行榜生成设备,包括:
存储器,用于存储非暂时性计算机可读指令;以及
处理器,用于运行所述计算机可读指令,使得所述计算机可读指令被所述处理器执行时实现权利要求1至8中任一项所述的排行榜生成方法。
12.一种计算机存储介质,其特征在于,包括计算机指令,当所述计算机指令在设备上运行时,使得所述设备执行如权利要求1至8中任一项所述的排行榜生成方法。
CN202111402808.9A 2021-11-19 2021-11-19 排行榜生成方法、装置、设备及存储介质 Pending CN113986962A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202111402808.9A CN113986962A (zh) 2021-11-19 2021-11-19 排行榜生成方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111402808.9A CN113986962A (zh) 2021-11-19 2021-11-19 排行榜生成方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN113986962A true CN113986962A (zh) 2022-01-28

Family

ID=79750252

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111402808.9A Pending CN113986962A (zh) 2021-11-19 2021-11-19 排行榜生成方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN113986962A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115051963A (zh) * 2022-06-06 2022-09-13 阿里巴巴(中国)有限公司 消息处理方法及装置、消息队列系统及电子设备

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN115051963A (zh) * 2022-06-06 2022-09-13 阿里巴巴(中国)有限公司 消息处理方法及装置、消息队列系统及电子设备
CN115051963B (zh) * 2022-06-06 2024-01-26 阿里巴巴(中国)有限公司 消息处理方法及装置、消息队列系统及电子设备

Similar Documents

Publication Publication Date Title
US20170339238A1 (en) Large message support for a publish-subscribe messaging system
CN111159436B (zh) 一种推荐多媒体内容的方法、装置及计算设备
WO2019062699A1 (zh) 资源调度方法、调度服务器、云计算系统及存储介质
CN105339885B (zh) 磁盘上数据的小随机更改的高效存储
CN110874271B (zh) 一种海量建筑图斑特征快速计算方法及系统
CN112799606B (zh) Io请求的调度方法及装置
US10073648B2 (en) Repartitioning data in a distributed computing system
US20220179585A1 (en) Management of Idle Time Compute Tasks in Storage Systems
CN111475759A (zh) 一种消息推送平台、方法、装置、服务器和存储介质
CN116185308B (zh) 一种数据集处理方法、装置、设备、介质及模型训练系统
CN112558869A (zh) 基于大数据遥感影像缓存方法
CN113360577A (zh) 一种mpp数据库数据处理方法、装置、设备及存储介质
CN113986962A (zh) 排行榜生成方法、装置、设备及存储介质
CN109992469B (zh) 一种合并日志的方法及装置
CN111163118A (zh) 一种Kafka集群中的消息传输方法及装置
CN111857992B (zh) 一种Radosgw模块中线程资源分配方法和装置
CN112000703A (zh) 数据入库处理方法、装置、计算机设备和存储介质
CN111666045A (zh) 基于Git系统的数据处理方法、系统、设备及存储介质
WO2023193653A1 (zh) 内容操作方法、装置、服务器及存储介质
CN112965939A (zh) 一种文件合并方法、装置和设备
US10606795B2 (en) Methods for managing a buffer cache and devices thereof
CN113835613B (zh) 一种文件读取方法、装置、电子设备和存储介质
US10331700B2 (en) System, method, and apparatus for dynamically replicating data for heterogeneous Hadoop
CN113093994A (zh) 一种数据处理方法及装置
CN113254439A (zh) 对存储装置中的对象分组模式进行性能优化的方法和系统

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination