一种数据排行的辅助方法及装置与流程

文档序号:17130785发布日期:2019-03-16 01:11阅读:187来源:国知局
一种数据排行的辅助方法及装置与流程

本申请实施例涉及数据处理技术领域,尤其涉及一种数据排行的辅助方法及装置。



背景技术:

传统的业务系统是从关系型的业务数据库中确定出排行数据。这种方式严重依赖于业务数据库的性能。在高并发的排行查询情景下,会造成业务数据库没有资源提供连接,导致查询失败。

针对这一问题,现有的解决方式是基于异步线程,将从业务数据库中确定出的排行数据缓存在内存型数据库中,由内存型数据库负责提供排行数据。但异步线程采用定期执行机制,无法保证排行数据的时效性;此外,在业务数据库下线或异常的场景中,比如对业务数据库进行性能扩展时,内存型数据库将无法得到更新,导致缓存的排行数据严重滞后,极大影响了用户的体验。

有鉴于此,如何在满足高并发的排行查询要求的前提下,提供实时的排行数据,是本申请所要解决的技术问题。



技术实现要素:

本申请实施例目的是提供一种数据排行的辅助方法及装置,能够在满足高并发的排行查询要求的前提下,提供实时的排行数据。

为了实现上述目的,本申请实施例是这样实现的:

第一方面,提供一种数据排行的辅助方法,包括:

在触发预设条件时,获取内存型数据针对排行场景需要同步的数据;

按照有序集合数据结构,将所述内存型数据库针对排行场景需要同步的数据同步至所述内存型数据库中,得到所述排行场景对应的缓存数据;

在获取针对所述排行场景的排行查询请求后,构建有序集合数据结构的排序命令;

对所述排行场景对应的缓存数据执行所述排序命令,得到所述排行场景对应的排行数据。

第二方面,提供了一种数据排行的辅助装置,包括:

获取模块,用于在触发预设条件时,获取内存型数据针对排行场景需要同步的数据;

同步模块,用于按照有序集合数据结构,将所述内存型数据库针对排行场景需要同步的数据同步至所述内存型数据库中,得到所述排行场景对应的缓存数据;

构建模块,用于在获取针对所述排行场景的排行查询请求后,构建有序集合数据结构的排序命令;

执行模块,用于对所述排行场景对应的缓存数据执行所述排序命令,得到所述排行场景对应的排行数据。

本申请实施例中,在排行场景相关的业务数据发生变化时,按照有序集合数据结构,将需要针对排行场景同步的数据同步至内存型数据库,从而利用有序集合数据结构的排序命令,对内存型数据库中针对排行场景的缓存数据进行排序,得到排行场景对应的排行数据。一方面,不需要依赖异步线程从业务数据库中获取排行数据,因此具有较高的实时性,且在业务数据库下线或发生异常时,也不会受到影响;另一方面,基于内存型数据库强大的吞吐量和有序集合数据结构超高的排序查询效率,还能够满足高并发的排行查询要求。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请实施例中记载的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。

图1为本申请实施例提供的数据排行的辅助方法的流程示意图;

图2为本申请实施例提供的数据排行的辅助方法在实际应用中的第一个流程示意图;

图3为本申请实施例提供的数据排行的辅助方法在实际应用中的第二个流程示意图;

图4为本申请实施例提供的数据排行的辅助方法在实际应用中的第三个流程示意图;

图5为本申请实施例提供的数据排行的辅助装置的结构示意图。

具体实施方式

为了使本技术领域的人员更好地理解本申请中的技术方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都应当属于本申请保护的范围。

如前所述,现有技术是通过定期执行的异步线程将从业务数据库中确定出的排行数据缓存至内存行数据库中,并由内存型数据库负责提供排行数据。这种方式在时效性无法满足用户的要求,比如一些实际业务场景中,实时的排行数据能够刺激用户的参与感,对于用户来讲是影响体验的重要因素。此外,内存型数据的更新依赖业务数据库,当业务数据库下线或者处于异常时,就会导致内存型数据的缓存数据存在严重的滞后,也是用户所无法接受的。

有鉴于此,本申请实施例提供一种可解决上述问题的技术方案。

一方面,本申请实施例提供一种数据排行的辅助方法,如图1所示,包括:

步骤102,在触发预设条件时,获取内存型数据针对排行场景需要同步的数据;

针对步骤102而言:

可以在业务系统针对排行场景对应的业务数据发生变动时,获取内存型数据针对排行场景需要同步的数据。

比如,上述业务系统为金融系统,对应的排行场景可以是对用户按照余额的大小进行排行。每当用户产生增加或者减少的金额时,即可获取内存型数据库针对排行场景所需要同步的数据。

步骤104,按照有序集合数据结构,将内存型数据库针对排行场景需要同步的数据同步至内存型数据库中,得到排行场景对应的缓存数据;

针对步骤104而言:

数据排序是有序集合数据结构的基础功能,本申请实施例将排行场景的缓存数据按照有序集合数据结构存储至内存数据库,即可利用有序集合数据结构的排序功能,对缓存数据进行排序,得到排行数据。

步骤106,在获取针对排行场景的排行查询请求后,构建有序集合数据结构的排序命令;

针对步骤106而言:

本步骤可以基于有序集合数据结构的排序命令,实现多种方式的排序,比如实现分页排序、范围排序等。

本申请实施例不对具体的排序方式进行限定。

步骤108,对排行场景对应的缓存数据执行排序命令,得到排行场景对应的排行数据。

针对步骤108而言:

应理解,排行数据是对内存型数据库中的缓存数据执行排序命令后获得的,并不是像现有技术中那样,从业务数据库中获取。因此内存型数据库可以不依赖业务数据库提供排行数据。

本申请实施例中,在排行场景相关的业务数据发生变化时,按照有序集合数据结构,将需要针对排行场景同步的数据同步至内存型数据库,从而利用有序集合数据结构的排序命令,对内存型数据库中针对排行场景的缓存数据进行排序,得到排行场景对应的排行数据。一方面,不需要依赖异步线程从业务数据库中获取排行数据,因此具有较高的实时性,且在业务数据库下线或发生异常时,也不会受到影响;另一方面,基于内存型数据库强大的吞吐量和有序集合数据结构超高的排序查询效率,还能够满足高并发的排行查询要求。

下面对本申请实施例的数据排行的辅助方法进行详细介绍。

本申请实施例具体按照zset数据结构(一种有序集合数据结构),将需要针对排行场景同步的数据同步至内存型数据库中。

zset数据结构属于key-value其中一种表现方式。它包括:key、member和score三种元素,每个key下,member对应有一个score。zset数据结构的特点是可以基于score值的大小对member排序。

基于zset数据结构的特点,本申请实施例对排行场景定义了排行周期、排行对象和排行属性值三种属性,分别作为zset数据结构的键key、成员member和得分score。

后续对同步后的缓存数据执行zset数据结构的排序命令,能够以排行周期为约束条件,对排行对象按照排行属性值的大小进行排序,得到排行场景相对应的排行数据。

其中,内存型数据库针对排行场景所需要向业务数据库同步的数据包括:目标排行对象的排行属性值对应的变量值(目标排行对象属于排行场景中的排行对象);

在执行上述步骤104时,具体包括以下步骤:

步骤1041,若内存型数据库的key存在当前排行周期的字段值,则基于变量值,对目标排行对象在当前排行周期对应内存型数据库的score中的字段值进行修改;

步骤1042,若内存型数据库的key不存在当前排行周期的字段值,则将当前排行周期的字段配置至内存型数据库的key中,并基于变量值,对目标排行对象在上一排行周期内存型数据库的score中的字段值进行计算,并将计算结果写入至目标排行对象在当前排行周期对应内存型数据库的score中。

应理解,本申请实施例中的内存型数据库可以保存多个排行周期的排行数据,即内存型数据库的key中含有多个排行周期的字段值。

或者,本申请实施例中的内存型数据库也可以指保留最近一个排行周期的排行数据。即,在执行完上述步骤1042后,还进一步删除掉目标排行对象在上一排行周期对应key、member、score中的字段值。

当然,若内存型数据库的member未存在目标排行对象的字段值,则本申请实施例还可以进一步将目标排行对象的字段值配置至内存型数据库的member中。

需要说明的是,zset数据结构的排序指令是先根据score的字段值大小对member进行排序,在score字段值大小相同时,再进一步根据member字段值以从大到小的固定顺序对member进行排序。

因此,本申请实施例在为内存型数据库的member配置排行对象时,可以通过设置排行对象的字段值的大小,以实现更具体的排序效果。

比如,本申请排行场景中的排行对象分为高优先级排行对象和低优先级排行对象。

在排行属性值相同时,高优先级排行对象的排名应位于低优先级排行对象的排名之前。

对应地,本申请实施例可以使用数值表示的编号代表排行对象,高优先级的排行对象的编号数值大于低优先级的排行对象的编号数值。

在为内存型数据库的member配置排行对象时,可以将排行对象的编号作为排行对象的字段值写入至member中。

以业务系统中的用户作为排行对象为示例,在实际场景中,用户之间的优先级体现在业务系统侧,业务系统一般会给其用户配置作为用户标识的编号,以区分不同的优先级。

因此,为简化方案,本申请实施例可以复用业务系统为用户配置的编号,作为用户在内存型数据库的member中的字段值。

当然,若业务系统给其用户配置的用户标识不是以数值表示的编号,则本申请实施例再进一步基于预设的编译算法,将给户配置的用户标识编译成以数值表示的编号。

应理解,用户的优先级越高,则编译算法编译的编号的数值越大;用户的优先级越低,则编译算法编译的编号的数值越小。

这里需要说明的是,zset数据结构的排序指令只能以member的字段值从大到小的固定顺序进行排序。

用户对应的编号大小取决于业务系统,实际中可能确定到的高优先级用户的编号会小于低先级用户的编号,这样会导致在基于zset数据结构的排序指令进行排序时,低优先级用户的排名位于高优先级的排名之前。为避免这一问题发生,可以使用一既定的较大值减去用户对应的编号来作为用户在member中的字段值。

比如业务系统为高优先级用户配置的编号值为1,低优先级用户配置的编号值为2,则既定数值可以取10,高优先级用户在member中的字段值为10-1=9,低优先级用户在member中的字段值为10-2=8。由于高优先级在member中的字段值大于低优先级用户在member中的字段值(9>8),因此在两者排行属性值相同的情况下,高优先级用户会排在低优先级用户之前。

在具体实现时,本申请实施例可以构建排行对象的字段值的配置过程,该配置过程用于使用既定数值减去排行对象对应的编号,并将计算结果作为排行对象的字段值配置至内存型数据库的member中;其中,既定数值应大于业务系统为排行对象配置的编号的数值上限,以避免出现负值的情况。

在获得配置过程后,即可基于上述配置过程,将任意目标排行对象的字段值配置至内存型数据库的member中。

对应地,从内存型数据库中读取目标排行对象,则需要将目标排行对象在member中字段值还原回对应的编号,从而基于编号正确识别出目标排行对象。即,本申请实施例的辅助方法还包括:

构建排行对象的字段值的读取过程,该读取过程用于使用上既定数值减去排行对象在内存型数据库的member中的字段值,得到排行对象对应的编号;其中,排行对象对应的编号作为排行对象的字段值的读取结果。

比如,目标排行对象的编码为10,既定值为100,基于上述配置过程,目标排行对象在内存型数据库的member中的字段值为100-10=90。

通过上述读取过程在读取标排行对象在内存型数据库的member中的字段值时,可以使用既定值100减去目标排行对象在member中的字段值90,准确还原回目标排行对象的编码。

应理解,本申请实施例的方案可以根据业务系统对用户标识的配置特点,决定是否构建排行对象针对member的配置过程和读取过程。

在按照zset数据结构,将内存型数据库针对排行场景需要同步的数据同步至内存型数据库中后,即可通过zset数据结构的排序命令对缓存数据进行排序,以得到排行数据。

具体地,在获取排行查询请求后,先确定当前排行周期的字段值,并通过当前排行周期的字段值来判断内存数据库是否存在对应当前排行周期的缓存数据。

若内存型数据库的key存在当前排行周期的字段值,则构建以当前排行周期的字段值为约束条件,对member按照score的大小进行排序的排序命令;

若内存型数据库的key不存在当前排行周期的字段值,则构建以上一排行周期的字段值为约束条件,对member按照score的大小进行排序的排序命令。

在实际应用中,本申请实施例可以构建zrank命令或zrevarange命令,对缓存数据实现排序。

以zrank命令为例,本申请可以基于zrank指令根据排行对象的字段值,查询对应的排行位置。zset内部的skiplist跳跃表以时间复杂度为(平均o(logn)最坏o(n))跳跃表节点进行数据跨度,查询获得排行数据。

以zrevarange命令为例,可以直接使用zrevrange命令实现范围查询,例如1-100名按照排行属性值从大到小的顺序对排行对象进行排序,获得前100名对排行对象的排行数据。

应理解,本申请实施例基于zset数据结构能够以key为约束条件,按照score对member进行排序的特点,将排行场景中的排行周期、排行对象和排行属性值分别作为key、member和score,从而实现在某一排行周期内,按照排行属性值对排行对象进行排序的功能。key、member和score之间映射关系简单,即便当数据量级庞大时也能够实现高效快速的排序,性能卓越,是其他key-value的数据结构所无法企及的。

下面结合实际应用,对申请实施例的辅助方法的流程进行介绍。

示例性地,本实际应用中的业务系统为金属系统,配置有mysql数据库和redis数据库。其中,mysql数据库作为业务数据库;redis数据库作为内存型数据库,针对排行场景,采用zset数据结构。

假设排行场景是针对用户的余额进行排行,排行周期为周,作为zset数据结构的key;排行对象为用户,作为zset数据结构的member;排行属性值为余额值,作为zset数据结构的score。

本实际应用可以采用两种方式来对redis数据库进行更新。

一种方式是采用定期执行的异步线程,从mysql数据库中获取针对排行场景需要同步的数据,该方式如图2所示,主要流程包括:

在满足定期执行的触发条件时,从mysql数据库中获取全量的流水数据。

确定当前排行周期的key值(字段值),即本周对应的key值。

基于前排行周期的key值,通过全量的流水数据对redis数据库进行数据同步。

清空redis数据库中上一排行周期的缓存数据。

由于本方式中,redis数据库的同步数据来源于业务数据库,因此可以从业务数据库获取全量的流水数据对redis数据库中所有用户进行余额更新,在更新完成后,还可以对上一排行周期的缓存数据进行删除。

另一种方式是,业务系统中一有用户的余额发生变化,就对redis数据库进行同步,该方式如图3所示,主要流程包括:

在业务系统中的目标用户的余额发生变化时,从业务系统中获取目标用户余额的变量值。

确定当前排行周期的key值(即本周对应的key值)。

判断redis数据库是否存在当前排行周期的key值,以及redis数据库是否存目标用户的member值。

若redis数据库不存在当前排行周期的key值,则调用zadd指令在redis数据库的key中配置当前排行周期的key值。

若redis数据库不存在目标用户的member值,则调用zset数据结构的zadd指令在redis数据库的member中配置目标用户的member值,以及基于目标用户的余额的变量值,配置目标用户在当前周期的score中的字段值。

若redis数据库存在当前排行周期的key值,以及目标用户的member值,则调用zset数据结构的incrementscorem命令,按照该用户余额的变量值,对该用户在当前周期对应的score值进行调整。

在通过图2和图3所示的方法对redis数据库进行更新后,即可基于排序命令获取redis数据库的排行数据,对应的流程如图4所示,包括:

获取以余额大小对用户进行排行的排行查询请求。

确定当前排行周期的key值(即本周对应的key值)。

判断redis数据库是否存在当前排行周期的key值。

若redis数据库存在当前排行周期的key值,则基于当前排行周期的key值,对redis数据库的缓存数据执行zset数据结构的分页排序指令,得到分页显示的排行数据;并将分页显示的排行数据进行反序列化处理,以及解析、组装,以在业务系统中显示。

若redis数据库是不存在当前排行周期的key值(当前时刻为止,本周的排行数据与上一周排行数据未发生变化),则确定上一排行周期的kye值,并判断redis数据库是否存在上一排行周期的key值;

若redis数据库存在上一排行周期的key值,则基于上一排行周期的key值,对redis数据库的缓存数据执行zset数据结构的分页排序指令,到分页显示的排行数据;并将分页显示的排行数据进行反序列化处理,以及解析、组装,以在业务系统中显示。若redis数据库不存在上一排行周期的key值,则执行异常处理(如报警、记录异常日志等)。

基于上述设计,本申请实施例提供的数据分页排序方法通过图2所示的步骤,对redis数据库进行定期的全量更新,并基于图3所示的步骤,对redis数据库进行实时的增量更新,从而保证redis数据库提供的排行数据与实际情景一致,以最小的性能消耗来向外提供排行查询服务。同时只需要增加redis数据库的key即可实现更多功能的扩展,比如同时实现周排行、日排行、月排行等功能。

以上是对本申请实施例的数据排行的辅助方法的介绍。应理解,本申请实施例针对排行场景并不限于是仅按照zset数据结构对内存型数据库进行数据同步,还可以是在该基础之上,进一步按照string数据结构和hash数据结构记录排行场景的缓存数据,以实现更多的拓展功能。此外,本申请实施例中的内存型数据库也不限于是仅记录一种排行场景对应的缓存数据,可以针对不同的排行场景分别记录相对应的缓存数据。

与之对应地,本申请实施例还提供一种数据排行的辅助装置,如图5所示,包括:

获取模块51,用于在触发预设条件时,获取内存型数据针对排行场景需要同步的数据;

具体地,获取模块51可以在业务系统针对排行场景对应的业务数据发生变动时,获取内存型数据针对排行场景需要同步的数据。

比如,上述业务系统为金融系统,对应的排行场景可以是对用户按照余额的大小进行排行。获取模块51在用户产生增加或者减少的金额时,即可获取内存型数据库针对排行场景所需要同步的数据。

同步模块52,用于按照有序集合数据结构,将所述内存型数据库针对排行场景需要同步的数据同步至所述内存型数据库中,得到所述排行场景对应的缓存数据;

其中,数据排序是有序集合数据结构的基础功能,将排行场景的缓存数据按照有序集合数据结构存储至内存数据库,即可利用有序集合数据结构的排序功能,对缓存数据进行排序,得到排行数据。

构建模块53,用于在获取针对所述排行场景的排行查询请求后,构建有序集合数据结构的排序命令;

其中,构建模块53可以基于有序集合数据结构的排序命令,实现多种方式的排序,比如实现分页排序、范围排序等。本申请实施例并不对具体的排序方式进行限定。

执行模块54,用于对所述排行场景对应的缓存数据执行所述排序命令,得到所述排行场景对应的排行数据。

其中,排行数据是对内存型数据库中的缓存数据执行排序命令后获得的,并不是像现有技术中那样,从业务数据库中获取。因此内存型数据库可以不依赖业务数据库提供排行数据。

本申请实施例中,在排行场景相关的业务数据发生变化时,按照有序集合数据结构,将需要针对排行场景同步的数据同步至内存型数据库,从而利用有序集合数据结构的排序命令,对内存型数据库中针对排行场景的缓存数据进行排序,得到排行场景对应的排行数据。一方面,不需要依赖异步线程从业务数据库中获取排行数据,因此具有较高的实时性,且在业务数据库下线或发生异常时,也不会受到影响;另一方面,基于内存型数据库强大的吞吐量和有序集合数据结构超高的排序查询效率,还能够满足高并发的排行查询要求。

下面对本申请实施例的数据排行的辅助装置进行详细介绍。

本申请实施例具体按照zset数据结构(一种有序集合数据结构),将需要针对排行场景同步的数据同步至内存型数据库中。

zset数据结构属于key-value其中一种表现方式。它包括:key、member和score三种元素,每个key下,member对应有一个score。zset数据结构的特点是可以基于score值的大小对member排序。

基于zset数据结构的特点,本申请实施例对排行场景定义了排行周期、排行对象和排行属性值三种属性,分别作为zset数据结构的键key、成员member和得分score。

后续对同步后的缓存数据执行zset数据结构的排序命令,能够以排行周期为约束条件,对排行对象按照排行属性值的大小进行排序,得到排行场景相对应的排行数据。

其中,内存型数据库针对排行场景所需要向业务数据库同步的数据包括:目标排行对象的排行属性值对应的变量值(目标排行对象属于排行场景中的排行对象);同步模块52具体用于:

若所述内存型数据库的key存在当前排行周期的字段值,则基于所述变量值,对所述目标排行对象在当前排行周期对应所述内存型数据库的score中的字段值进行修改;

若所述内存型数据库的key不存在当前排行周期的字段值,则将当前排行周期的字段配置至所述内存型数据库的key中,并基于所述变量值,对所述目标排行对象在上一排行周期对应所述内存型数据库的score中的字段值进行计算,并将计算结果写入至所述目标排行对象在当前排行周期对应所述内存型数据库的score中。

应理解,本申请实施例中的内存型数据库可以保存多个排行周期的排行数据,即内存型数据库的key中含有多个排行周期的字段值。

或者,本申请实施例中的内存型数据库也可以指保留最近一个排行周期的排行数据。即,同步模块52在写入目标排行对象在当前排行周期对应内存型数据库的score中后,还进一步删除掉目标排行对象在上一排行周期对应key、member、score中的字段值。

当然,若内存型数据库的member未存在目标排行对象的字段值,则本申请实施例同步模块52还可以进一步将目标排行对象的字段值配置至内存型数据库的member中。

需要说明的是,zset数据结构的排序指令是先根据score的字段值大小对member进行排序,在score字段值大小相同时,再进一步根据member字段值以从大到小的固定顺序对member进行排序。

因此,本申请实施例的同步模块52在为内存型数据库的member配置排行对象时,可以通过设置排行对象的字段值的大小,以实现更具体的排序效果。

比如,本申请排行场景中的排行对象分为高优先级排行对象和低优先级排行对象。

在排行属性值相同时,高优先级排行对象的排名应位于低优先级排行对象的排名之前。

对应地,本申请实施例可以使用数值表示的编号代表排行对象,高优先级的排行对象的编号数值大于低优先级的排行对象的编号数值。

同步模块52在为内存型数据库的member配置排行对象时,可以将排行对象的编号作为排行对象的字段值写入至member中。

以业务系统中的用户作为排行对象为示例,在实际场景中,用户之间的优先级体现在业务系统侧,业务系统一般会给其用户配置作为用户标识的编号,以区分不同的优先级。

同步模块52可以复用业务系统为用户配置的编号,作为用户在内存型数据库的member中的字段值。

当然,若业务系统给其用户配置的用户标识不是以数值表示的编号,则同步模块52还可以进一步基于预设的编译算法,将给户配置的用户标识编译成以数值表示的编号。

这里需要说明的是,zset数据结构的排序指令只能以member的字段值从大到小的固定顺序进行排序。

用户对应的编号大小取决于业务系统,因此可能从业务系统侧确定到的高优先级用户的编号会小于低先级用户的编号,这样会导致在基于zset数据结构的排序指令进行排序时,低优先级用户的排名位于高优先级的排名之前。为避免这一问题发生,同步模块52可以使用一既定的较大值减去用户对应的编号来作为用户在member中的字段值。

比如业务系统为高优先级用户配置的编号值为1,低优先级用户配置的编号值为2,则既定数值可以取10,高优先级用户在member中的字段值为10-1=9,低优先级用户在member中的字段值为10-2=8。由于高优先级在member中的字段值大于低优先级用户在member中的字段值(9>8),因此在两者排行属性值相同的情况下,高优先级用户会排在低优先级用户之前。

在具体实现时,同步模块52可以构建排行对象的字段值的配置过程,该配置过程用于使用一既定数值减去排行对象对应的编号,并将计算结果作为排行对象的字段值配置至内存型数据库的member中;其中,既定数值大于业务系统为排行对象配置的编号的数值上限。

在获得配置过程后,同步模块52基于该配置过程,即可将任意目标排行对象的字段值配置至内存型数据库的member中。

对应地,从内存型数据库中读取目标排行对象则需要将目标排行对象在member中字段值还原回对应的编号,从而正确识别出目标排行对象。即本申请实施例的同步模块52还具体用于:

构建排行对象的字段值的读取过程,所述读取过程用于使用所述既定数值减去排行对象在所述内存型数据库的member中的字段值,得到排行对象对应的编号;其中排行对象对应的编号作为排行对象的字段值的读取结果。

比如,目标排行对象的编码为10,既定值为100,基于上述配置过程,目标排行对象在内存型数据库的member中的字段值为100-10=90。通过上述读取过程在读取标排行对象在内存型数据库的member中的字段值时,可以使用既定值100减去目标排行对象在member中的字段值90,准确还原回目标排行对象的编码。

在实际应用中,可以根据业务系统对用户标识的配置特点,决定同步模块52是否构建排行对象针对member的配置过程和读取过程。

在按照zset数据结构,将内存型数据库针对排行场景需要同步的数据同步至内存型数据库中后,构建模块34即可构建zset数据结构的排序命令。

作为示例性介绍,构建模块34具体用于:

在获取排行查询请求后,先确定当前排行周期的字段值,并通过当前排行周期的字段值来判断内存数据库是否存在对应的缓存数据。

若内存型数据库的key存在当前排行周期的字段值,则构建以当前排行周期的字段值为约束条件,对member按照score的大小进行排序的排序命令;

若内存型数据库的key不存在当前排行周期的字段值,则构建以上一排行周期的字段值为约束条件,对member按照score的大小进行排序的排序命令。

在实际应用中,本申请实施例可以通过zrank命令和zrevarange命令对缓存数据实现分页排序。

以zrank命令为例,执行模块54可以基于zrank指令根据排行对象的字段值,查询对应的排行位置。zset内部的skiplist跳跃表以时间复杂度为跳跃表节点进行数据跨度,查询获得排行数据。

以zrevarange命令为例,执行模块54可以直接使用zrevrange命令实现范围查询,例如1-100名按照排行属性值从大到小的顺序对排行对象进行排序,获得前100名对排行对象的排行数据。

此外,在实际应用中,本申请的获取模块51可以采用两种方式获取内存型数据库针对排行场景需要同步的数据。

一种方式是获取模块51定期执行的异步线程,从业务数据库中获取针对排行场景需要同步的数据,该方式中,获取模块51需要触发的预设条件包括:预设置的异步线程的执行周期;

另一种方式,业务系统中一有用户的余额发生变化,获取模块51就对redis数据库进行同步。获取模块51需要触发的预设条件包括:业务系统针对所述排行场景对应的业务数据发生变动。获取模块51基于从业务系统中获取到的业务系统针对所述排行场景对应的业务数据发生变动的数据,确定出内存型数据库针对排行场景需要同步的数据。

显然,本申请实施例提供的数据排行的辅助装置是本申请实施例上文提供的数据排行的辅助方法的执行主体,因此该辅助方法所能实现的技术效果,本申请实施例提供的辅助装置同样能够实现,比如图1、图2、图3和图4中所描述的步骤和功能。

本申请实施例所提供的基于数据排行的辅助方法及装置的计算机程序产品,包括存储了程序代码的计算机可读存储介质,所述程序代码包括的指令可用于执行前面方法实施例中所述的步骤,具体实现可参见方法实施例,在此不再赘述。

此外,本申请实施例还提供一种业务系统,该排行系统包括:

内存型数据库以及上述图5所示的数据排行的辅助装置。

基于与该辅助装置,本申请实施例的业务系统将排行场景对应的数据按照zset数据结构缓存至内存型数据库中。当接收到针对排行场景的排名查询指请求时,对内存型数据库的缓存数据执行排序命令,从而高效、快速地得到对应的排名数据,并响应。由于不依赖业务数据库,因此在业务数据库发生下线或者异常时,也能够保证提供实时的排名数据。在一些特殊的应用场景中,本申请实施例的业务系统可满足用户迫切获知当前排行数据的需求,从而调动用户的积极性和参与感。

在本发明所提供的实施例中,应该理解到,所揭露的装置和方法,也可以通过其它的方式实现。以上所描述的装置和方法实施例仅仅是示意性的,例如,附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现方式中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或动作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。另外,在本发明各个实施例中的各功能模块可以集成在一起形成一个独立的部分,也可以是各个模块单独存在,也可以两个或两个以上模块集成形成一个独立的部分。

需要说明的是,在本文中,术语"包括"、"包含"或者其任何其它变体意在涵盖非排它性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其它要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句"包括一个……"限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1