数据处理方法、装置、计算机设备及存储介质与流程

文档序号:16530722发布日期:2019-01-05 10:44阅读:127来源:国知局
数据处理方法、装置、计算机设备及存储介质与流程

本发明涉及计算机技术领域,尤其涉及一种数据处理方法、装置、计算机设备及存储介质。



背景技术:

随着社会的发展和人们生活水平的提高,越来越多的人开始关注各种保险业务,保险领域涉及的业务面较广,随着保单系统里面的记录越来越多,保单系统中的数据量变得异常庞大。

在保单系统中,由于保单数据庞大,常常需要针对百万级别以上的数据进行多种指令处理,一般通过调用存储过程执行批次任务的方式来完成。比如保单系统中续期缴费的分单模块中的批处理任务。

批次任务在执行的过程中主要是查询数据库大表中的数据,然后再根据查询出来的大批量数据循环计算,在计算某一条数据的时候又会查询数据库某些大表数据,这种计算即便是在高性能的存储过程里仍然需要花费很长时间,通常几百万数据量的存储过程数据计算大约3个小时左右,这导致了针对这种大数据量的批次任务进行数据处理时的处理效率低得问题。



技术实现要素:

基于此,有必要针对上述技术问题,提供一种数据处理方法、装置、计算机设备及存储介质,以解决当前大数据量的数据处理时处理效率低的问题。

一种数据处理方法,包括中心服务器执行的如下步骤:

获取客户端发送的基础任务信息,其中,所述基础任务信息包括基础任务数据和所述基础任务数据对应的处理指令;

采用取模运算的方式,按照预设的分片数目n对所述基础任务数据进行分片,得到n个基础分片数据,其中,n为正整数;

将所述基础分片数据和所述处理指令作为目标任务信息;

按照预设的负载均衡分配方式,从节点服务器集合中选取目标节点服务器,并将所述目标任务信息分配给所述目标节点服务器执行,其中,所述节点服务器集合包含预设数量的节点服务器;

接收所述目标节点服务器发送的执行结果,并对所述执行结果进行汇总,得到目标结果;

将所述目标结果发送给所述客户端。

一种数据处理方法,包括节点服务器执行的如下步骤:

接收中心服务器发送的目标任务信息,所述目标任务信息包括基础分片数据和处理指令;

计算所述基础分片数据的数据记录的条数;

获取中央处理器型号i1、内存型号i2、中央处理器当前使用率p1和内存当前使用率p2,并按照如下公式计算可处理的条数阈值s:

其中,j1为所述中央处理器型号i1对应的预设权值,j2为所述内存型号i2对应的预设权值;

若所述条数大于所述条数阈值,则按照预设的维度,对所述基础分片数据进行分割,得到k个目标分片数据,其中,k为正整数;

使用线程池的方式,对k个所述目标分片数据执行所述处理指令,得到执行结果;

将所述执行结果发送给所述中心服务器。

一种数据处理装置,包括中心服务器,中心服务器包括:

数据获取模块,用于获取客户端发送的基础任务信息,其中,所述基础任务信息包括基础任务数据和所述基础任务数据对应的处理指令;

数据分片模块,用于采用取模运算的方式,按照预设的分片数目n对所述基础任务数据进行分片,得到n个基础分片数据,其中,n为正整数;

任务生成模块,用于将所述基础分片数据和所述处理指令作为目标任务信息;

任务分配模块,用于按照预设的负载均衡分配方式,从节点服务器集合中选取目标节点服务器,并将所述目标任务信息分配给所述目标节点服务器执行,其中,所述节点服务器集合包含预设数量的节点服务器;

结果获取模块,用于接收所述目标节点服务器发送的执行结果,并对所述执行结果进行汇总,得到目标结果;

结果发送模块,用于将所述目标结果发送给所述客户端。

一种数据处理装置,包括节点服务器,节点服务器包括:任务接收模块,用于接收中心服务器发送的目标任务信息,所述目标任务信息包括基础分片数据和处理指令;

条数统计模块,用于计算所述基础分片数据的数据记录的条数;

阈值计算模块,用于获取中央处理器型号i1、内存型号i2、中央处理器当前使用率p1和内存当前使用率p2,并按照如下公式计算可处理的条数阈值s:

其中,j1为所述中央处理器型号i1对应的预设权值,j2为所述内存型号i2对应的预设权值;

数据分割模块,用于若所述条数大于所述条数阈值,则按照预设的维度,对所述基础分片数据进行分割,得到k个目标分片数据,其中,k为正整数;

数据处理模块,用于使用线程池的方式,对k个所述目标分片数据执行所述处理指令,得到执行结果;

结果传输模块,用于将所述执行结果发送给所述中心服务器。

一种计算机设备,包括存储器、处理器以及存储在所述存储器中并可在所述处理器上运行的计算机程序,所述处理器执行所述计算机程序时实现上述数据处理方法的步骤。

一种计算机可读存储介质,所述计算机可读存储介质存储有计算机程序,所述计算机程序被处理器执行时实现上述数据处理方法的步骤。

上述数据处理方法、装置、计算机设备及存储介质,中心服务器获取客户端发送的基础任务信息,并采用取模运算的方式对基础任务数据进行分片,得到基础分片数据,使得连续的数据记录被分散到不同的基础分片数据中,在后续对数据的处理中,有利于数据记录按照基础任务信息中的先后顺序进行执行,提高了执行结果合并的效率,将基础分片数据和处理指令作为目标任务信息发送给节点服务器执行,节点服务器在接收到目标任务信息后,根据当前节点服务器的运行状态,计算能同时处理的数据记录的条数阈值,并对超出该条数阈值的任务进行分割,通过线程池的方式执行分割后的任务数据,并将执行结果返回给中心服务器,使得节点服务器可以根据自身运行状态来动态设置同时处理的条数阈值,并使用多线程进行处理,保证了数据处理过程中的稳定性,同时提高了数据处理效率,中心服务器将所有获取到的执行结果进行合并得到目标结果,并目标结果发送给客户端,从而实现了将数据量大的任务合理分发到分布式节点服务器上执行,提高了数据处理效率。

附图说明

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

图1是本发明实施例提供的数据处理方法的应用环境示意图;

图2是本发明实施例提供的数据处理方法的实现流程图;

图3是本发明实施例提供的数据处理方法中步骤s12的实现流程图;

图4是本发明实施例提供的数据处理方法中步骤s18的实现流程图;

图5是本发明实施例提供的数据处理方法中步骤s19的实现流程图;

图6是本发明实施例提供的数据处理方法中步骤s21的实现流程图;

图7是本发明实施例提供的数据处理装置的示意图;

图8是本发明实施例提供的计算机设备的示意图。

具体实施方式

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

请参阅图1,图1示出本发明实施例提供的数据处理方法的应用环境。该数据处理方法应用在大数据量的的数据处理场景中。该处理场景包括中心服务器、节点服务器和客户端,其中,中心服务器和客户端之间、中心服务器和节点服务器之间均通过网络进行连接,客户端将数据发送到中心服务器,中心服务器对数据进行分片并发送给节点服务器,节点服务器对接收到的数据进行处理,并把处理结果发送给中心服务器,客户端具体可以但不限于是手机、平板电脑、个人计算机(personalcomputer,pc)等智能终端设备,中心服务器和节点服务器具体可以用独立的服务器或者多个服务器组成的服务器集群实现。本发明实施例中的数据处理方法具体包括中心服务器执行的如下步骤:

获取客户端发送的基础任务信息,其中,所述基础任务信息包括基础任务数据和所述基础任务数据对应的处理指令;

采用取模运算的方式,按照预设的分片数目n对所述基础任务数据进行分片,得到n个基础分片数据,其中,n为正整数;

将所述基础分片数据和所述处理指令作为目标任务信息;

按照预设的负载均衡分配方式,从节点服务器集合中选取目标节点服务器,并将所述目标任务信息分配给所述目标节点服务器执行,其中,所述节点服务器集合包含预设数量的节点服务器;

接收所述目标节点服务器发送的执行结果,并对所述执行结果进行汇总,得到目标结果;

将所述目标结果发送给所述客户端。

本发明实施例中的数据处理方法具体包括节点服务器执行的如下步骤:

接收中心服务器发送的目标任务信息,所述目标任务信息包括基础分片数据和处理指令;

计算所述基础分片数据的数据记录的条数;

获取中央处理器型号i1、内存型号i2、中央处理器当前使用率p1和内存当前使用率p2,并按照如下公式计算可处理的条数阈值s:

其中,j1为所述中央处理器型号i1对应的预设权值,j2为所述内存型号i2对应的预设权值;

若所述条数大于所述条数阈值,则按照预设的维度,对所述基础分片数据进行分割,得到k个目标分片数据,其中,k为正整数;

使用线程池的方式,对k个所述目标分片数据执行所述处理指令,得到执行结果;

将所述执行结果发送给所述中心服务器。

请参阅图2,图2示出本发明实施例提供的一种数据处理方法,以该方法应用在图1中的中心服务器和节点服务器为例进行说明,详述如下:

s11:中心服务器获取客户端发送的基础任务信息,其中,基础任务信息包括基础任务数据和该基础任务数据对应的处理指令。

具体地,中心服务器通过网络传输协议获取客户端发送的基础任务信息,基础任务信息包括但不限于基础任务数据和处理指令。

其中,基础任务数据是指大数据量的数据,例如,保单系统中的百万级别以上的数据。

其中,处理指令是指基础任务信息被执行的过程中,驱动基础任务数据进行处理的一个或多个批次的指令。

例如,在一具体实施方式中,基础任务信息中的处理指令包括:第一查询指令、计算指令、第二查询指令等,基础任务数据为保单系统数据库中的三百万条数据,可以理解地,在执行处理指令时,先对这三百万条数据进行第一查询指令,得到第一查询结果,进而对第一查询结果执行计算指令,得到计算结果,进而使用第二查询指令,对计算结果进行查询操作,得到最终的执行结果。

其中,网络传输协议包括但不限于:互联网控制报文协议(internetcontrolmessageprotocol,icmp)、地址解析协议(arpaddressresolutionprotocol,arp)和文件传输协议(filetransferprotocol,ftp)等。

s12:中心服务器采用取模运算的方式,按照预设的分片数目n对基础任务数据进行分片,得到n个基础分片数据,其中,n为正整数。

具体地,中心服务器对基础任务数据进行分片,得到n个基础分片数据,每个基础分片数据包含多条数据记录,使得可以将基础任务数据中的数据记录发送到多个节点服务器中进行数据处理,提高数据处理的效率。在本发明实施例中,中心服务器通过基于取模运算(modulooperation)的分片策略来对基础任务数据进行分片。其中,取模运算是一种数学运算,其基本形式为a%b,或amodb,表示a除以b的余数,其具体做法可以是:使用基础任务数据中的数据记录的标识,对预设的分片数目n进行取模运算,将得到的模相同的数据记录放入同一个分片中。

可选地,分片策略还可以是平均分配算法策略,还可以是作业名哈希值奇偶数算法策略,还可以是轮转分片策略等,具体可根据实际情况来选取,此处不作具体限制。

s13:中心服务器将基础分片数据和处理指令作为目标任务信息。

具体地,基于步骤s12中得到的n个基础分片数据,将处理指令和每个基础分片数据作为一个目标任务信息,得到n个目标任务信息。

例如,在一具体实施方式中,获取到的基础分片数据的个数n为4,将这4个基础分片数据中的每个基础分片数据与步骤s11中的处理指令作为1个目标任务信息,得到4个目标任务信息。

s14:中心服务器按照预设的负载均衡分配方式,从节点服务器集合中选取目标节点服务器,并将目标任务信息分配给目标节点服务器执行,其中,节点服务器集合包含预设数量的节点服务器。

具体地,中心服务器与节点服务器集合组成了一个集群,根据节点服务器集合中各个节点服务器的当前状态,中心服务器通过预设的负载均衡(loadbalancing)分配方式,将目标任务信息发送给各个节点服务器。

其中,负载均衡从其应用的地理结构上分为本地负载均衡(localloadbalance)和全局负载均衡(globalloadbalance,也叫地域负载均衡),本实施例中采用的负载均衡分配方式具体可以为本地负载均衡分配方式,本地负载均衡通过灵活多样的均衡策略把访问请求合理地分配给集群内的节点服务器共同负担。即使是给现有节点服务器扩充升级,也只需简单地增加一个新的节点服务器到集群中,而不需改变现有网络结构、停止现有的服务,能有效地解决访问请求过多、网络负荷过重的问题,并且不需花费昂贵开支购置性能卓越的服务器,充分利用现有设备,避免节点服务器单点故障造成访问请求丢失的损失。

值得说明的是,发送到节点服务器的目标任务信息可以是一个,也可以是多个,具体可根据中心服务器进行负载均衡后的分配情况来确定,此处不作具体限制。

优选地,本发明实施例采用基于扩特兹公式(quartz)的分布式系统的可靠协调系统(zookeeper)的框架来实现集群的负载均衡的任务调度,通过quartz的zookeeper框架管理多节点的增加减少和异常情况,提高了节点任务的可靠性和计算能力。同时,通过去中心化的思想,把集中数据分散到多个节点中计算的方式来提升计算性能,提高计算效率。

其中,quartz是一个开源的作业调度框架,quartz框架的核心是调度器。调度器负责管理quartz应用运行时环境。调度器不是靠自己做所有的工作,而是依赖框架内一些非常重要的部件。quartz不仅仅是线程和线程管理。为确保可伸缩性,quartz采用了基于多线程的架构。启动时,框架初始化一套worker线程,这套线程被调度器用来执行预定的作业。

其中,zookeeper是一个分布式的,开放源码的分布式应用程序协调服务,是google的chubby一个开源的实现,是hadoop和hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等。

s15:节点服务器接收中心服务器发送的目标任务信息,目标任务信息包括基础分片数据和处理指令。

具体地,节点服务器通过网络传输协议获取客户端发送的目标任务信息,目标任务信息包括基础分片数据和处理指令。

s16:节点服务器计算基础分片数据的数据记录的条数。

具体地,节点服务器对基础分片数据的数据记录的条数进行统计,根据得到的条数信息判断数据处理的复杂程度,条数越大,数据处理越复杂,消耗系统资源也越多。

s17:节点服务器获取中央处理器型号i1、内存型号i2、中央处理器当前使用率p1和内存当前使用率p2,并按照如下公式计算可处理的条数阈值s:

其中,j1为中央处理器型号i1对应的预设权值,j2为内存型号i2对应的预设权值。

具体地,不同节点服务器由于其配置不同,以及当前的运行状态不同,导致其数据处理能力也不同,为避免节点服务器超负载运行导致服务器故障或者数据处理过程中的异常,需要通过节点服务器的当前运行状态,来计算出节点服务器当前可处理数据的条数阈值,具体计算可使用公式来计算,其中,s为j1为中央处理器型号i1对应的预设权值,j2为内存型号i2对应的预设权值,p1为中央处理器当前使用率,p2为内存当前使用率。

优选地,在本发明实施例中j1的值设置为0.7,j2的值设置为0.63,也可根据实际情况进行设置,此处不作具体限制。

需要说明的是,步骤s16与步骤s17之间没有必然先后执行顺序,也可以是并列的关系同时执行,此处不做限制。

s18:若条数大于条数阈值,则节点服务器按照预设的维度,对基础分片数据进行分割,得到k个目标分片数据,其中,k为正整数。

具体地,当步骤s16中计算的条数大于步骤s17中计算出的条数阈值时,说明该节点服务器无法同时处理基础分片数据中的所有数据,因而,需要按照预设的维度,对基础分片数据进行分割,得到k个目标分片数据,使得每个目标分片数据均在节点服务器处理范围之内。

其中,预设的维度包括但不限于地理区域、行政区域和时间维度等,也可根据实际需要进行设置,此处不作具体限制。

s19:节点服务器使用线程池的方式,对k个目标分片数据执行处理指令,得到执行结果。

具体地,采用线程池(threadpool)的方式,对k个目标分片数据执行处理指令,得到执行结果,若处理指令中包含多个关联指令,则依序执行,具体描述请参见步骤s11的示例,为避免重复,此处不再赘述。

其中,线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管中空闲,则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。

s20:节点服务器将执行结果发送给中心服务器。

具体地,节点服务器通过网络传输协议将步骤s19中得到的执行结果发送给中心服务器。

s21:中心服务器接收目标节点服务器发送的执行结果,并对执行结果进行汇总,得到目标结果。

具体地,中心服务器每次在接收到节点服务器发送的执行结果后,对执行结果进行汇总,在对所有执行结果均进行汇总后,将汇总后的结果作为目标结果。

s22:中心服务器将目标结果发送给客户端。

具体地,中心服务器通过网络传输协议将目标结果发送给客户端。

在本实施例中,中心服务器获取客户端发送的基础任务信息,并采用取模运算的方式对基础任务数据进行分片,得到基础分片数据,使得连续的数据记录被分散到不同的基础分片数据中,在后续对数据的处理中,有利于数据记录按照基础任务信息中的先后顺序进行执行,提高了执行结果合并的效率,将基础分片数据和处理指令作为目标任务信息发送给节点服务器执行,节点服务器在接收到目标任务信息后,根据当前节点服务器的运行状态,计算能同时处理的数据记录的条数阈值,并对超出该条数阈值的任务进行分割,通过线程池的方式执行分割后的任务数据,并将执行结果返回给中心服务器,使得节点服务器可以根据自身运行状态来动态设置同时处理的条数阈值,并使用多线程进行处理,保证了数据处理过程中的稳定性,同时提高了数据处理效率,中心服务器将所有获取到的执行结果进行合并得到目标结果,并目标结果发送给客户端,从而实现了将数据量大的任务合理分发到分布式节点服务器上执行,提高了数据处理效率。

在一实施例中,中心服务器对大数据量的基础任务数据进行分片,如图3所示,步骤s12中,即中心服务器采用取模运算的方式,按照预设的分片数目n对基础任务数据进行分片,得到n个基础分片数据,具体包括如下步骤:

s121:获取基础任务数据的数据记录的条数,并对每条数据记录进行顺序编号。

具体地,获取基础任务数据的数据记录的条数,在缓存记录中生成一个分片清单,将基础任务数据中的数据记录写入到分片清单中,并依次对每条数据记录进行编号。

例如,在一具体实施方式中,获取到的基础任务数据的数据记录的条数为50条,对每条数据记录进行编号,得到编号为1至编号为50的50个编号。

值得说明的是,本实施例描述的步骤s121至步骤s123的取模过程,均在缓存中处理,最后得到的基础分片数据,最终也保存在分片清单中,这种处理方法能有效节省中心服务器的系统资源,节约分片的时间,提高了分片的效率。

s122:针对每条数据记录,使用该数据记录的编号对分片数目n进行取模运算,得到该数据记录的编号模。

具体地,使用步骤s121中得到的编号,对预设的分片数目n进行取模运算,得到每个编号对应数据记录的编号模。

其中,取模运算是一种数学运算,其基本形式为a%b,或amodb,表示a除以b的余数。

以步骤s121中的50个编号为例,在一具体实施方式中,预设的分片数据为4,使用1至50分别对4进行取模运算,其中编号1、5、9、13、17、21、25、29、33、37、41、45和49对4取模得到的编号模为1,编号2、6、10、14、18、22、26、30、34、38、42、46和50对4取模得到的编号模为2,编号3、7、11、15、19、23、27、31、35、39、43和47对4取模得到的编号模为3,编号4、8、12、16、20、24、28、32、36、40、44和48对4取模得到的编号模为0。

s123:将编号模相同的数据记录分入同一个分片集合中,并将每个分片集合中的数据记录作为一个基础分片数据,得到n个基础分片数据。

具体地,将分片清单中编号模相同的数据记录放入同一个分片集合中,将每一个分片集合作为一个基础分片数据,得到n个基础分片数据。

以步骤s122中对50个编号进行取模运算得到的结果为例,将编号模为1的数据记录作为第1个基础分片数据,即将编号1、5、9、13、17、21、25、29、33、37、41、45和49对应的数据记录放入到第1个基础分片数据中,将编号模为2的数据记录作为第2个基础分片数据,即将编号2、6、10、14、18、22、26、30、34、38、42、46和50对应的数据记录放入到第2个基础分片数据中,将编号模为3的数据记录作为第3个基础分片数据,即将编号3、7、11、15、19、23、27、31、35、39、43和47对应的数据记录放入到第3个基础分片数据中,将编号模为0的数据记录作为第4个基础分片数据,即将编号4、8、12、16、20、24、28、32、36、40、44和48对应的数据记录放入到第4个基础分片数据中,如此,便将该50条数据记录按照编号模的特性,分成到4个基础分片数据中,且相邻的数据记录被分配到不同的分片数据中,后续将被分配到不同的节点服务器中,使得后续在进行数据处理时,相邻编号的数据记录执行处理指令的时间点相差不会太大,即得到执行结果时间点相差不会太大,有利于提高执行结果汇总的效率。

在本实施例中,获取基础任务数据的数据记录的条数,并对每条数据记录进行顺序编号,针对每条数据记录,使用该数据记录的编号对分片数目n进行取模运算,得到该数据记录的编号模,将编号模相同的数据记录分入同一个分片集合中,并将每个分片集合中的数据记录作为一个基础分片数据,得到n个基础分片数据,使得大数据量的基础任务数据被划分到多个基础分片数据中,且不同基础分片数据包含的数据记录条数大体相同,使得后续将基础分片数据分配到不同节点服务器进行计算时,提高了数据处理效率,不同节点服务器计算耗时也相差不多,节省了结果汇总的时间,提高了数据处理效率。

在一实施例中,节点服务器对超过条数阈值的基础分片数据进行分割,如图4所示,步骤s18中,即节点服务器按照预设的维度,对基础分片数据进行分割,得到k个目标分片数据,具体包括如下步骤:

s181:计算条数与条数阈值的比值。

具体地,计算步骤s16中得到的基础分片数据的数据记录的条数与步骤s17中得到的条数阈值之间的比值。

例如,在一具体实施方式中,基础分片数据的数据记录的条数为20000,条数阈值为600,通过计算得到的比值为33.33。

s182:对比值进行向上取整运算,并将向上取整运算的结果作为分割片数k,其中,k为正整数。

具体地,通过向上取整函数ceil()对步骤s181中得到的比值进行向上取整运算,并将向上取整运算的结果作为分割片数k。

其中,向上取整运算是一种数学运算,是指获取等于或大于自己的最小整数,用数学符号表示,以步骤181中得到的比值33.33为例,对该比值进行向上取整为:

s183:按照分割片数对基础分片数据进行分割,得到k个目标分片数据。

具体地,按照步骤s182中获取到的分割片数k,对基础分片数据进行分割,得到k个目标分片数据。

以步骤s181中的基础分片数据和步骤s182中得到的分割片数为例,基础分片数据的数据记录的条数为20000,分割片数为34,因而,按照数据记录的编号顺序,从前往后每隔600条数据记录做一次分割,如此分割33次后,得到33个目标分片数据,并将剩下的200条数据作为第34个目标分片数据。

在本实施例中,通过计算条数与条数阈值的比值,对比值进行向上取整运算,并将向上取整运算的结果作为分割片数k,进而按照分割片数对基础分片数据进行分割,得到k个目标分片数据,使得每个目标分片数据中的数据记录的条数均不超过条数阈值,保证了节点服务器在进行数据处理过程中的稳定性。

在一实施例中,节点服务器对目标分片数据进行数据处理,如图5所示,步骤s19中,即节点服务器使用线程池的方式,对k个目标分片数据执行处理指令,得到执行结果,具体包括如下步骤:

s191:按照预设的线程数量q,创建定长线程池,其中,q为正整数;

具体地,本发明实施例使用线程池提供的多线程方式,对目标分片数据进行处理,在数据处理之前,先将目标分片数据放入等待队列,并创建预设线程数量为q的线程池,预设的线程数据可以根据实际需要来进行设置,例如将线程数量设置为6。

其中,线程池包括但不限于可缓存线程池(cachedthreadpool)、定长线程池(fixedthreadpool)、单线程化线程池(singlethreadexecutor)和定时线程池(scheduledthreadpool)等。

优选地,本发明实施例采用的线程池为定长线程池,通过控制线程的最大并发数,来进行多线程运算,超出的线程会在队列中等待。

例如,在一具体实施方式中,通过使用executors.newfixedthreadpool(6)来创建一个定长的线程池,这个线程池可以控制最大的线程数为6,超出的线程会在队列中进行等待。在执行数据处理时,该线程池可以同时对6个目标分片数据执行处理指令,这种使用多线程的方式,节省计算时间,提高了数据处理的效率。

s192:若目标分片数据的个数k大于线程数量q,则从k个目标分片数据中选取q个目标分片数据放入定长线程池,执行处理指令。

具体地,在目标分片数据的个数k小于或等于线程数量q时,直接将k个目标分片数据放入线程池进行数据处理即可,在目标分片数据的个数k大于线程数量q时,则先从k个目标分片数据中选取q个目标分片数据执行处理指令。

例如,在一具体实施方式中,目标分片数据的个数k为11,线程数据q为6,则先从11个目标分片数据选取6个目标分片数据放入线程池进行数据处理,余下的5个目标分片数据放入等待队列中。

值得说明的是,若处理指令包含多个批次的指令,在进行数据处理时,按照指令的顺序以及指令间的逻辑关系依次执行,具体描述可参阅步骤s11中的示例,为避免重复,此处不在赘述。

s193:若监测到定长线程池中的任一个目标分片数据处理完成,则获取该目标分片数据的处理结果,并从未被选取的目标分片数据中选取一个目标分片数据,重新添加到定长线程池中执行处理指令,直到k个目标分片数据全部处理完成为止。

具体地,在监测到定长线程池中有目标分片数据的数据处理任务完成时,获取该目标分片数据的处理结果,并在等待队列中,选取一个未被选取的目标分片数据,重新添加到定长线程池中执行处理指令,使得定长线程池最大程度的进行数据处理,知道k个目标分片数据全部处理完成,则确认该节点服务器的本次数据处理任务完成。

以步骤s192中的11个目标分片数据为例,在检测到线程池中有目标分片数据执行完时,获取该目标分片数据的执行结果,此时线程池中只有5个目标分片数据在执行处理指令,即只有5条线程处理繁忙状态,有1条线程处于空闲状态,为使得处理数据效率最大化,需要让线程池中的所有线程尽可能地处于繁忙状态,此时,从等待队列的5个未被选取的目标分片数据中,选取1个目标分片数据放入线程池进行处理,直到获取到11个目标分片数据的执行结果,则确认本次数据处理任务完成。

s194:对k个目标分片数据的处理结果进行汇总,得到执行结果。

具体地,将步骤s193中得到的k个处理结果进行汇总,得到该节点服务器最终的执行结果。

在本实施例中,通过创建线程池,使用多线程的方式对目标分片数据进行数据处理,使得可以同时对多条数据记录执行处理指令,节约了数据处理的时间,提高了数据处理的效率。

在一实施例中,中心服务器对接收到的执行结果进行汇总得到目标结果,如图6所示,步骤s21中,即中心服务器接收目标节点服务器发送的执行结果,并对执行结果进行汇总,得到目标结果,具体包括如下步骤:

s211:接收每个目标节点服务器发送的每个执行结果。

具体地,目标节点服务器在得到执行结果之后,将执行结果发送给中心服务器。

其中,目标节点服务器可以是一个或多个,可以理解地,若目标节点服务器的数量为一个,则仅接受一个执行结果,若目标节点服务器为多个,则每个目标节点服务器均接受到一个执行结果。

s212:将执行结果存入到汇总表。

具体地,中心服务器将步骤s211中接收到的执行结果存入到汇总表中,该汇总表用于临时存放执行结果。

s213:接收每个目标节点服务器发送的执行结果发送完成的消息,若检测到全部目标节点服务器均已发送该消息,则对汇总表中的执行结果进行排序,得到目标结果。

具体地,目标节点服务器可以是一个或多个,在执行结果接收完毕后,目标节点服务器向中心节点服务器发送执行结果发送完成的消息,中心服务器在接收到所有目标节点服务器的该消息后,即接收到所有目标节点服务器的执行结果后,对汇总表中的数据按照预设的排序方式进行排序,得到目标结果。

其中,预设的排序方式可以是按照生成时间的顺序,也可以根据实际需要进行设置,此处不作具体限制。

在本实施例中,通过接收目标节点服务器发送的执行结果,将所述执行结果存入到汇总表,进而根据接收到的执行结果发送完成的消息,确定在接收到所有执行结果之后,对汇总表中的执行结果进行排序,得到目标结果,保证了最终得到的目标结果数据的完整性。

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

在一实施例中,提供一种数据处理装置,该数据处理装置与上述实施例中数据处理方法一一对应。如图7所示,该数据处理装置包括中心服务器和节点服务器,为了便于说明,仅示出了与本实施例相关的部分:

请参阅图7,该数据处理装置的中心服务器包括:数据获取模块110、数据分片模块120、任务生成模块130、任务分配模块140、结果获取模块150和结果发送模块160。各功能模块详细说明如下:

数据获取模块110,用于获取客户端发送的基础任务信息,其中,基础任务信息包括基础任务数据和该基础任务数据对应的处理指令;

数据分片模块120,用于采用取模运算的方式,按照预设的分片数目n对基础任务数据进行分片,得到n个基础分片数据,其中,n为正整数;

任务生成模块130,用于将基础分片数据和处理指令作为目标任务信息;

任务分配模块140,用于按照预设的负载均衡分配方式,从节点服务器集合中选取目标节点服务器,并将目标任务信息分配给目标节点服务器执行,其中,节点服务器集合包含预设数量的节点服务器;

结果获取模块150,用于接收目标节点服务器发送的执行结果,并对执行结果进行汇总,得到目标结果;

结果发送模块160,用于将目标结果发送给客户端。

进一步地,数据分片模块120包括:

编号单元121,用于获取基础任务数据的数据记录的条数,并对每条数据记录进行顺序编号;

运算单元122,用于针对每条数据记录,使用该数据记录的编号对分片数目n进行取模运算,得到该数据记录的编号模;

分片单元123,用于将编号模相同的数据记录分入同一个分片集合中,并将每个分片集合中的数据记录作为一个基础分片数据,得到n个基础分片数据。

进一步地,结果获取模块150,包括:

接收单元151,用于接收每个目标节点服务器发送的执行结果;

存储单元152,用于将每个执行结果存入到汇总表;

排序单元153,用于接收每个目标节点服务器发送的执行结果发送完成的消息,若检测到全部目标节点服务器均已发送该消息,则对汇总表中的执行结果进行排序,得到目标结果。

请继续参阅图7,该数据处理装置的节点服务器包括:任务接收模块210、条数统计模块220、阈值计算模块230、数据分割模块240、数据处理模块250和结果传输模块260。各功能模块详细说明如下:

任务接收模块210,用于接收中心服务器发送的目标任务信息,目标任务信息包括基础分片数据和处理指令;

条数统计模块220,用于计算基础分片数据的数据记录的条数;

阈值计算模块230,用于获取中央处理器型号i1、内存型号i2、中央处理器当前使用率p1和内存当前使用率p2,并按照如下公式计算可处理的条数阈

值s:

其中,j1为中央处理器型号i1对应的预设权值,j2为内存型号i2对应的预设权值;

数据分割模块240,用于若条数大于条数阈值,则按照预设的维度,对基础分片数据进行分割,得到k个目标分片数据,其中,k为正整数;

数据处理模块250,用于使用线程池的方式,对k个目标分片数据执行处理指令,得到执行结果;

结果传输模块260,用于将执行结果发送给中心服务器。

进一步地,数据分割模块240包括:

计算单元241,用于计算条数与条数阈值的比值;

取整单元242,用于对比值进行向上取整运算,并将向上取整运算的结果作为分割片数k,其中,k为正整数;

分割单元243,用于按照分割片数对基础分片数据进行分割,得到k个目标分片数据。

进一步地,数据处理模块250包括:

创建单元251,用于按照预设的线程数量q,创建定长线程池,其中,q为正整数;

执行单元252,用于若目标分片数据的个数k大于线程数量q,则从k个目标分片数据中选取q个目标分片数据放入定长线程池,执行处理指令;

循环单元253,用于若监测到定长线程池中的任一个目标分片数据处理完成,则获取该目标分片数据的处理结果,并从未被选取的目标分片数据中选取一个目标分片数据,重新添加到定长线程池中执行处理指令,直到k个目标分片数据全部处理完成为止;

汇总单元254,用于对k个目标分片数据的处理结果进行汇总,得到执行结果。

关于数据处理装置的具体限定可以参见上文中对于数据处理方法的限定,在此不再赘述。上述数据处理装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。

在一个实施例中,提供了一种计算机设备,该计算机设备可以是中心服务器,也可以是节点服务器,其内部结构图可以如图8所示。该计算机设备包括通过系统总线连接的处理器、存储器、网络接口和数据库。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统、计算机程序和数据库。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的数据库用于存储数据处理方法中的数据记录。该计算机设备的网络接口用于与外部的终端通过网络连接通信。该计算机程序被处理器执行时以实现一种数据处理方法。

在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述实施例数据处理方法的步骤,例如图2所示的步骤s11至步骤s22。或者,处理器执行计算机程序时实现上述实施例数据处理装置的各模块/单元的功能,例如图7所示的中心服务器的模块110至模块160的功能,以及节点服务器的模块210至模块260的功能。为避免重复,这里不再赘述。

在一个实施例中,提供了一种计算机可读存储介质,其上存储有计算机程序,计算机程序被处理器执行时实现上述实施例数据处理方法的步骤,或者,计算机程序被处理器执行时实现上述实施例数据处理装置的各模块/单元的功能,为避免重复,这里不再赘述。

本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本发明所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(rom)、可编程rom(prom)、电可编程rom(eprom)、电可擦除可编程rom(eeprom)或闪存。易失性存储器可包括随机存取存储器(ram)或者外部高速缓冲存储器。作为说明而非局限,ram以多种形式可得,诸如静态ram(sram)、动态ram(dram)、同步dram(sdram)、双数据率sdram(ddrsdram)、增强型sdram(esdram)、同步链路(synchlink)dram(sldram)、存储器总线(rambus)直接ram(rdram)、直接存储器总线动态ram(drdram)、以及存储器总线动态ram(rdram)等。

所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,仅以上述各功能单元、模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能单元、模块完成,即将所述装置的内部结构划分成不同的功能单元或模块,以完成以上描述的全部或者部分功能。

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

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