本发明实施例涉及数据分析领域,尤其涉及一种热点数据分桶方法、系统、计算机设备及计算机可读存储介质。
背景技术:
随着移动互联网技术的发展,移动支付的场景越来越多丰富。各种红包、抢券等营销型支付工具更是成为了拉新、激活、留存的常见策略。对于红包类营销场景的发放过程,就会瞬间产生大量热点数据请求,如何在数十万qps的并发下做到预算控制100%精确,并且发放完成后,用户能够实时看到数据的刷新,成为首要解决的问题。
因此,如何在大量热点数据请求并发状态下精确控制预算,并可以使用户能够实时看到数据的刷新,从而进一步的提高热点数据请求的响应效率,成为了当前亟需解决的技术问题。
技术实现要素:
有鉴于此,有必要提供一种热点数据分桶方法、系统、计算机设备及计算机可读存储介质,以解决在当前在大量热点数据请求并发状态下精确度难以控制预算,处理大量qps的场景时响应速度过慢等的技术问题。
为实现上述目的,本发明实施例提供了一种热点数据分桶方法,所述方法步骤包括:
预先确实目标热点数据,并为所述目标热点数据配置一个主数据桶和多个子数据桶;
接收对所述目标热点数据的多个热点访问请求;
对所述多个热点访问请求进行分析,以确定所述目标热点数据当前对应的热点访问数量;
判断所述热点访问数量是否大于所述目标热点数据对应的目标阈值,其中,所述目标阈值等于所述目标热点数据对应的子数据桶数量;
如果所述热点访问数量大于所述目标阈值,则从所述主数据桶再拆出多个子数据桶,并更新所述目标阈值,如果所述热点访问数量不大于所述目标阈值,则将所述目标热点数据剩余的子数据桶进行消除;
为每个热点访问请求分配一个子数据桶;及
通过每个子数据桶响应对应的热点访问请求,其中,当所述热点访问请求对应的请求数据量大于所述子数据桶中的预算时,则从所述主数据桶中加载剩余数据。
示例性的,所述预先确实目标热点数据,并为所述目标热点数据配置一个主数据桶和多个子数据桶,包括:
获取多个用户的历史行为数据;
对每个历史行为数据进行分析,以从多个历史行为数据中确定访问最多的目标历史行为数据;及
将所述目标历史行为数据作为所述目标热点数据。
示例性的,所述预先确实目标热点数据,并为所述目标热点数据配置一个主数据桶和多个子数据桶,包括:
对所述目标热点数据进行分析,以确定目标热点数据对应的总预算和目标热点数据的单个用户对应的请求数据量的平均值;及
根据所述热点访问请求对应的请求数据量的平均值,将所述总预算拆分为一个主数据桶和多个子数据桶,其中,所述子数据桶中的预算等于所述请求数据量的平均值。
示例性的,所述预先确实目标热点数据,并为所述目标热点数据配置一个主数据桶和多个子数据桶,包括:
根据所述多个热点访问请求中的目标访问请求,确定该目标访问请求对应的目标用户;及
根据所述目标用户的用户账号与所述子数据桶的编号生成一个访问钥匙对,并将所述访问钥匙对上传到区块链中,其中,每个热点访问请求可以通过所述访问钥匙对定位对应的子数据桶。
为实现上述目的,本发明实施例还提供了一种热点数据分桶系统,包括:
配置模块,用于预先确实目标热点数据,并为所述目标热点数据配置一个主数据桶和多个子数据桶;
接收模块,用于接收对所述目标热点数据的多个热点访问请求;
分析模块,用于对所述热点访问请求进行分析,以确定所述目标热点数据当前对应的热点访问数量;
判断模块,用于判断所述热点访问数量是否大于所述目标热点数据对应的目标阈值,其中,所述目标阈值等于所述目标热点数据对应的子数据桶数量;
拆分模块,用于如果所述热点访问数量大于所述目标阈值,则从所述主数据桶再拆出多个子数据桶,并更新所述目标阈值,如果所述热点访问数量不大于所述目标阈值,则将所述目标热点数据剩余的子数据桶进行消除;
分配模块,用于为每个热点访问请求分配一个子数据桶;及
响应模块,用于通过每个子数据桶响应对应的热点访问请求,其中,当所述热点访问请求对应的请求数据量大于所述子数据桶中的预算时,则从所述主数据桶中加载剩余数据。
示例性的,所述配置模块,还用于:
获取多个用户的历史行为数据;
对每个历史行为数据进行分析,以从多个历史行为数据中确定访问最多的目标历史行为数据;及
将所述目标历史行为数据作为所述目标热点数据。
示例性的,所述配置模块,还用于:
对所述目标热点数据进行分析,以确定目标热点数据对应的总预算和目标热点数据的单个用户对应的请求数据量的平均值;及
根据所述热点访问请求对应的请求数据量的平均值,将所述总预算拆分为一个主数据桶和多个子数据桶,其中,所述子数据桶中的预算等于所述请求数据量的平均值。
示例性的,所述配置模块,还用于:
根据所述多个热点访问请求中的目标访问请求,确定该目标访问请求对应的目标用户;及
根据所述目标用户的用户账号与所述子数据桶的编号生成一个访问钥匙对,并将所述访问钥匙对上传到区块链中,其中,每个热点访问请求可以通过所述访问钥匙对定位对应的子数据桶。
为实现上述目的,本发明实施例还提供了一种计算机设备,所述计算机设备包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被处理器执行时实现如上述的热点数据分桶方法的步骤。
为实现上述目的,本发明实施例还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序可被至少一个处理器所执行,以使所述至少一个处理器执行如上述的热点数据分桶方法的步骤。
本发明实施例提供的热点数据分桶方法、系统、计算机设备及计算机可读存储介质,通过热点数据散列桶的设计,将高并发下的热点数据进行打散,同时将并发的扣减转换成对多个散列桶的并行扣减,减轻了服务器压力,提高了热点数据请求的响应效率,保障了数据的准确性和安全性。
附图说明
图1为本发明实施例热点数据分桶方法的流程示意图。
图2为本发明热点数据分桶系统实施例二的程序模块示意图。
图3为本发明计算机设备实施例三的硬件结构示意图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
需要说明的是,在本发明中涉及“第一”、“第二”等的描述仅用于描述目的,而不能理解为指示或暗示其相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。另外,各个实施例之间的技术方案可以相互结合,但是必须是以本领域普通技术人员能够实现为基础,当技术方案的结合出现相互矛盾或无法实现时应当认为这种技术方案的结合不存在,也不在本发明要求的保护范围之内。
以下实施例中,将以计算机设备2为执行主体进行示例性描述。
实施例一
参阅图1,示出了本发明实施例之热点数据分桶方法的步骤流程图。可以理解,本方法实施例中的流程图不用于对执行步骤的顺序进行限定。下面以计算机设备2为执行主体进行示例性描述。具体如下。
步骤s100,预先确实目标热点数据,并为所述目标热点数据配置一个主数据桶和多个子数据桶。
示例性的,所述步骤s100还可以进一步的包括:
步骤s200,获取多个用户的历史行为数据。
示例性的,所述用户行为信息可以包括以下一种或多种:商品浏览信息、商品购买信息;所述商品浏览信息包括所述用户在各个网站的商品浏览时间、商品种类、价格、频次、加入购物等;所述商品购买信息包括所述用户在各个网站的商品购买时间、商品种类、价格、频次等。
步骤s202,对每个历史行为数据进行分析,以从多个历史行为数据中确定访问最多的目标历史行为数据。
示例性的,还可以对不同的用户行为赋予不同的权重,以通过计算权重的方式来确定目标热点数据,例如,可以赋予商品浏览信息和商品购买信息不同的权重,以便于对于不同的场景设定不同目标热点数据,以满足不同场景的需要。例如,限时抢购、抢券和秒杀红包等高并发场景,不同的场景有不同的热点数据,这些热点数据可以通过对历史记录进行分析,可以获得哪些商品会成为热点。
步骤s204,将所述目标历史行为数据作为所述目标热点数据。
示例性的,所述步骤s100还可以进一步的包括:
步骤s300,对所述目标热点数据进行分析,以确定目标热点数据对应的总预算和目标热点数据的单个用户对应的请求数据量的平均值。
示例性的,所述目标热点数据可以是商品数据,不同用户于同一产品或商品的与需求不同,所以导致对于同一产品或商品出现多种不同数据需求量。通过对该商品数据的历史信息进行分析后可以得到该商品的大致的需求量,通过该商品的大致的需求量和该商品的定价可以确定该商品的总预算和单个用户购买平均值。其中,所述总预算可以根据所述目标热点数据对应的多个用户的请求数据量之和来配置,例如,多个用户的请求数据量之和为1000,那么所述目标热点数据对应的总预算可以是1200,对于不同的热点数据总预算和多个用户的请求数据量之和之间的配置比例可以同。
步骤s302,根据所述热点访问请求对应的请求数据量的平均值,将所述总预算拆分为一个主数据桶和多个子数据桶,其中,所述子数据桶中的预算等于所述请求数据量的平均值。
示例性的,热点数据分桶系统可以根据所述热点访问请求对应的请求数据量的平均值,将所述总预算拆分为一个主数据桶和多个子数据桶,其中,所述子数据桶中的预算等于所述请求数据量的平均值。例如,平均值为100,则每个子数据桶中预算可以设定为100,主数据桶的预算可以是总预算的百分之二十,以避免超出预算。
步骤s102,接收对所述目标热点数据的多个热点访问请求。
示例性的,热点数据分桶系统可以接收客户终端发送的热点访问请求,所述热点访问请求用于访问所述目标热点数据。
步骤s104,对所述多个热点访问请求进行分析,以确定所述目标热点数据当前对应的热点访问数量。
示例性的,通过对所述多个热点访问请求进行分析,以从多个热点访问请求确定多个有效访问请求,统计有效访问请求的数量,根据所述有效访问请求的数量确定所述目标热点数据当前对应的热点访问数量。
步骤s106,判断所述热点访问数量是否大于所述目标热点数据对应的目标阈值,其中,所述目标阈值等于所述目标热点数据对应的子数据桶数量。
示例性的,热点数据分桶系统可以通过所述监测热点访问数量,以判断所述热点访问数量是否大于所述目标热点数据对应的目标阈值,其中,所述目标阈值与所述目标热点数据对应的子数据桶数量相等。
步骤s108,如果所述热点访问数量大于所述目标阈值,则从所述主数据桶再拆出多个子数据桶,并更新所述目标阈值,如果所述热点访问数量不大于所述目标阈值,则将所述目标热点数据剩余的子数据桶进行消除。
示例性的,若所述热点访问数量大于所述目标阈值,则从所述主数据桶再拆出多个子数据桶,并更新所述目标阈值;例如,当所述热点访问数量,即当前访问的用户数量超过预设值时,可以从主数据桶中实时拆分子数据桶,以解决当前访问的用户数量超过的情况。以避免因瞬间产生大量热点数据请求导致出现系统响应变慢甚至崩溃的情况。若所述热点访问数量不大于所述目标阈值,则可以将所述目标热点数据剩余的子数据桶进行消除,即当前访问的用户数量过少时,可以对预算进行回收,当以避免占用多余的预算。
步骤s110,为每个热点访问请求分配一个子数据桶。
示例性的,所述步骤s110还可以进一步的包括:
步骤s400,根据所述多个热点访问请求中的目标访问请求,确定该目标访问请求对应的目标用户。
示例性的,每个热点访问请求携带有对应用户的信息,通过热点访问请求确定对应的目标用户。
步骤s402,根据所述目标用户的用户账号与所述子数据桶的编号生成一个访问钥匙对,并将所述访问钥匙对上传到区块链中,其中,每个热点访问请求可以通过所述访问钥匙对定位对应的子数据桶。
示例性的,当热点数据分桶系统接收到热点访问请求时,会给该热点访问请求随机分配一个子数据桶,同时将该热点访问请求对应用户的用户账号和子数据桶编号通过hashmap进行映射。其中,用户账号与子数据桶的关系采用hash表维护,这样能够使用户加快找到子数据桶对应资金池。所述访问钥匙对可以根据hash表得到,所有的子数据桶实际就是内存中的k-v对,将key设计为master01_sub01,即主编号_从编号,这样可以快速定位到各个桶。在本实施例在,通过热点数据散列桶的设计,充分将高并发下的热点数据进行打散,同时将并发的扣减转换成对多个散列桶的并行扣减,这样不仅减轻了服务器压力,也保障了数据的准确性和安全性,在高并发高一致性场景下有比较卓越的表现。
示例性的,还可以为每个用户建立一个用户数据库,将每个子数据桶分配到该子数据桶对应的用户数据库。
示例性的,所述热点访问请求可以根据对应的访问钥匙对定位对应的子数据桶,具体来说,热点访问请求要找到热点数据分桶系统分配的子数据桶,需要通过该热点访问请求对应的访问钥匙对来定位。将访问钥匙对上传至区块链可保证其安全性和对用户的公正透明性。当热点数据分桶系统出现故障时可以从区块链中下载得该访问钥匙对,以便查证热点数据分桶系统在哪个地方出现问题,方便及时排除故障。本示例所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
步骤s112,通过每个子数据桶响应对应的热点访问请求,其中,当所述热点访问请求对应的请求数据量大于所述子数据桶中的预算时,则从所述主数据桶中加载剩余数据。
示例性的,所述步骤f还可以进一步的包括:所述子数据桶通过消息队列从所述主数据桶中获取剩余数据。
所述消息队列可以是mq(消息队列),其中,所述mq包括activemq,rabbitmq,kafka,rocketmq等多种类型的消息队列。所述消息队列组件可用于应用程序与应用程序之间的通信。前后端模块的应用程序可以通过检索出入列队的针对应用程序的数据(消息)来通信,而无需通过专用的连接方式来链接它们,消息传递指的是程序之间通过在消息中发送数据进行通信,而不是通过直接调用彼此来通信,直接调用通常是用于诸如远程过程调用的技术。排队指的是应用程序通过消息队列来通信。消息队列的使用除去了接收和发送应用程序同时执行的要求。
示例性的,所述消息队列可以同时接收多个调用信息,通过异步处理提高系统性能和削峰、降低系统耦合性。其中,当同时接收到的调用信息过多时,即在高并发的情况下数据库压力剧增,使得响应速度变慢,为了避免这个问题发生可以通过预先设定消息处理量的阈值,当所述调用信息数量超过阈值时,超过的部分调用信息先进入等待状态。
示例性的,当所述子数据桶中的的预算小于当前所述热点访问请求对应的请求数据量时,所述子数据桶可以生成一个订阅消息事件,并将所述订阅消息事件发送到消息列队中,所述主数据桶根据从消息列队获取的所述订阅消息事件,将所述子数据桶需要的剩余热点数据分发到该子数据桶中。其中,子数据桶都是基于内存的数据结构,存储在redis集群中,资金池也将散落到各个db(mysql)中,主数据桶会根据预算策略,从db中加载数据,同时根据分发策略将热点数据打散存储到各个子数据桶中。
示例性的,所述消息队列的响应顺序还可以根据用户等级来决定,用户等级越高的用户对应拥有的响应优先权,例如,在用户1、用户2、用户3、用户4以及用户5中,所述用户1的等级最高则,则在这五个用户中所述用户1的响应速度最快,所述用户5的等级最高则,则在这五个用户中所述用户5的响应速度最慢。其中,所述用户等级可以根据用户的购买次数、金额、信用值等消息来决定。
示例性的,当所述用户的信用值低于预设信用值时,可以对该用户的访问权限进行限制。
实施例二
图2为本发明热点数据分桶系统实施例二的程序模块示意图。热点数据分桶系统20可以包括或被分割成一个或多个程序模块,一个或者多个程序模块被存储于存储介质中,并由一个或多个处理器所执行,以完成本发明,并可实现上述热点数据分桶方法。本发明实施例所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序本身更适合于描述热点数据分桶系统20在存储介质中的执行过程。以下描述将具体介绍本实施例各程序模块的功能:
配置模块200,用于预先确实目标热点数据,并为所述目标热点数据配置一个主数据桶和多个子数据桶。
示例性的,所述配置模块200,还用于:获取多个用户的历史行为数据;对每个历史行为数据进行分析,以从多个历史行为数据中确定访问最多的目标历史行为数据;及将所述目标历史行为数据作为所述目标热点数据。
示例性的,所述配置模块200,还用于:对所述目标热点数据进行分析,以确定目标热点数据对应的总预算和目标热点数据的单个用户对应的请求数据量的平均值;及根据所述热点访问请求对应的请求数据量的平均值,将所述总预算拆分为一个主数据桶和多个子数据桶,其中,所述子数据桶中的预算等于所述请求数据量的平均值。
示例性的,所述配置模块200,还用于:根据所述多个热点访问请求中的目标访问请求,确定该目标访问请求对应的目标用户;及根据所述目标用户的用户账号与所述子数据桶的编号生成一个访问钥匙对,并将所述访问钥匙对上传到区块链中,所述目标用户可以通过所述访问钥匙对定位到对应的子数据桶,其中,每个子数据桶值对应一个用户账号。
接收模块202,用于接收对所述目标热点数据的多个热点访问请求。
分析模块204,用于对所述热点访问请求进行分析,以确定所述目标热点数据当前对应的热点访问数量。
判断模块206,用于判断所述热点访问数量是否大于所述目标热点数据对应的目标阈值,其中,所述目标阈值等于所述目标热点数据对应的子数据桶数量。
拆分模块208,用于如果所述热点访问数量大于所述目标阈值,则从所述主数据桶再拆出多个子数据桶,并更新所述目标阈值,如果所述热点访问数量不大于所述目标阈值,则将所述目标热点数据剩余的子数据桶进行消除。
分配模块210,用于为每个热点访问请求分配一个子数据桶。
响应模块212,用于通过每个子数据桶响应对应的热点访问请求,其中,当所述热点访问请求对应的请求数据量大于所述子数据桶中的预算时,则从所述主数据桶中加载剩余数据。
实施例三
参阅图3,是本发明实施例三之计算机设备的硬件架构示意图。本实施例中,所述计算机设备2是一种能够按照事先设定或者存储的指令,自动进行数值计算和/或信息处理的设备。该计算机设备2可以是机架式服务器、刀片式服务器、塔式服务器或机柜式服务器(包括独立的服务器,或者多个服务器所组成的服务器集群)等。如图所示,所述计算机设备2至少包括,但不限于,可通过系统总线相互通信连接存储器21、处理器22、网络接口23、以及热点数据分桶系统20。
本实施例中,存储器21至少包括一种类型的计算机可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘等。在一些实施例中,存储器21可以是计算机设备2的内部存储单元,例如该计算机设备2的硬盘或内存。在另一些实施例中,存储器21也可以是计算机设备2的外部存储设备,例如该计算机设备2上配备的插接式硬盘,智能存储卡(smartmediacard,smc),安全数字(securedigital,sd)卡,闪存卡(flashcard)等。当然,存储器21还可以既包括计算机设备2的内部存储单元也包括其外部存储设备。本实施例中,存储器21通常用于存储安装于计算机设备2的操作系统和各类应用软件,例如实施例二的热点数据分桶系统20的程序代码等。此外,存储器21还可以用于暂时地存储已经输出或者将要输出的各类数据。
处理器22在一些实施例中可以是中央处理器(centralprocessingunit,cpu)、控制器、微控制器、微处理器、或其他数据处理芯片。该处理器22通常用于控制计算机设备2的总体操作。本实施例中,处理器22用于运行存储器21中存储的程序代码或者处理数据,例如运行热点数据分桶系统20,以实现实施例一的热点数据分桶方法。
所述网络接口23可包括无线网络接口或有线网络接口,该网络接口23通常用于在所述计算机设备2与其他电子装置之间建立通信连接。例如,所述网络接口23用于通过网络将所述计算机设备2与外部终端相连,在所述计算机设备2与外部终端之间的建立数据传输通道和通信连接等。所述网络可以是企业内部网(intranet)、互联网(internet)、全球移动通讯系统(globalsystemofmobilecommunication,gsm)、宽带码分多址(widebandcodedivisionmultipleaccess,wcdma)、4g网络、5g网络、蓝牙(bluetooth)、wi-fi等无线或有线网络。
需要指出的是,图3仅示出了具有部件20-23的计算机设备2,但是应理解的是,并不要求实施所有示出的部件,可以替代的实施更多或者更少的部件。
在本实施例中,存储于存储器21中的热点数据分桶系统20还可以被分割为一个或者多个程序模块,所述一个或者多个程序模块被存储于存储器21中,并由一个或多个处理器(本实施例为处理器22)所执行,以完成本发明。
例如,图2示出了本发明实施例二之所述实现热点数据分桶系统20的程序模块示意图,该实施例中,所述热点数据分桶系统20可以被划分为配置模块200、接收模块202、分析模块204、判断模块206、拆分模块208、分配模块210和响应模块212。其中,本发明所称的程序模块是指能够完成特定功能的一系列计算机程序指令段,比程序更适合于描述所述热点数据分桶系统20在所述计算机设备2中的执行过程。所述程序模块200-212的具体功能在实施例二中已有详细描述,在此不再赘述。
实施例四
本实施例还提供一种计算机可读存储介质,如闪存、硬盘、多媒体卡、卡型存储器(例如,sd或dx存储器等)、随机访问存储器(ram)、静态随机访问存储器(sram)、只读存储器(rom)、电可擦除可编程只读存储器(eeprom)、可编程只读存储器(prom)、磁性存储器、磁盘、光盘、服务器、app应用商城等等,其上存储有计算机程序,程序被处理器执行时实现相应功能。本实施例的计算机可读存储介质用于热点数据分桶系统20,被处理器执行时实现实施例一的热点数据分桶方法。
上述本发明实施例序号仅仅为了描述,不代表实施例的优劣。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到上述实施例方法可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件,但很多情况下前者是更佳的实施方式。
以上仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或等效流程变换,或直接或间接运用在其他相关的技术领域,均同理包括在本发明的专利保护范围内。