本发明涉及互联网技术领域,尤其涉及一种数据处理的方法和装置。
背景技术:
在实际应用中,常常需要对采集到的原始数据进行分析处理,才能便于后续的使用。在现有技术中,往往需要经过多个不同功能的处理单元按照时间顺序依次进行处理,才能由原始数据获得需要的数据。例如,由网站访问日志获得网站每天的访问量,需要经过两个处理单元进行处理,即处理单元A对每天产生的访问日志进行解析,处理单元B根据解析后的数据计算每天的访问量。其中,处理单元B在进行处理前,会先检测处理单元A已处理的数据的截止时间(例如已将2015年10月2日及以前的数据处理完毕),然后获取本处理单元目前已处理的数据的截止时间(例如已将2015年10月1日及以前的数据处理完毕),最后处理单元B基于处理单元A的处理结果对位于两个截止时间之间的数据进行处理。由此可知,从第二个处理单元起,每一个处理单元所要处理的数据的范围取决于上一个处理单元与当前处理单元已处理的数据的截止时间。
然而,在整个数据处理的过程中,若发现某一环节出现差错,需要对出现差错的数据进行重新处理时,现有的处理方式却存在以下问题:若在对2015年6月30日产生的数据进行处理的过程中,发现整个4月份处理后的数据结果存在问题,则需要对4月份的数据重新进行处理,但是现有的处理单元在进行处理时会根据已处理的数据的截止时间进行处理,即处理单元只会处理本处理单元当前所处理的数据的截止时间之后的数据,而不会再次处理之前的数据。因此,当发现某一环节出现差错时,需要人工对出现差错的数据进行重新处理,从而使得处理效率较低。
技术实现要素:
鉴于上述问题,本发明提出了一种数据处理的方法和装置,能够解决现有技术中在处理数据的过程中,当某一环节出现问题时,需要人工对产 生问题的数据重新处理,从而使得数据处理效率较低的问题。
一方面,本发明提供了一种数据处理的方法,所述方法包括:
获取当前任务队列中最新任务对应的依赖任务,其中,所述依赖任务位于所述当前任务队列对应的依赖任务队列中,所述当前任务队列中的任务的数据来源依赖于所述依赖任务队列中对应任务的数据处理结果;
从所述依赖任务队列中查找目标任务,所述目标任务为排列在所述依赖任务之后的已完成的任务;
在所述当前任务队列中生成所述目标任务对应的任务。
另一方面,本发明提供了一种数据处理的装置,所述装置包括:
获取单元,用于获取当前任务队列中最新任务对应的依赖任务,其中,所述依赖任务位于所述当前任务队列对应的依赖任务队列中,所述当前任务队列中的任务的数据来源依赖于所述依赖任务队列中对应任务的数据处理结果;
查找单元,用于从所述依赖任务队列中查找目标任务,所述目标任务为排列在所述依赖任务之后的已完成的任务;
生成单元,用于在所述当前任务队列中生成所述查找单元查找到的所述目标任务对应的任务。
借由上述技术方案,本发明提供的数据处理的方法和装置,能够在数据处理的过程中,会创建不同功能的任务队列,并通过生成任务和处理任务的方式对原始数据进行处理获得需要的数据。在生成任务的过程中,会先获取当前任务队列中最新任务对应的依赖任务,然后从当前任务队列对应的依赖任务队列中查找到位于依赖任务之后且已完成的任务,最后在当前任务队列中生成与查找的任务相对应的任务。由此可知,终端只需处理每个任务队列中的各个任务即可,无需判断所要处理的数据是否是新产生的、本任务队列未处理过的数据(即无需判断数据的产生时间),从而当某一环节出现差错时,只需为第一个任务队列添加新的任务即可,而之后的任务队列会基于第一个任务队列中的任务自动生成相应的任务,进而对有问题的数据可自动进行重新处理,无需人工参与,由此提高了数据处理的效率。
上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:
图1示出了本发明实施例提供的一种数据处理的方法的流程图;
图2示出了本发明实施例提供的一种数据处理的装置的组成框图;
图3示出了本发明实施例提供的另一种数据处理的装置的组成框图。
具体实施方式
下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。
本发明实施例提供了一种数据处理的方法,如图1所示,该方法包括:
101、获取当前任务队列中最新任务对应的依赖任务。
其中,依赖任务位于当前任务队列对应的依赖任务队列中,当前任务队列中的任务的数据来源依赖于依赖任务队列中对应任务的数据处理结果。例如,当前任务队列的功能为基于解析后的访问日志计算每天的用户点击量,当前任务队列对应的依赖任务队列为对每天产生的访问日志进行解析,若当前任务队列中的最新任务为计算2015年10月28日的用户点击量,则当前任务队列中最新任务对应的依赖任务为对2015年10月28日产生的访问日志进行解析。
需要说明的是,任务队列中的各个任务是按照一定顺序进行排列的,因此,本发明实施例中的最新任务是指排列在任务队列中最后一位的任务。在实际应用中,常常通过给任务进行编号的形式来区分各个任务以及各个 任务之间的先后顺序。例如,当前任务队列中有5个任务,根据先后顺序,这5个任务的任务编号分别为1、2、3、4和5,其中任务编号为5的任务为当前队列中的最新任务。
在实际应用中,终端会创建不同功能的任务队列,任务队列中包含至少一个任务。其中,同一个任务队列中的不同任务具有相同的功能,只是每个任务所要处理的数据不同。例如,某任务队列的功能为基于解析后的访问日志计算每天的访问量,则该任务队列中的第一个任务可以为计算2015年1月1日的访问量,第二个任务为计算2015年1月2日的访问量,第三个任务为计算2015年1月3日的访问量。
此外,任务的具体代码可以为Task{Id=1;Time=”2015-09-01”;Status=0;DependTaskId=1},其中,Id为该任务的任务编号,Time为该任务所要处理的数据的时间(即要处理2015年9月1日的数据),Status为该任务的任务状态(“0”一般表示未处理状态),DependTaskId为该任务对应的依赖任务的任务编号。
102、从依赖任务队列中查找目标任务。
其中,目标任务为排列在依赖任务之后的已完成的任务。例如,依赖任务队列中有10个任务,其中,前8个任务已完成,且依赖任务是第3个任务,则第4个任务至第8个任务之间的任务(包括第4个任务和第8个任务)均为目标任务。
在实际应用中,任务队列中的各个任务均可携带任务编号以及用于指示任务是否完成的任务状态标识。因此,可根据任务编号以及任务状态标识查找目标任务。
103、在当前任务队列中生成目标任务对应的任务。
由于查找到的目标任务为排列在当前任务队列中最新任务对应的依赖任务之后的已完成的任务,所以说明位于依赖任务之后的任务中存在已完成的任务,需要基于处理后的数据结果由当前任务队列进行下一步处理,而当前任务队列中还未建立相应的任务,因此需要在当前任务队列中生成目标任务对应的任务。
示例性的,当前任务队列中有10个任务,当前任务队列对应的依赖任 务队列中有20个任务,其中当前任务队列中的第10个任务对应的依赖任务为依赖任务队列中的第10个任务,依赖任务队列中的前15个任务已完成,则需要在当前任务队列中建立与依赖任务队列中的第11个任务至第15个任务相对应的新任务,以便基于依赖任务队列的数据处理结果对数据进行下一步处理。
本发明实施例提供的数据处理的方法,能够在数据处理的过程中,会创建不同功能的任务队列,并通过生成任务和处理任务的方式对原始数据进行处理获得需要的数据。在生成任务的过程中,会先获取当前任务队列中最新任务对应的依赖任务,然后从当前任务队列对应的依赖任务队列中查找到位于依赖任务之后且已完成的任务,最后在当前任务队列中生成与查找的任务相对应的任务。由此可知,终端只需处理每个任务队列中的各个任务即可,无需判断所要处理的数据是否是新产生的、本任务队列未处理过的数据(即无需判断数据的产生时间),从而当某一环节出现差错时,只需为第一个任务队列添加新的任务即可,而之后的任务队列会基于第一个任务队列中的任务自动生成相应的任务,进而对有问题的数据可自动进行重新处理,无需人工参与,由此提高了数据处理的效率。
进一步的,在上述实施例中提及,任务队列中的每个任务均可携带任务编号,因此上述步骤101的具体实现方式可以为:
确定当前任务队列中最新任务对应的依赖任务的任务编号,并根据该任务编号,从当前任务队列对应的依赖任务队列中查找最新任务对应的依赖任务。
在实际应用中,每个任务的任务编号往往和与其对应的依赖任务的任务编号相同,因此在确定当前任务队列中最新任务对应的依赖任务的任务编号时,可以先确定当前任务队列中最新任务的任务编号,然后将该任务编号确定为依赖任务的任务编号。
此外,每个任务的任务编号也可以和与其对应的依赖任务的任务编号不同。在这种情况下,每个任务除了携带自身的任务编号外,还可以携带对应的依赖任务的任务编号。由此可知,在确定当前任务队列中最新任务对应的依赖任务的任务编号时,可以直接从最新任务携带的任务编号中获 取对应依赖任务的任务编号。
相应的,上述步骤102的具体实现方式可以为:
终端先从依赖任务队列中查找已完成的任务的最大任务编号,然后从依赖任务队列中查找任务编号大于依赖任务的任务编号,且小于等于最大任务编号的任务,最后将查找到的任务编号大于依赖任务的任务编号,且小于等于最大任务编号的任务确定为目标任务。
其中,在确定依赖任务队列中的任务是否已经完成时,可以根据当前任务携带的任务状态标识来判断当前任务是否已完成。其中,任务状态标识为已处理标识或未处理标识。也就是说,在判断当前任务是否已完成时,可以判断当前任务是否携带已处理标识,若当前任务携带已处理标识,则当前任务已完成,若当前任务携带未处理标识,则当前任务还未处理。
进一步的,为了便于后续快速确定任务队列中未处理的任务,并对未处理的任务进行处理,在当前任务队列中生成新的任务后,可以为新的任务添加未处理标识,即为当前任务队列中生成的目标任务对应的任务添加未处理标识。
进一步的,由于创建任务的目的是为了处理任务,所以终端还会实时或者定时检测任务队列中是否含有未处理的任务,并对未处理的任务进行处理。
具体的,终端会先获取当前任务队列中未处理的任务,然后对未处理的任务进行处理,最后为处理后的任务添加已处理标识。
需要说明的是,在对各个未处理的任务进行处理时,可以同时处理,也可以按照任务编号的顺序,依次对相应任务编号的任务进行处理,在此不做限定。
进一步的,由于在当前任务队列中创建新的任务后,当前任务队列对应的依赖任务队列中已完成的任务就没有实际意义了,但是这些任务却占用存储空间,所以为了提高存储空间的利用率,可以将当前任务队列对应的依赖任务队列中的已完成的任务删除。
进一步的,若当前任务队列没有对应的依赖任务队列,即若当前任务队列为第一个任务队列,则可以根据预设时间间隔,自动生成新的任务。
示例性的,第一个任务队列的功能为对每个小时产生的访问日志进行解析,则每隔一个小时,第一个任务队列中就会自动产生一个新的任务。例如,第3个任务为对2015年5月2日10:00-11:00产生的访问日志进行解析,则一小时后,会自动生成第4个任务,即对2015年5月2日11:00-12:00产生的访问日志进行解析。
进一步的,依据上述方法实施例,本发明的另一个实施例还提供了一种数据处理的装置,如图2所示,该装置包括:获取单元21、查找单元22和生成单元23。其中,
获取单元21,用于获取当前任务队列中最新任务对应的依赖任务,其中,依赖任务位于当前任务队列对应的依赖任务队列中,当前任务队列中的任务的数据来源依赖于依赖任务队列中对应任务的数据处理结果;
查找单元22,用于从依赖任务队列中查找目标任务,目标任务为排列在依赖任务之后的已完成的任务;
生成单元23,用于在当前任务队列中生成查找单元22查找到的目标任务对应的任务。
本发明实施例提供的数据处理的装置,能够在数据处理的过程中,会创建不同功能的任务队列,并通过生成任务和处理任务的方式对原始数据进行处理获得需要的数据。在生成任务的过程中,会先获取当前任务队列中最新任务对应的依赖任务,然后从当前任务队列对应的依赖任务队列中查找到位于依赖任务之后且已完成的任务,最后在当前任务队列中生成与查找的任务相对应的任务。由此可知,终端只需处理每个任务队列中的各个任务即可,无需判断所要处理的数据是否是新产生的、本任务队列未处理过的数据(即无需判断数据的产生时间),从而当某一环节出现差错时,只需为第一个任务队列添加新的任务即可,而之后的任务队列会基于第一个任务队列中的任务自动生成相应的任务,进而对有问题的数据可自动进行重新处理,无需人工参与,由此提高了数据处理的效率。
进一步的,如图3所示,获取单元21,包括:
确定模块211,用于确定当前任务队列中最新任务对应的依赖任务的任务编号;
查找模块212,用于根据确定模块211确定的任务编号,从当前任务队列对应的依赖任务队列中查找最新任务对应的依赖任务;
查找单元22,包括:
查找模块221,用于从依赖任务队列中查找已完成的任务的最大任务编号;
查找模块221,还用于从依赖任务队列中查找任务编号大于依赖任务的任务编号,且小于等于最大任务编号的任务;
确定模块222,用于将查找模块221查找到的任务编号大于依赖任务的任务编号,且小于等于最大任务编号的任务确定为目标任务。
进一步的,如图3所示,该装置还包括:
添加单元24,用于在生成单元23在当前任务队列中生成目标任务对应的任务之后,为当前任务队列中生成的目标任务对应的任务添加未处理标识。
进一步的,获取单元21,还用于获取当前任务队列中未处理的任务;
如图3所示,该装置还包括:
处理单元25,用于对获取单元21获取的未处理的任务进行处理;
添加单元24,还用于为处理单元25处理后的任务添加已处理标识。
进一步的,如图3所示,该装置还包括:
删除单元26,用于在生成单元23在当前任务队列中生成目标任务对应的任务之后,将当前任务队列对应的依赖任务队列中的已完成的任务删除。
进一步的,生成单元23,还用于当当前任务队列没有对应的依赖任务队列时,根据预设时间间隔,在当前任务队列中自动生成新的任务。
该装置实施例与前述方法实施例对应,为便于阅读,本装置实施例不再对前述方法实施例中的细节内容进行逐一赘述,但应当明确,本实施例中的装置能够对应实现前述方法实施例中的全部内容。
所述数据处理的装置包括处理器和存储器,上述获取单元、查找单元、和生成单元等均作为程序单元存储在存储器中,由处理器执行存储在存储器中的上述程序单元来实现相应的功能。
处理器中包含内核,由内核去存储器中调取相应的程序单元。内核可 以设置一个或以上,通过调整内核参数来提高数据处理的效率。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM),存储器包括至少一个存储芯片。
本申请还提供了一种计算机程序产品,当在数据处理设备上执行时,适于执行初始化有如下方法步骤的程序代码:
获取当前任务队列中最新任务对应的依赖任务,其中,所述依赖任务位于所述当前任务队列对应的依赖任务队列中,所述当前任务队列中的任务的数据来源依赖于所述依赖任务队列中对应任务的数据处理结果;
从所述依赖任务队列中查找目标任务,所述目标任务为排列在所述依赖任务之后的已完成的任务;
在所述当前任务队列中生成所述目标任务对应的任务。
本领域内的技术人员应明白,本申请的实施例可提供为方法、系统、或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本申请是参照根据本申请实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个 流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
存储器可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。存储器是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
以上仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。