大任务的数据处理方法、设备和计算机可读存储介质与流程

文档序号:13031245阅读:149来源:国知局
本发明的实施方式涉及计算机领域,更具体地,本发明的实施方式涉及大任务的数据处理方法、设备和计算机可读存储介质。
背景技术
::本部分旨在为权利要求书中陈述的本发明的实施方式提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。大任务是指大量数据的处理,比如大任务是给200万个不同的用户发送不同内容的邮件,现有方式执行一次任务,具体的首先从数据库中取一批数据,之后根据数据和业务生成一批与之对应的邮件,然后发送该邮件,在执行下一次任务,具体的从数据库中再取下一批数据,然后根据下一批数据和下一批业务生成下一批与之对应的邮件,再次发送邮件,重复上述执行任务过程,直到200万个不同的用户发送不同内容的邮件处理完成为止。如果有多台机器,每台机器约定负责处理的数据范围。在上述任务处理过程中的获取数据、异常处理、分配、处理过程中的状态收集等工作是每个任务都需要做的,所以现有的方式大任务处理可能会出现数据重复处理或漏处理的问题。技术实现要素:但是,出于的原因,现有技术无法避免数据重复处理或漏处理的问题。因此在现有技术中,这是非常令人烦恼的过程。为此,非常需要一种改进的大任务的数据处理方法,以使大任务的数据处理不会出现重复处理或漏处理。在本发明实施方式的第一方面中,提供了一种大任务的数据处理方法,包括:大任务辅助工具接收请求客户端发送的大任务启动命令;大任务辅助工具从请求客户端获取大任务的数据接口,调用所述数据接口获取所述大任务的数据;大任务辅助工具每获取到设定数量个数据时,将所述设定数量个数据划分成一个子任务,为所述子任务内的数据分配唯一标识该子任务的子任务id以及为所述子任务中的数据分配可执行的属性;大任务辅助工具在确定所述子任务中的数据的属性为可执行时,调用执行客户端的任务执行接口对所述子任务执行。在本发明的一个实施例中,还包括:如所述子任务执行成功,则由执行客户端在第一数据库中记录所述子任务执行成功。在本发明的另一实施例中,还包括:调用所述数据接口获取所述大任务的数据具体为:大任务辅助工具调用所述数据接口按所述大任务的数据编号从小到大递增式获取。在本发明的又一个实施例中,还包括:大任务辅助工具在第一数据库中建立数据库表,所述数据库表包括:大任务表最大值id和子任务id。在本发明的再一个实施例中,还包括:调用所述执行客户端的任务执行接口对所述子任务执行具体包括:大任务辅助工具调用超文本传输协议接口查询执行任务队列的数据总量,如所述数据总量超过设定阈值,则等待一设定时间后,调用所述数据接口获取所述大任务的数据。在本发明后一实施例中,还包括:调用所述执行客户端的任务执行接口对所述子任务执行具体包括:提取所述任务执行接口的最后访问时间,计算最后访问时间与当前时间的差值,并提取所述最后访问时间与当前时间之间的访问数量,根据所述访问数量和所述差值计算单位时间访问数量,如所述单位时间访问数量小于用户设定的访问数量阈值时,将调用所述执行客户端的任务执行接口对所述子任务执行。在本发明实施方式的第二方面中,提供了一种大任务的数据处理装置,包括:收发单元,用于接收请求客户端发送的大任务启动命令;处理单元,用于从请求客户端获取大任务的数据接口,调用所述数据接口获取所述大任务的数据;每获取到设定数量个数据时,将所述设定数量个数据划分成一个子任务,为所述子任务内的数据分配唯一标识该子任务的子任务id以及为所述子任务中的数据分配可执行属性;所述处理单元,还用于在确定所述子任务中的数据的属性为可执行时,调用执行客户端的任务执行接口对所述子任务执行。在本发明实施方式的第三方面中,提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现第一方面提供的大任务的数据处理方法:根据本发明实施方式的方法和设备,每获取设定数量个数据,即为设定数量个数据创建一个子任务,然后为每个子任务内的数据分配唯一标识该子任务的子任务id,并且配置子任务中的数据可执行的属性,这样大任务辅助工具在子任务中的数据属性为可执行时,调用执行客户端的任务执行接口对该子任务执行,此技术方案只会在数据为可执行的属性才会对数据进行执行,所以其不会出现重复处理的问题,另外,为子任务内的数据分配唯一的id也能够标识每个子任务的数据,使得大任务内的数据不会漏执行,所以其具有避免重复执行数据以及漏执行数据,为用户带来了更好的体验。附图说明通过参考附图阅读下文的详细描述,本发明示例性实施方式的上述以及其他目的、特征和优点将变得易于理解。在附图中,以示例性而非限制性的方式示出了本发明的若干实施方式,其中:图1示意性地示出了根据本发明实施方式的应用场景结构示意图;图2示意性地示出了根据本发明另一实施例的大任务的数据处理方法的流程图;图3示意性地示出了根据本发明又一实施例的大任务的数据处理方法的流程图;图4示意性地示出了根据本发明再一实施例的大任务的数据处理装置的结构示意图;图5示意性地示出了根据本发明实施例提供的计算机系统的结构示意图。在附图中,相同或对应的标号表示相同或对应的部分。具体实施方式下面将参考若干示例性实施方式来描述本发明的原理和精神。应当理解,给出这些实施方式仅仅是为了使本领域技术人员能够更好地理解进而实现本发明,而并非以任何方式限制本发明的范围。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。本领域技术技术人员知道,本发明的实施方式可以实现为一种系统、装置、设备、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:完全的硬件、完全的软件(包括固件、驻留软件、微代码等),或者硬件和软件结合的形式。根据本发明的实施方式,提出了一种的方法和设备。在本文中,需要理解的是,所涉及的术语表示。此外,附图中的任何元素数量均用于示例而非限制,以及任何命名都仅用于区分,而不具有任何限制含义。下面参考本发明的若干代表性实施方式,详细阐释本发明的原理和精神。发明概述本发明人发现,对于大任务数据处理来说,需要处理的数据的数量为海量数据(一般为百万级别数量的数据)。为了提高数据处理的效率,对于大任务数据处理来说,通过多台设备对一个大任务的数据进行同时的处理,为了避免重复处理或漏处理,多台设备约定负责处理的数据范围,但是对于海量数据来说,其可能出现获取数据、异常处理,分配以及处理过程等等不同的状态,数据处理也不可能都为处理成功的,所以现有的技术方案无法避免数据重复处理或漏处理。为了解决这个问题,本发明提供的技术方案每获取设定数量个数据,即为设定数量个数据创建一个子任务,然后为每个子任务内的数据分配唯一标识该子任务的子任务id,并且配置子任务中的数据可执行的属性,这样大任务辅助工具在子任务中的数据属性为可执行时,调用执行客户端的任务执行接口对该子任务执行,此技术方案只会在数据为可执行的属性才会对数据进行执行,所以其不会出现重复处理的问题,另外,为子任务内的数据分配唯一的id也能够标识每个子任务的数据,使得大任务内的数据不会漏执行。在介绍了本发明的基本原理之后,下面具体介绍本发明的各种非限制性实施方式。应用场景总览首先参考图1,大任务辅助工具(jobguard)是web服务,多个jobguard对外提供服务(给客户端提供任务操作的接口,比如:创建任务、执行任务)。客户端(client)是大任务处理需求的应用服务(比如有200个用户邮件要发送),具体的,可以分为请求客户端和执行客户端,请求客户端提供给jobguard获取数据接口(jobguard通过调用它从关系型数据库来获取用户邮箱等有用数据);执行客户端提供给jobguard另一个接口是处理数据接口(也称执行接口)(jobguard获取到数据之后,调用执行client的执行接口,调用时会把数据内容传送给执行client,执行client根据数据内容和业务逻辑给用户发邮件。)聚拢消息队列(rabbitmq),jobguard从客户端client获取的数据后存放到rabbitmq上。分布式缓存系统(memched):jobguard把经常访问的信息存放到分布式缓存系统memched里面。管理员(zookeeper:)因为多个机器同时启动了jobguard这个web服务,所以关于数据一致性问题是有zookeeper来完成的。示例性方法下面结合图的应用场景,参考图来描述根据本发明示例性实施方式的用于的方法。需要注意的是,上述应用场景仅是为了便于理解本发明的精神和原理而示出,本发明的实施方式在此方面不受任何限制。相反,本发明的实施方式可以应用于适用的任何场景。参阅图2,图2为本发明实施例提供的一种大任务的数据处理方法,该方法如图2所示,包括如下步骤:步骤s201、大任务辅助工具接收请求客户端发送的大任务启动命令。上述步骤s201中的大任务启动命令可以为现有的大任务系统中的一个现有的命令,当然在实际应用中,上述大任务启动命令也可以为用户自定义的命令。步骤s202、大任务辅助工具从请求客户端获取大任务的数据接口,调用所述数据接口获取所述大任务的数据。步骤s202实现的具体方法可以为,请求客户端向大任务辅助工具发送超文本传输协议(hypertexttransferprotocol,http)的请求消息,该请求消息用于告知该大任务辅助工具其数据接口(具体的,可以为一个统一资源定位符(英文:uniformresourelocator,url)。步骤s203、大任务辅助工具每获取到设定数量个数据时,将所述设定数量个数据划分成一个子任务,为所述子任务内的数据分配唯一标识该子任务的子任务id以及为所述子任务中的数据分配可执行的属性。上述步骤s203中的大任务辅助工具获取的设定数量个数据可以存在关系数据库中。上述步骤s203的实现方法具体可以为:大任务辅助工具要求请求客户端按id递增返回数据,每次获取一次数据,大任务辅助工具会向请求客户端发送一个请求,该请求中包含limit参数,该limit参数用于标识本次获取数据的数量。上述子任务中的数据的属性具体可以为:可执行的属性和不可执行的属性,大任务辅助工具只有在数据的属性为可执行的属性时,执行下述步骤s204,如该数据的属性为不可执行的属性时,无法调用执行客户端的任务执行接口对子任务执行。步骤s204、大任务辅助工具在确定所述子任务中的数据的属性为可执行时,调用执行客户端的任务执行接口对所述子任务执行。可选的,上述方法在步骤s204之后还可以包括:如该子任务执行成功,则由执行客户端在第一数据库中记录该子任务执行成功。该执行成功可以通过一个指示域来实现,例如1表示执行成功,0表示执行不成功。可选的,上述第一数据库内还可以包括建立的数据库表,该数据库表可以包含:大任务表最大值id以及子任务id。可选的,大任务辅助工具调用http接口查询执行任务队列的数据总量,如该数据总量超过设定阈值,延时一设定时间后,调用该数据接口获取该大任务的数据。可选的,上述步骤s204的实现方法具体可以为:大任务辅助工具提取该任务执行接口的最后访问时间,计算最后访问时间与当前时间的差值,并提取最后访问时间与当前时间之间的访问数量,根据该访问数量和该差值计算单位时间访问数量,如该单位时间访问数量小于用户设定的访问数量阈值时,将调用该执行客户端的任务执行接口对该子任务执行。如图2所示的实施例提供的技术方案每获取设定数量个数据,即为设定数量个数据创建一个子任务,然后为每个子任务内的数据分配唯一标识该子任务的子任务id,并且配置子任务中的数据可执行的属性,这样大任务辅助工具在子任务中的数据属性为可执行时,调用执行客户端的任务执行接口对该子任务执行,此技术方案只会在数据为可执行的属性才会对数据进行执行,所以其不会出现重复处理的问题,另外,为子任务内的数据分配唯一的id也能够标识每个子任务的数据,使得大任务内的数据不会漏执行。上述技术方案的分解任务和执行任务并行执行,分解任务线程调用请求客户端的获取数据接口获得数据,获得的数据以消息的形式发送到rabbitmq上,多个消费者并行执行消息,做到一边分解任务获取数据,一边执行任务消费消息,例如获取用户数据的同时调用执行客户端处理数据,提高数据处理的效率。参阅图3,图3为本发明提供的另一种大任务的数据处理方法,该方法如图3所示,包括如下步骤:步骤s301、对大任务的数据进行分解具体的:步骤s301a、大任务辅助工具通过一个线程对大任务数据开始分解。具体的可以通过分布式锁来保证只有一个线程分解该大任务。步骤s301b、大任务辅助工具从请求客户端调用获取大任务数据的数据接口。具体的,数据的调取采用id值严格递增的获取,比如第一次获取的id是1,2...100,第二次获取的id是101,102...200。步骤s301c、每获取设定数量(例如200)个数据后生成一个子任务(每个数据都会属于一个子任务),在关系类型数据内存储子任务的数据,在存储子任务的数据之前需要满足如下条件;条件a、接收到请求客户端发送的任务停止分解的命令;条件b、子任务是否具有正常执行情况(即是否具有执行该子任务的执行接口)。步骤s301d、当获取的最大数据id和上次获取的最大数据id相等或者获取的数据数组为空时,任务分解完成。步骤s302、对子任务中的数据进行唯一性id分配。该方案解决主要解决需要在数据存放到数据库前获得分布式所有节点全局唯一的数据id。步骤s302a、第一数据库可以包含数据库表table_max_id(table_name,max_id)记录数据库表中所有表的最大id。查询table_max_id时,锁定table_max_id表中要查询表的行,如果没有指定表的最大未分配id记录,锁定要查询的表,将以下关键字段的数值,即“table_name=需要查询的表名称,max_id=1001”插入到表到table_max_id表中,并返回最大id=1,;如果有指定表的最大分配id记录就返回该id,并更改最大id的值为原该id的值加1000(比如,数据库中有两张表,分别是table_max_id和job,table_max_id记录了job表当前被分配的最大id。)步骤s302b、获得1000个id放在本地线程安全的数组里面。步骤s303、调用执行客户端的执行接口对大任务的子任务执行。步骤s303a、jobguard在执行每个获取到的子任务的数据时,要检查这个子任务的数据属性是不是可以执行(数据所属子任务不一定存在,因为服务在获取了数据之后,在它所属的子任务信息存放到数据库之前宕机了,此时该数据就不能被处理了。数据能不能处理的唯一条件是数据所属子任务是不是存在,这样处理的目的保证数据不遗漏同时也不重复处理)。步骤s303b、当判断子任务的数据属性为可执行时,执行子任务的数据。例如通过负载均衡模块获取处理数据的ip地址,调用执行客户端的任务执行接口,对该数据进行执行,并在第一数据库内记录是否成功执行进行记录。可选的,上述方法还可以包括:rabbitmq的消息总量控制以及执行消息速率控制。例如第一每秒种可以获得1000个数据存放到rabbitmq上,但是每秒只能处理50个,导致数据堆积;又如访问任务执行接口的速率没有得到控制。(比如执行client只能一秒钟发一个邮件,但是joguard每秒调用执行任务接口5次,即一秒钟需要发送5个邮件)。为了解决上述问题,提供下属方式中的任意一种:方式一、大任务辅助工具在任务分解获取到数据在发送到消息队列之前,通过调用rabbitmq提供的http接口查询rabbitmq的消息总量,如大于设定阈值(例如1000)则等待一设定时间(例如半秒),直到查询rabbitmq消息总量小于1000时,才将获取到的数据发送到消息队列。方式二、大任务辅助工具控制调用执行接口的频率。大任务辅助任务需要调用执行客户端的执行任务接口时,提取任务执行接口的最后访问时间t1,计算t1与当前时间t2的差值t2-t1,当t2-t1大于间隔时间且单位时间范围数量小于设定的访问数量阈值时,调用该执行客户端的任务执行接口对该子任务进行执行。比如执行客户端只能同时处理5个邮件(即处理5条数据),两次访问该接口的时间间隔不得少于1分钟,如果大任务辅助工具确定t2-t1小于1分钟,则不调用该执行客户端,如t2-t1大于1分钟,但单位时间范围数量大于5,不调用该执行客户端,如t2-t1大于1分钟且单位时间范围数量小于5,调用该执行客户端执行数据。本发明实施例通过使用分布式唯一id分配机制与rabbitmq消息队列持久化消息保证任务分解与子任务的所有消息执行不重复、不丢失,执行完毕的大任务是所有已执行子任务的组合(比如200万个数据,分成100个子任务,这100个子任务所包含的数据总和还是200万个数据)。流式处理支持:分解任务和执行任务并行执行,分解任务线程调用请求客户端的获取数据接口获得数据,获得的数据以消息的形式发送到rabbitmq上,多个客户端并行执行消息。支持中断后可以恢复继续处理:请求客户端可以调用jobguard提供的http接口(任务停止接口)来停止任务,该接口处理逻辑是向缓存中存放停止任务信号,分解任务线程在每次存储子任务时检查该信号,如果检查到有停止任务信号则放弃持久化子任务,停止任务分解;请求客户端可以调用jobguard提供的http接口(任务重置接口)来重新开始分解和执行任务;做到停止任务和恢复任务重新执行。支持基于任务粒度的并发控制及流量控制,访问请求客户端时有并发和流量控制,在缓存中存放访问时间和同时访问量,当最后访问时间与当前时间的差值大于用户限定访问间隔时间(决定访问速率),并且同时访问量小于请求客户端限定的同时最大访问量时可访问,否则等待以上两种情况都满足再访问。客户端过载保护,分解任务获取数据时,获取的数据以消息的形式发送到rabbitmq,在发送到rabbitmq上之前通过通过调用rabbitmq提供的http接口检查队列的消息总量,如大于1000则等待半秒,直到检查消息总量小于1000则发送消息。支持基于ip或者域名的子任务处理负载均衡(加快任务处理),当请求客户端提供的执行任务的ip或者域名多个时,在多个执行消息调用执行服务器接口的时候均衡ip或者域名。示例性设备在介绍了本发明示例性实施方式的方法之后,接下来,参考图4对本发明示例性实施方式的大任务的数据处理装置40,其中,所述装置包括:收发单元401,用于接收请求客户端发送的大任务启动命令;处理单元402,用于从请求客户端获取大任务的数据接口,调用所述数据接口获取所述大任务的数据;每获取到设定数量个数据时,将所述设定数量个数据划分成一个子任务,为所述子任务内的数据分配唯一标识该子任务的子任务id以及为所述子任务中的数据分配可执行属性;所述处理单元402,还用于在确定所述子任务中的数据的属性为可执行时,调用执行客户端的任务执行接口对所述子任务执行。可选的,上述装置还包括:存储单元403,用于如所述子任务执行成功,则控制由所述执行客户端在第一数据库中记录所述子任务执行成功。可选的,处理单元402,具体用于调用所述数据接口按所述大任务的数据编号从小到大递增式获取。可选的,处理单元402,还用于在第一数据库中建立数据库表,所述数据库表包括:大任务表最大值id和子任务id。可选的,处理单元402,具体用于调用超文本传输协议接口查询执行任务队列的数据总量,如所述数据总量超过设定阈值,则等待一设定时间后,调用所述数据接口获取所述大任务的数据。可选的,处理单元402,具体用于提取所述任务执行接口的最后访问时间,计算最后访问时间与当前时间的差值,并提取所述最后访问时间与当前时间之间的访问数量,根据所述访问数量和所述差值计算单位时间访问数量,如所述单位时间访问数量小于用户设定的访问数量阈值时,将调用所述执行客户端的任务执行接口对所述子任务执行。需要说明的是,上述单元的所执行的操作或步骤的具体实现方式可以参见如图2或如图3所示实施例中的描述,这里不再赘述。本发明实施例提供了一种计算机可读存储介质,其中,所述计算机可读存储介质存储计算机程序,其中,所述计算机程序被处理器执行时实现如本发明如图2或图3所示方法中所描述的部分或全部步骤。图5示出了适于用来实现本发明实施方式的示例性计算机系统/服务器50的框图。图5显示的计算机系统/服务器50仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。如图5所示,计算机系统/服务器50以通用计算设备的形式表现。计算机系统/服务器50的组件可以包括但不限于:一个或者多个处理器或者处理单元501,系统存储器502,连接不同系统组件(包括系统存储器502和处理单元501)的总线503。计算机系统/服务器50典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器50访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。系统存储器502可以包括易失性存储器形式的计算机系统可读介质,例如,随机存取存储器(ram)5021和/或高速缓存存储器5022。计算机系统/服务器50可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,rom5023可以用于读写不可移动的、非易失性磁介质(图5中未显示,通常称为“硬盘驱动器”)。尽管未在图5中示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如cd-rom,dvd-rom或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线503相连。系统存储器502中可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。具有一组(至少一个)程序模块5024的程序/实用工具5025,可以存储在例如系统存储器502中,且这样的程序模块5024包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块5024通常执行本发明所描述的实施例中的功能和/或方法。计算机系统/服务器50也可以与一个或多个外部设备504(如键盘、指向设备、显示器等)通信。这种通信可以通过输入/输出(i/o)接口504进行。并且,计算机系统/服务器50还可以通过网络适配器506与一个或者多个网络(例如局域网(lan),广域网(wan)和/或公共网络,例如因特网)通信。如图5所示,网络适配器506通过总线503与计算机系统/服务器50的其它模块(如处理单元501等)通信。应当明白的是,尽管图5中未示出,可以结合计算机系统/服务器50使用其它硬件和/或软件模块。处理单元501通过运行存储在系统存储器502中的计算机程序,从而执行各种功能应用以及数据处理,例如,执行用于实现上述方法实施例中的各步骤的指令;具体而言,处理器501可以执行存储器502中存储的计算机程序,且该计算机程序被执行时,下述指令被运行如图2或如图3所示的大任务的数据处理方法中的步骤以及步骤的细化方案。应当注意,尽管在上文详细描述中提及了设备的若干装置或子装置,但是这种划分仅仅并非强制性的。实际上,根据本发明的实施方式,上文描述的两个或更多装置的特征和功能可以在一个装置中具体化。反之,上文描述的一个装置的特征和功能可以进一步划分为由多个装置来具体化。此外,尽管在附图中以特定顺序描述了本发明方法的操作,但是,这并非要求或者暗示必须按照该特定顺序来执行这些操作,或是必须执行全部所示的操作才能实现期望的结果。附加地或备选地,可以省略某些步骤,将多个步骤合并为一个步骤执行,和/或将一个步骤分解为多个步骤执行。虽然已经参考若干具体实施方式描述了本发明的精神和原理,但是应该理解,本发明并不限于所公开的具体实施方式,对各方面的划分也不意味着这些方面中的特征不能组合以进行受益,这种划分仅是为了表述的方便。本发明旨在涵盖所附权利要求的精神和范围内所包括的各种修改和等同布置。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1