一种高并发数据处理方法、装置及客户端服务器与流程

文档序号:16880641发布日期:2019-02-15 22:06阅读:163来源:国知局
一种高并发数据处理方法、装置及客户端服务器与流程

本申请属于数据处理技术领域,尤其涉及一种高并发数据处理方法、高并发数据处理装置、客户端服务器及计算机可读存储介质。



背景技术:

而现在互联网的数据呈现几何爆炸似的增长,随着信息量和用户的增多,大数据和高并发成了软件设计必须考虑的问题,由传统的单一请求演变为大规模大级别数量的业务请求,而作为客户端业务请求方和提供业务请求服务的区块链服务方,在面对大规模的并发请求和数据传输,所带的压力也是巨大的。

现有的海量数据高并发请求方案常用的做法有批量异步请求和接口轻量化拆分等手段。但批量异步请求会使得数据处理服务器、客户端服务器瞬间压力增大,瞬间数据吞吐量加大,最终导致客户端服务器和/或数据处理服务器出现宕机、挂机、死机、请求超时、时延加大、程序跑死等情况。而接口轻量化拆分则是将接口请求进行拆分并且将请求的数据和服务方返回的数据进行精简轻量化,以减少数据吞吐理和数据交换量和请求量来减轻请求方和业务提供方的负载压力,但这种方式会导致经常满足不了大型互联网公司、跨国大公司的业务需求。



技术实现要素:

有鉴于此,本申请提供了一种高并发数据处理方法、高并发数据处理装置、客户端服务器及计算机可读存储介质,可提高高并发数据处理的速度及效率。

本申请的第一方面提供了一种高并发数据处理方法,包括:

基于预设的第一间隔时间周期性触发查询数据任务,若查询到存在待处理的数据,则将上述待处理的数据存入消息队列中;

基于预设的第二间隔时间周期性触发处理数据任务,其中,上述处理数据任务包括:检测上述消息队列中是否存在上述待处理的数据;若上述消息队列中存在上述待处理的数据,则获取预设数量的上述待处理的数据;基于获取到的上述待处理的数据,对获取到的上述待处理的数据进行处理。

可选地,上述基于预设的第一间隔时间周期性触发查询数据任务,包括:

检测已被查询的数据的数据量;

若上述已被查询的数据的数据量占总数据量的比值达到预设的比值,则作页面重新刷新跳转,并在上述页面重新刷新跳转后,继续基于上述第一间隔时间周期性触发查询数据任务。

可选地,上述基于预设的第一间隔时间周期性触发查询数据任务之后,上述数据处理方法还包括:

更改已被查询的数据的标志位。

可选地,上述基于预设的第二间隔时间周期性触发处理数据任务,包括:

检测当前数据处理压力情况是否与预设的压力情况相匹配;

若当前数据处理压力情况与预设的压力情况相匹配,则基于预设的第二间隔时间周期性触发两个以上处理数据任务。

可选地,上述高并发数据处理方法还包括:

若上述待处理的数据处理失败,则将上述待处理的数据重新压入上述消息队列中;

将本次处理失败的情况写入日志记录中。

可选地,上述查询数据任务包括分页分批次查询是否存在待处理的数据,上述分页分批次查询是否存在待处理的数据包括:

针对任一数据表,根据上述数据表中的各个数据的主键id对上述各个数据进行升序排序;

获取前一批次已被查询的数据中,最大的主键id的值;

根据上述最大的主键id的值,确定待查询的下一批次的起始数据的主键id的值;

基于上述起始数据及上述排序的顺序,查询一批次的数据,其中,一批次数据的数据量不超过预设的数据量阈值。

可选地,若上述高并发数据处理方法应用于区块链上链,则上述对获取到的上述待处理的数据进行处理,包括:

向区块链服务器发送异步上链请求,以将获取到的上述待处理的数据上链至区块链服务器中,成为区块链的一节点;

上述高并发数据处理方法还包括:

若上述待处理的数据上链成功,则接收上述区块链服务器返回的交易哈希;

基于本次上链的数据生成资产id;

将上述交易哈希,上述资产id及本次上链的数据进行加密;

将加密后的数据更新至数据库的相应位置。

本申请的第二方面提供了一种高并发数据处理装置,包括:

查询数据任务触发模块,用于基于预设的第一间隔时间周期性触发查询数据任务,若查询到存在待处理的数据,则将上述待处理的数据存入消息队列中;

处理数据任务触发模块,用于基于预设的第二间隔时间周期性触发处理数据任务;

其中,上述处理数据任务触发模块,包括:

检测单元,用于检测上述消息队列中是否存在上述待处理的数据;

获取单元,用于若上述消息队列中存在上述待处理的数据,则获取预设数量的上述待处理的数据;

处理单元,用于基于获取到的上述待处理的数据,对获取到的上述待处理的数据进行处理。

可选地,上述查询数据任务触发模块,具体用于检测已被查询的数据的数据量;若上述已被查询的数据的数据量占总数据量的比值达到预设的比值,则作页面重新刷新跳转,并在上述页面重新刷新跳转后,继续基于上述第一间隔时间周期性触发查询数据任务。

可选地,上述查询数据任务触发模块还包括:

标志位更改单元,用于更改已被查询的数据的标志位。

可选地,上述处理数据任务触发模块,具体用于检测当前数据处理压力情况是否与预设的压力情况相匹配;若当前数据处理压力情况与预设的压力情况相匹配,则基于预设的第二间隔时间周期性触发两个以上处理数据任务。

可选地,上述高并发数据处理装置还包括处理失败模块,上述处理失败模块包括:

压入单元,用于若上述待处理的数据处理失败,则将上述待处理的数据重新压入上述消息队列中;

记录单元,用于将本次处理失败的情况写入日志记录中。

可选地,上述查询数据任务触发模块包括查询单元;

上述查询单元,用于分页分批次查询是否存在待处理的数据;

上述查询单元包括:

排序子单元,用于针对任一数据表,根据上述数据表中的各个数据的主键id对上述各个数据进行升序排序;

主键id获取子单元,用于获取前一批次已被查询的数据中,最大的主键id的值;

主键id确定子单元,用于根据上述最大的主键id的值,确定待查询的下一批次的起始数据的主键id的值;

批次查询子单元,用于基于上述起始数据及上述排序的顺序,查询一批次的数据,其中,一批次数据的数据量不超过预设的数据量阈值。

可选地,若上述高并发数据处理装置应用于区块链上链,则上述处理单元具体用于,向区块链服务器发送异步上链请求,以将获取到的上述待处理的数据上链至区块链服务器中,成为区块链的一节点;

上述高并发数据处理装置还包括处理成功模块,上述处理成功模块包括:

接收单元,用于若上述待处理的数据上链成功,则接收上述区块链服务器返回的交易哈希;

生成单元,用于基于本次上链的数据生成资产id;

加密单元,用于将上述交易哈希,上述资产id及本次上链的数据进行加密;

更新单元,用于将加密后的数据更新至数据库的相应位置。

本申请的第三方面提供了一种客户端服务器,上述客户端服务器包括存储器、处理器以及存储在上述存储器中并可在上述处理器上运行的计算机程序,上述处理器执行上述计算机程序时实现如上第一方面的方法的步骤。

本申请的第四方面提供了一种计算机可读存储介质,上述计算机可读存储介质存储有计算机程序,上述计算机程序被处理器执行时实现如上第一方面的方法的步骤。

本申请的第五方面提供了一种计算机程序产品,上述计算机程序产品包括计算机程序,上述计算机程序被一个或多个处理器执行时实现如上述第一方面的方法的步骤。

由上可见,通过本申请,基于预设的第一间隔时间周期性触发查询数据任务,若查询到存在待处理的数据,则将待处理的数据存入消息队列中;并且还将基于预设的第二间隔时间周期性触发处理数据任务,上述处理数据任务包括:检测上述消息队列中是否存在上述待处理的数据;若上述消息队列中存在上述待处理的数据,则获取预设数量的上述待处理的数据;基于获取到的上述待处理的数据,对获取到的上述待处理的数据进行处理。通过本申请方案,将对高并发数据的处理过程分解为查询数据任务及处理数据任务,查询数据任务是为了将待处理的数据存入消息队列中,处理数据任务是为了分批次的对高并发数据进行处理,以多线程、多进程的模式提高数据处理的速度及效率。

附图说明

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

图1是本申请实施例提供的高并发数据处理方法的一种实现流程示意图;

图2是本申请实施例提供的高并发数据处理方法中,步骤102的具体实现流程示意图;

图3是本申请实施例提供的高并发数据处理方法的另一种实现流程示意图;

图4是本申请实施例提供的高并发数据处理装置的示意图;

图5是本申请实施例提供的客户端服务器的示意图。

具体实施方式

以下描述中,为了说明而不是为了限定,提出了诸如特定系统结构、技术之类的具体细节,以便透彻理解本申请实施例。然而,本领域的技术人员应当清楚,在没有这些具体细节的其它实施例中也可以实现本申请。在其它情况中,省略对众所周知的系统、装置、电路以及方法的详细说明,以免不必要的细节妨碍本申请的描述。

为了说明本申请上述的技术方案,下面通过具体实施例来进行说明。

本申请实施例提出了一种高并发数据处理方法、高并发数据处理装置、客户端服务器及计算机可读存储介质。当前随着大数据的发展,软件架构中的用户增多,用户所要处理的数据量也增多,高并发数据处理成为了研发的重点。其中一些典型的应用场景为多用户同时访问云数据库(例如多用户共同访问同一云文档),或者用户将大量客户端服务器中所存储的数据上链至区块链中进行存证操作等。

实施例一

下面对本申请实施例提供的一种高并发数据处理方法进行描述,请参阅图1,本申请实施例中的高并发数据处理方法包括:

在步骤101中,基于预设的第一间隔时间周期性触发查询数据任务,若查询到存在待处理的数据,则将上述待处理的数据存入消息队列中;

在本申请实施例中,客户端服务器用于接收各个客户端节点的数据,形成高并发数据。也即是说,上述高并发数据处理方法的执行主体为客户端服务器。上述客户端服务器将接收到的各个数据汇总于数据库中,为了实现对高并发数据的处理,可以在上述数据库中查询待处理的数据。在本申请实施例中,上述客户端服务器通过激发调用linux服务器的查询数据任务以查询待处理的数据,由于上述查询数据任务是周期性触发的,因而,也可称上述查询数据任务为查询数据定时任务,也即该查询数据任务是通过linux服务器定时任务而被触发执行的。上述第一间隔时间可以是30秒或一分钟等,具体可由用户自行设定,此处不作限定。可选地,上述查询数据任务可以是一次触发后保持周期性执行分页分批次查询是否存在待处理的数据的步骤,那么本步骤的周期性触发查询数据任务的主要作用则是为了防止客户端服务器由于处理数据过多而导致的宕机、查询数据任务被终止的情况,例如,一次触发上述查询数据任务后,该查询数据任务查询完一批次的数据后,通过sleep函数暂停休息2-5秒,随后再查询下一个批次的数据,在此过程中,只要第一个查询数据任务没有故障发生就可以保持运行,下次触发上述查询数据任务是为了在之前的查询数据任务故障时,及时重新触发激活新的查询数据任务以保持查询数据操作不被终止,若之前的查询数据任务未发生故障,则触发上述查询数据任务的操作可被忽略;或者,也可以是查询数据任务一次触发后,执行一次分页分批次查询是否存在待处理的数据的步骤就退出,例如,一次触发上述查询数据任务后,该查询数据任务将直接退出,直至上述查询数据任务再次被触发。上述两种不同的触发查询数据任务的方式可根据用户或开发人员的需求进行选择,此处不作限定。若查询到存在待处理的数据,则将上述待处理的数据存入消息队列中,上述消息队列为redis消息队列,上述redis消息队列可以将瞬间服务器的请求处理更换为异步处理,以此缓解服务器的压力,实现数据顺序排列获取,是一个低延迟、高并发轻量级的消息队列服务。也即是说,上述查询数据任务所作操作主要为两方面,一方面是查询获得待处理的数据,另一方面是将查询获得的待处理的数据存入消息队列中。

具体地,上述步骤101包括:分页分批次查询是否存在待处理的数据;

在本申请实施例中,通过limit分页分批次遍历数据库中的每一数据表中的所有数据,其查询的操作为循环的,但其查询的数据为不循环,也即需要避免重复查询。可以根据用户或开发人员的需求将一批次数据的数据量设置或更改为1000条、1500条或者2000条等,也可以根据数据库的数据压力情况对一批次数据的数据量进行设置或更改,此处不作限定。

可选地,为了实现有序查询,上述分页分批次查询是否存在待处理的数据的步骤包括:

针对任一数据表,根据上述数据表中的各个数据的主键id对上述各个数据进行升序排序;

获取前一批次已被查询的数据中,最大的主键id的值;

根据上述最大的主键id的值,确定待查询的下一批次的起始数据的主键id的值;

基于上述起始数据及上述排序顺序,查询一批次的数据,其中,一批次数据的数据量不超过预设的数据量阈值。

其中,上述数据库中可能包括有多个数据表,由于主键id是不间断的数值,因而在得到前一批次被查询的数据中的最大的主键id的值之后,只需基于该主键id的值加1即可获得待查询的下一批次的起始数据的主键id的值,以此可实现数据库全表有序的扫描查询,加快查询速度。

可选地,为了避免客户端服务器发生宕机或死机,上述步骤101具体为:

检测已被查询的数据的数据量;

若上述已被查询的数据的数据量占总数据量的比值达到预设的比值,则作页面重新刷新跳转,并在上述页面重新刷新跳转后,继续基于上述第一间隔时间周期性触发查询数据任务。

其中,上述预设的比值可以是五分之一、五分之二、五分之三、五分之四等,也可以是用户或开发人员设置的其它数值,此处不作限定;也即,当数据表中已被查询的数据达到数据表中总数据的一定比例时,上述查询数据任务将被暂停休息一定的时间,例如三分钟,然后通过javascript页面重新刷新跳转使得客户端服务器能够得到一定的修整时间,避免客户端服务器死机或宕机的情况发生。具体地,还可以在每批次查询完是否存在待处理的数据之后,更改已被查询的数据的标志位,以使得javascript页面重新刷新跳转后再来查询数据表中的待处理的数据时,避免重复查询已经查询过的数据。

在步骤102中,基于预设的第二间隔时间周期性触发处理数据任务;

在本申请实施例中,上述第二间隔时间可以是一分钟或两分钟等,具体可由用户自行设定,此处不作限定。通过激发调用linux服务器的处理数据任务以对查询获得的待处理的数据进行处理,由于上述处理数据任务是周期性触发的,因而,也可称上述处理数据任务为处理数据定时任务,也即该处理数据任务也是通过linux服务器定时任务而被触发执行的。与上述步骤101中的查询数据任务类似,其周期性触发可以有两种运行模式,例如上述处理数据任务可以是一次触发后保持周期性的执行步骤201至步骤203,那么本步骤的周期性触发处理数据任务的主要作用则是为了防止异常情况的发生而导致的客户端服务器宕机、处理数据任务被终止的情况,例如,一次触发上述处理数据任务后,该处理数据任务将保持对消息队列进行监听,一旦监听到消息队列中存在数据则会执行后续操作,同时不会断开对消息队列的监听,在此过程中,只要第一个处理数据任务没有故障发生就可以保持运行,下次触发上述处理数据任务是为了在之前的处理数据任务故障时,及时重新触发激活新的处理数据任务以保持处理数据操作不被终止,若之前的处理数据任务未发生故障,则触发上述处理数据任务的操作可被忽略;或者,也可以是处理数据任务一次触发后,执行一次步骤201至步骤203的操作就退出,例如,一次触发上述处理数据任务对消息队列进行监听,若监听发现消息队列中有数据则执行后续操作,并在后续操作完成后退出本次处理数据任务,若监听发现消息队列中无数据则直接退出该处理数据任务,直至上述处理数据任务再次被触发。上述两种不同的触发处理数据任务的方式可根据用户或开发人员的需求进行选择,此处不作限定。

具体地,上述步骤102包括:

在步骤201中,检测上述消息队列中是否存在上述待处理的数据;

在本申请实施例中,上述处理数据任务会对上述消息队列进行监听,以检测上述消息队列中是否存在上述待处理的数据。

在步骤202中,若上述消息队列中存在上述待处理的数据,则获取预设数量的上述待处理的数据;

在本申请实施例中,若通过对上述消息队列进行监听后发现上述消息队列中存在上述待处理的数据,则可以按照消息队列中各数据存入时间的情况,以先入先出的方式获取得到消息队列中预设数量的待处理的数据。

在步骤203中,基于获取到的上述待处理的数据,对获取到的上述待处理的数据进行处理。

可选地,上述redis消息队列为生产者/消费者模式,可以是一个生产者和一个消费者模式,也可以是一个生产者和多个消费者模式。因而,上述步骤102可以具体为:

检测当前数据处理压力情况是否与预设的压力情况相匹配;

若当前数据处理压力情况与预设的压力情况相匹配,则基于所述第二间隔时间周期性触发两个以上处理数据任务。

其中,在实际应用中,可以灵活的选择触发的上述处理数据任务的个数,上述数据处理压力情况,可以是待查询的数据的数据量压力情况,也可以是消息队列中所积压的数据的松紧度情况、也可以是查询数据库压力的情况,也即是说,若上述客户端服务器整体数据压力较大时,可以激发调用多个处理数据任务,通过一个生产者和多个消费者模式来分摊蜂值压力,削平高峰期,缓解平衡并发压力。

由上可见,在本申请实施例中,将数据处理的过程分解为查询数据任务及处理数据任务,查询数据任务是为了查询得到待处理的数据并将待处理的数据存入消息队列中,处理数据任务是为了能够分批次的对高并发数据进行处理,以多线程、多进程的模式提高数据处理的速度及效率。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

实施例二

在上述实施例一的基础上,本申请实施例二提供了另一种高并发数据处理方法,下面对本申请实施例提供的高并发数据处理方法进行描述,请参阅图3,本申请实施例中的高并发数据处理方法应用于区块链上链,因而,在以下所给出的具体实施方式中,将以区块链上链作为例子,对本申请实施例所提出的高并发数据处理方法作出具体的说明。在此,先对区块链上链作出解释:区块链实际上是一群分散的客户端节点,并由所有参与者组成的分布式数据库,是对所有比特币交易历史的记录。比特币的交易数据被打包到一个“数据块”或“区块”中后,就可认为该交易已被初步确认。当区块链接到前一个区块之后,交易会得到进一步的确认。在连续得到若干个区块确认后,这笔交易就可被认为是不可逆转的得到确认了,上述过程即为上链。该高并发数据处理方法包括:

在步骤301中,基于预设的第一间隔时间周期性触发查询数据任务,若查询到存在待处理的数据,则将上述待处理的数据存入消息队列中;

在本申请实施例中,上述步骤301与上述步骤101相同或相似,具体可参见步骤101的相关描述,在此不再赘述。

在步骤302中,基于预设的第二间隔时间周期性触发处理数据任务;

在本申请实施例中,上述处理数据任务中所执行的对获取到的上述待处理的数据进行处理的操作,可以具体为:向区块链服务器发送异步上链请求,以将获取到的上述待处理的数据上链至区块链服务器中,成为区块链的一节点。上述处理数据任务的其它操作具体可参见步骤102的相关描述,在此不再赘述。

在步骤303中,判断待处理的数据是否上链处理成功;若是,则执行步骤304,若否,则执行步骤308;

在步骤304中,接收区块链服务器返回的交易哈希;

在本申请实施例中,当上述待处理的数据上链处理成功时,区块链服务器将会返回区块链的交易哈希,因而,在本步骤中,接收上述区块链服务器返回的交易哈希。

在步骤305中,基于本次上链的数据生成资产id;

在步骤306中,将上述交易哈希,上述资产id及本次上链的数据进行加密;

在本申请实施例中,为了保障数据安全,防止数据泄露,可以将上述交易哈希,上述资产id及本次上链的数据进行加密,其中,不对加密所采用的加密算法作出限定。

在步骤307中,将加密后的数据更新至数据库的相应位置;

在本申请实施例中,在数据库的数据表中,找到上述本次上链的数据,并将加密后的数据更新至上述数据库的相应位置,以作为数据的交易哈希字段、资产id字段、资产哈希字段,证明该条数据已经进行了上链处理且上链处理成功。

在步骤308中,将上述待处理的数据重新压入上述消息队列中;

在本申请中,若上述待处理的数据上链处理失败,则将上述待处理的数据重新压入上述消息队列中,等待上述处理数据任务再次对上述待处理的数据进行上链处理,直至该待处理的数据上链处理成功为止。

在步骤309中,将本次处理失败的情况写入日志记录中。

在本申请实施例中,凡是客户端服务器请求区块链服务器的相应接口失败,导致上链处理未成功时,均会写日志记录,以便日后留有佐证,能够查询获知上链失败时的具体情况。

由上可见,在本申请实施例中,将数据处理的过程分解为查询数据任务及处理数据任务,查询数据任务是为了查询得到待处理的数据并将待处理的数据存入消息队列中,处理数据任务是为了能够分批次的对高并发数据进行处理,以多线程、多进程的模式提高数据处理的速度及效率。如果数据处理成功,则更新数据库中的相应数据表,如果数据处理失败,则重新将数据压入消息队列中等待下次处理操作,同时还会有日志记录,保障处理失败的操作有迹可循。

应理解,上述实施例中各步骤的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请实施例的实施过程构成任何限定。

实施例三

本申请实施例提供一种高并发数据处理装置,如图4所示,本申请实施例中的高并发数据处理装置400包括:

查询数据任务触发模块401,用于基于预设的第一间隔时间周期性触发查询数据任务,若查询到存在待处理的数据,则将上述待处理的数据存入消息队列中;

处理数据任务触发模块402,用于基于预设的第二间隔时间周期性触发处理数据任务;

其中,上述处理数据任务触发模块402,包括:

检测单元4021,用于检测上述消息队列中是否存在上述待处理的数据;

获取单元4022,用于若上述消息队列中存在上述待处理的数据,则获取预设数量的上述待处理的数据;

处理单元4023,用于基于获取到的上述待处理的数据,对获取到的上述待处理的数据进行处理。

可选地,上述查询数据任务触发模块401,具体用于检测已被查询的数据的数据量;若上述已被查询的数据的数据量占总数据量的比值达到预设的比值,则作页面重新刷新跳转,并在上述页面重新刷新跳转后,继续基于上述第一间隔时间周期性触发查询数据任务。

可选地,上述查询数据任务触发模块401还包括:

标志位更改单元,用于更改已被查询的数据的标志位。

可选地,上述处理数据任务触发模块402,具体用于检测当前数据处理压力情况是否与预设的压力情况相匹配;若当前数据处理压力情况与预设的压力情况相匹配,则基于预设的第二间隔时间周期性触发两个以上处理数据任务。

可选地,上述高并发数据处理装置400还包括处理失败模块,上述处理失败模块包括:

压入单元,用于若上述待处理的数据处理失败,则将上述待处理的数据重新压入上述消息队列中;

记录单元,用于将本次处理失败的情况写入日志记录中。

可选地,上述查询数据任务触发模块401包括查询单元;

上述查询单元,用于分页分批次查询是否存在待处理的数据;

上述查询单元包括:

排序子单元,用于针对任一数据表,根据上述数据表中的各个数据的主键id对上述各个数据进行升序排序;

主键id获取子单元,用于获取前一批次已被查询的数据中,最大的主键id的值;

主键id确定子单元,用于根据上述最大的主键id的值,确定待查询的下一批次的起始数据的主键id的值;

批次查询子单元,用于基于上述起始数据及上述排序顺序,查询一批次的数据,其中,一批次数据的数据量不超过预设的数据量阈值。

可选地,若上述高并发数据处理装置400应用于区块链上链,则上述处理单元4023具体用于,向区块链服务器发送异步上链请求,以将获取到的上述待处理的数据上链至区块链服务器中,成为区块链的一节点;

上述高并发数据处理装置400还包括处理成功模块,上述处理成功模块包括:

接收单元,用于若上述待处理的数据上链成功,则接收上述区块链服务器返回的交易哈希;

生成单元,用于基于本次上链的数据生成资产id;

加密单元,用于将上述交易哈希,上述资产id及本次上链的数据进行加密;

更新单元,用于将加密后的数据更新至数据库的相应位置。

由上可见,在本申请实施例中,高并发数据处理装置将数据处理的过程分解为查询数据任务及处理数据任务,查询数据任务是为了查询得到待处理的数据并将待处理的数据存入消息队列中,处理数据任务是为了能够分批次的对高并发数据进行处理,以多线程、多进程的模式提高数据处理的速度及效率。

实施例四

本申请实施例提供一种客户端服务器,请参阅图5,本申请实施例中的客户端服务器包括:存储器501,一个或多个处理器502(图5中仅示出一个)及存储在存储器501上并可在处理器上运行的计算机程序。其中:存储器501用于存储软件程序以及模块,处理器502通过运行存储在存储器501的软件程序以及单元,从而执行各种功能应用以及数据处理,以获取上述预设事件对应的资源。具体地,处理器502通过运行存储在存储器501的上述计算机程序时实现以下步骤:

基于预设的第一间隔时间周期性触发查询数据任务,若查询到存在待处理的数据,则将上述待处理的数据存入消息队列中;

基于预设的第二间隔时间周期性触发处理数据任务,其中,上述处理数据任务包括:检测上述消息队列中是否存在上述待处理的数据;若上述消息队列中存在上述待处理的数据,则获取预设数量的上述待处理的数据;基于获取到的上述待处理的数据,向数据处理服务器发送异步处理请求,以对获取到的上述待处理的数据进行处理。

假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,上述基于预设的第一间隔时间周期性触发查询数据任务,包括:

检测已被查询的数据的数据量;

若上述已被查询的数据的数据量占数据库中总数据量的比值达到预设的比值,则作页面重新刷新跳转,并在上述页面重新刷新跳转后,继续基于上述第一间隔时间周期性触发查询数据任务。

在上述第二种可能的实施方式作为基础而提供的第三种可能的实施方式中,上述基于预设的第一间隔时间周期性触发查询数据任务之后,处理器502通过运行存储在存储器501的上述计算机程序时还实现以下步骤:

更改已被查询的数据的标志位。

在上述第一种可能的实施方式作为基础而提供的第四种可能的实施方式中,上述基于预设的第二间隔时间周期性触发处理数据任务,包括:

检测当前数据处理压力情况是否与预设的压力情况相匹配;

若当前数据处理压力情况与预设的压力情况相匹配,则基于预设的第二间隔时间周期性触发两个以上处理数据任务。

在上述第一种可能的实施方式作为基础而提供的第五种可能的实施方式中,处理器502通过运行存储在存储器501的上述计算机程序时还实现以下步骤:

若上述待处理的数据处理失败,则将上述待处理的数据重新压入上述消息队列中;

将本次处理失败的情况写入日志记录中。

在上述第一种可能的实施方式作为基础,或者上述第二种可能的实施方式作为基础,或者上述第三种可能的实施方式作为基础,或者上述第四种可能的实施方式作为基础,或者上述第五种可能的实施方式作为基础而提供的第六种可能的实施方式中,上述查询数据任务包括分页分批次查询是否存在待处理的数据,上述分页分批次查询是否存在待处理的数据包括:

针对任一数据表,根据上述数据表中的各个数据的主键id对上述各个数据进行升序排序;

获取前一批次已被查询的数据中,最大的主键id的值;

根据上述最大的主键id的值,确定待查询的下一批次的起始数据的主键id的值;

基于上述起始数据及上述排序的顺序,查询一批次的数据,其中,一批次数据的数据量不超过预设的数据量阈值。

在上述第六种可能的实施方式作为基础而提供的第七种可能的实施方式中,若上述高并发数据处理方法应用于区块链上链,则上述对获取到的上述待处理的数据进行处理,包括:

向区块链服务器发送异步上链请求,以将获取到的上述待处理的数据上链至区块链服务器中,成为区块链的一节点;

上述处理器502通过运行存储在存储器501的上述计算机程序时还实现以下步骤:

若上述待处理的数据上链成功,则接收上述区块链服务器返回的交易哈希;

基于本次上链的数据生成资产id;

将上述交易哈希,上述资产id及本次上链的数据进行加密;

将加密后的数据更新至数据库的相应位置。

进一步,如图5所示,上述客户端服务器还可包括:一个或多个输入设备503(图5中仅示出一个)和一个或多个输出设备504(图5中仅示出一个)。存储器501、处理器502、输入设备503和输出设备504通过总线505连接。

应当理解,在本申请实施例中,所称处理器502可以是中央处理单元(centralprocessingunit,cpu),该处理器还可以是其他通用处理器、数字信号处理器(digitalsignalprocessor,dsp)、专用集成电路(applicationspecificintegratedcircuit,asic)、现成可编程门阵列(field-programmablegatearray,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。

输入设备503可以包括键盘、触控板、指纹采传感器、麦克风等,输出设备504可以包括显示器、扬声器等。

存储器501可以包括只读存储器和随机存取存储器,并向处理器502提供指令和数据。存储器501的一部分或全部还可以包括非易失性随机存取存储器。例如,存储器501还可以存储设备类型的信息。

由上可见,在本申请实施例中,客户端服务器将数据处理的过程分解为查询数据任务及处理数据任务,查询数据任务是为了查询得到待处理的数据并将待处理的数据存入消息队列中,处理数据任务是为了基于待处理数据发送异步处理请求至数据处理服务器,以使得数据处理服务器能够分批次的对高并发数据进行处理,以多线程、多进程的模式提高数据处理的速度及效率。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将上述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。实施例中的各功能单元、模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中,上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。另外,各功能单元、模块的具体名称也只是为了便于相互区分,并不用于限制本申请的保护范围。上述系统中单元、模块的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。

在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述或记载的部分,可以参见其它实施例的相关描述。

本领域普通技术人员可以意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、或者计算机软件和电子硬件的结合来实现。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。

在本申请所提供的实施例中,应该理解到,所揭露的装置和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,上述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通讯连接可以是通过一些接口,装置或单元的间接耦合或通讯连接,可以是电性,机械或其它的形式。

上述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。

上述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本申请实现上述实施例方法中的全部或部分流程,也可以通过计算机程序来指令相关的硬件来完成,上述的计算机程序可存储于一计算机可读存储介质中,该计算机程序在被处理器执行时,可实现上述各个方法实施例的步骤。其中,上述计算机程序包括计算机程序代码,上述计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。上述计算机可读介质可以包括:能够携带上述计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、电载波信号、电信信号以及软件分发介质等。需要说明的是,上述计算机可读介质包含的内容可以根据司法管辖区内立法和专利实践的要求进行适当的增减,例如在某些司法管辖区,根据立法和专利实践,计算机可读介质不包括是电载波信号和电信信号。

以上上述实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的精神和范围,均应包含在本申请的保护范围之内。

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