具体实施方式
本申请的实施例提出一种新的按序进行并行数据处理的方法,将待处理的乱序记录在至少两个分组中分别进行第一次并行排序,每个分组的第一次并行排序结果分发给对应于每个加工处理功能模块的队列,再将对应于每个加工处理功能模块的队列中的记录进行第二次并行排序,这样每个加工处理功能模块都能够接收到按照顺序排列的记录,从而使得记录的排序并行完成,避免了单点故障,并且能够通过增加分组来提供并行扩展性,以解决现有技术存在的问题。
本申请的实施例中,分组可以看作由部分记录组成的集合,所有分组的并集包括全部的记录。每个分组中的乱序记录可以存放在一个文件、一块缓冲区、或一个表等存储位置;排序后的记录可以直接分发到队列,也可以存放在任一种存储位置,再从该存储位置读取后分发;不做限定。
本申请的实施例应用在数据来源为乱序记录,而需要按照顺序进行运算处理的数据处理过程之前、或者是需要按照顺序进行运算处理的数据处理过程中的某个步骤之前。上述数据处理过程或上述数据处理过程中的步骤由并行的N(N为大于1的自然数)个加工处理功能模块来进行;换言之,本申请实施例中的加工处理功能模块可以是一个数据处理过程,也可以是数据处理过程中的一个步骤或至少两个连续的步骤。每个加工处理功能模块的具体运行方式可根据实际应用场景参照现有技术实现,不再赘述。
本申请的实施例可以运行在任何具有计算和存储能力的设备上,例如可以是手机、平板电脑、PC(Personal Computer,个人电脑)、笔记本、服务器、虚拟机等物理设备或逻辑设备;也可以由两个或两个以上分担不同职责的物理或逻辑设备、相互协同来实现本申请实施例中的各项功能。
另外,本申请的实施例可以作为生成乱序记录的软件功能模块的一部分,用来将所生成的乱序记录排序后再输出;也可以作为对乱序记录进行数据处理的软件功能模块的一部分,用来将输入的乱序记录排序后再进行运算处理;还可以作为一个单独的软件功能模块,运行在负责处理排序后记录的加工处理功能模块之前,用来进行乱序记录的排序。
本申请的实施例中,按序进行并行数据处理的方法的流程如图2所示。为描述方便,以下以本申请的实施例作为一个单独的软件功能模块(称之为排序功能模块)运行的情况为例进行说明,本领域技术人员可以得知本申请实施例作为生成乱序记录的软件功能模块的一部分、或作为对乱序记录进行数据处理的软件功能模块的一部分时的实现方式。
步骤210,以M(M为大于1的自然数)个分组接收乱序的记录,对每个分组中的记录分别进行排序。
对乱序记录来源于已知存储位置的数据库或文件的情形,可以由排序功能模块读取乱序记录并分配到M个分组中。
在数据的多步骤处理的应用场景中,乱序记录可以是在加工处理功能模块所在步骤之前的其他数据处理步骤的输出。以下将加工处理功能模块之前进行数据处理并输出乱序记录的功能模块称之为前置加工功能模块。前置加工功能模块可以是一个,也可以是并行的两个及以上。乱序的记录可以由每个前置加工功能模块将输出的乱序记录分配给M个分组;也可以由排序功能模块从每个前置加工功能模块获取记录后,自行分配到M个分组中。
在排序功能模块或前置加工功能模块进行乱序记录的分配时,可以采用任何一种预定排序分配算法,如随机算法、各种现有技术中的负载均衡算法等等。
排序功能模块对每个分组中的记录分别进行排序。根据实际应用场景中所运行业务的具体要求,排序可以根据各种从记录中提取的信息、或根据记录可以获得的信息来进行,不做限定。例如,排序可以是根据时间顺序来排序,也可以是根据业务过程的执行流程来排序。再如,在根据时间进行排序时,可以根据记录在业务系统中最初生成时(通常是启动某项业务过程时)的时间来排序,也可以是根据记录在某个业务的某次处理过程中被标记的时间戳来排序。
需要说明的是,本申请实施例中的数据处理可以是静态数据处理,也可以是实时数据处理(流处理)。排序功能模块所采用的具体排序算法可以根据应用场景的需求来选择,例如可以是各种现有技术中的排序算法,不做限定。
在对M个分组中的记录分别进行排序后,将生成M组记录,每组记录都按照先后顺序排列。
步骤220,将每个分组排序后的记录分发至该分组对应的N个队列;每个分组对应于相同的N个队列;每个分组的N个队列分别对应于N个加工处理功能模块且每个加工处理功能模块对应M个队列。
预置M×N个用来存放记录的队列,每个队列分别对应于一个不同的分组和一个不同的加工处理功能模块。这样,任一分组有N个队列,这N个队列分别对应于N个加工处理功能模块;任一加工处理功能模块有M个队列,这M个队列分别对应于M个分组。
对每个分组,排序功能模块将该分组排序后的记录按照相同的预定处理分配算法输出到该分组的N个队列。所采用的预定处理分配算法能够使需要按序处理的记录分配到对应于同一个加工处理功能模块的队列。
实际应用中,如果所有的记录都必须逐个按照某种顺序来进行处理,则往往不能在这样的数据处理中采用并行方式,因为当两个需要顺序处理的记录分配给两个不同的加工处理功能模块后,两个独立运行的加工处理功能模块通常不能保证对这两个记录的处理时序;因此,并行处理环境中通常满足一定条件的记录需要按照顺序进行处理,例如,对同一个账户的各次操作要按照操作时序来处理,而对不同账户的操作没有排序处理的必要。预定处理分配算法即是用来将需要按序处理的记录分配到同一个加工处理功能模块上,一个加工处理功能模块能够确保对接收的记录按照顺序进行处理。
具体的预定处理分配算法可以参照现有技术中在按序并行处理时将记录分配给各个加工处理功能模块的算法实现,不再赘述。
步骤230,将每个加工处理功能模块对应的M个队列中的记录,按照顺序输出至该加工处理功能模块。
排序功能模块将M个分组中排序后的记录分别分发到各个分组的N个队列中后,M×N个队列的每个队列中的记录都是按序排列的。而每个加工处理功能模块要对其对应的M个队列中的记录做运算处理,因此,排序功能模块还需要将每个加工处理功能模块对应的M个队列中的记录,按照顺序输出给对应的加工处理功能模块。相当于以每个处理功能模块为一路,进行第二次并行排序,第二次并行排序后的N个按序记录序列分别对应于N个加工处理功能模块。
将M个队列中的记录按序输出所采用的方式可以根据实际应用场景中的排序功能模块、队列的具体实现来确定,本申请的实施例不做限定。
例如,可以另外预置分别对应于每个加工处理功能模块的N个缓存区,在每个缓存区中用来按序存放对每个加工处理功能模块的M个队列中记录进行整体排序后的记录,再将缓存区的记录输出到对应的加工处理功能模块。
再如,在M×N个队列采用先进先出队列的流处理应用场景中,可以在每个加工处理功能模块对应的M个队列内位于队列头的M个记录中,将顺序最先的记录输出至所述加工处理功能模块。对先进先出队列,每个队列顺序最先的记录是位于队列头的记录,如果M个队列每个都不为空,每次都取M个队列头的记录中顺序最先的记录,则能够将M个队列中所有记录按照顺序取出;如果有的队列为空,则需要等待有记录分发到原来为空的队列中,才能确定M队列中顺序最先的究竟是哪个记录。作为一种具体的实现方式,对每个加工处理功能模块对应的M个队列,当每个队列的队列头记录均不为空时,如果某个队列的队列头记录的顺序先于其他(M-1)个队列的队列头记录时,弹出该队列的队列头记录;否则等待空队列的输入;换言之,每个队列比较自己队列的队列头记录与其他(M-1)个队列的队列头记录,只有自己队列的队列头记录的顺序最为优先时,才弹出其队列头记录给对应的加工处理功能模块;如果其他(M-1)个队列中有队列为空,则等待空队列有输入记录后再进行比较;这样,M个队列中的记录将按照顺序到达加工处理功能模块。
可见,本申请的实施例中,将乱序记录在M个分组中并行排序后的结果分发给分别对应于N个加工处理功能模块的N个队列,再将对应于每个加工处理功能模块的队列中的记录进行第二次排序后输出到该加工处理功能模块,使每个加工处理功能模块都收到按照顺序排列的记录,从而实现了并行排序,在排序速度较慢时易于通过增加分组来加快处理速度,提高了数据处理过程的扩展性,并且避免了单点故障。
在本申请的第一个应用示例中,2个前置加工功能模块将流处理中的乱序记录输入排序功能模块,由排序功能模块将乱序记录排序后的记录分发给3个加工处理功能模块,其流程如图3所示。
2个前置加工功能模块将其输出乱序记录分别写入排序功能模块的2个分组中,设第一分组收到的记录的标识分别为A2、A3、B3、C1和B2,第二分组收到的记录的标识分别为B1、C3、A1和C2。
排序功能模块对每个分组中的记录分别进行排序,设按照生成时序排列,第一分组排序后的记录由先到后为:A2、A3、C1、B2和B3,第二分组排序后的记录由先到后为:A1、B1、C2和C3。
排序功能模块预设有6个先进先出队列,每个队列对应于2个分组中1个以及3个加工处理功能模块中的1个。每个分组有3个队列,分别对应于3个加工处理功能模块;每个加工处理功能模块有2个队列,分别对应于2个分组。
本应用示例中,标识的首位字母相同的记录需要由加工处理功能模块按照先后顺序来处理,因此排序功能模块按照记录标识的第一位字母,将每个分组排序后的记录分发到该分组的3个队列中、与处理该标识的加工处理功能模块对应的队列中。设标识的首位字母为A、B、C的记录分别由第一加工处理功能模块、第二加工处理功能模块和第三加工处理功能模块负责处理,则:对应于第一加工处理功能模块的两个队列中,由第一分组分发的队列中顺序写入记录A2和A3,由第二分组分发的队列中写入记录A1;对应于第二加工处理功能模块的两个队列中,由第一分组分发的队列中顺序写入记录B2和B3,由第二分组分发的队列中写入记录B1;对应于第三加工处理功能模块的两个队列中,由第一分组分发的队列中写入记录C1,由第二分组分发的队列中顺序写入记录C2和C3。
对应于每个加工处理功能模块的2个先进先出队列,每个队列比较本队列的队列头记录和另一个队列的队列头记录,当另一个队列不为空时,如果本队列的队列头记录顺序优先,则弹出本队列的队列头记录给对应的加工处理功能模块,否则等待另一个队列的队列头记录弹出后再行比较。当另一个队列为空时,等待另一个队列有输入记录后再行比较。这样,每个加工处理功能模块即可按照时序收到由其负责处理的记录。
在本申请的第二个应用示例中,数据处理过程采用3个步骤进行。其中,第1个步骤由3个第一加工模块并行完成一部分数据加工,第2个步骤由2个第二加工模块并行完成一部分数据加工,第3个步骤由2个第三加工模块并行完成剩余的数据加工。第2个步骤和第3个步骤都需要按照顺序对记录进行运算处理。本应用示例的流程如图4所示。
3个第一加工模块(即第2个处理步骤的前置加工功能模块)将并行处理后的乱序记录分别输入到第二排序模块(即第2个处理步骤的排序功能模块)的3个分组。第二排序模块预设6个先进先出队列,分别对应于3个分组中的一个和2个第二加工模块(第2个处理步骤的加工处理功能模块)中的一个。第二排序模块将每个分组中排序后的记录分别分发到对应于分组和第二加工模块的队列,然后将对应于每个第二加工模块的3个队列中的记录按照顺序输出到对应的第二加工模块。这样,第2个步骤即可按照顺序对记录进行运算处理。
以2个第二加工模块为第3个处理步骤的前置加工功能模块,以2个第三加工模块为第3个处理步骤的加工处理功能模块,采用2个分组和预设的4个先进先出队列,第三排序模块(即第3个处理步骤的排序功能模块)可以将排序后的记录输出给第三加工模块处理,从而完成本应用示例中的数据处理过程。
与上述流程实现对应,本申请的实施例还提供了一种按序进行并行数据处理的装置。该装置可以通过软件实现,也可以通过硬件或者软硬件结合的方式实现。以软件实现为例,作为逻辑意义上的装置,是通过所在设备的CPU(Central Process Unit,中央处理器)将对应的计算机程序指令读取到内存中运行形成的。从硬件层面而言,除了图5所示的CPU、内存以及非易失性存储器之外,按序进行并行数据处理的装置所在的设备通常还包括用于进行无线信号收发的芯片等其他硬件,和/或用于实现网络通信功能的板卡等其他硬件。
图6所示为本申请实施例提供的一种按序进行并行数据处理的装置,所述并行数据处理由N个加工处理功能模块完成,N为大于1的自然数,所述装置包括分组排序单元、分组分发单元和队列排序单元,其中:分组排序单元用于以M个分组接收乱序的记录,对每个分组中的记录分别进行排序;M为大于1的自然数;分组分发单元用于将每个分组排序后的记录分发至所述分组对应的N个队列;每个分组对应于相同的N个队列;每个分组的N个队列分别对应于N个加工处理功能模块且每个加工处理功能模块对应M个队列;队列排序单元用于将每个加工处理功能模块对应的M个队列中的记录,按照顺序输出至所述加工处理功能模块。
一种实现方式中,所述队列为先进先出队列;所述队列排序单元具体用于:在每个加工处理功能模块对应的M个队列内位于队列头的M个记录均不为空时,将所述M个记录中顺序最先的记录输出至所述加工处理功能模块。
上述实现方式中,所述队列排序单元可以具体用于:对每个加工处理功能模块对应的M个队列,当每个队列的队列头记录均不为空时,如果某个队列的队列头记录的顺序先于其他(M-1)个队列的队列头记录时,弹出所述队列的队列头记录;否则等待空队列的输入。
可选的,所述乱序的记录由并行的至少两个前置加工功能模块生成;所述分组排序单元具体用于:接收每个前置加工功能模块按照预定排序分配算法输出到M个分组的乱序记录,对每个分组中的记录分别进行排序。
可选的,所述分组分发单元具体用于:将每个分组排序后的记录根据相同的预定处理分配算法分发至所述分组的N个队列,所述预定处理分配算法能够使需要按序处理的记录分配到对应于同一个加工处理功能模块的队列。
以上所述仅为本申请的较佳实施例而已,并不用以限制本申请,凡在本申请的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本申请保护的范围之内。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的功能模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
本领域技术人员应明白,本申请的实施例可提供为方法、系统或计算机程序产品。因此,本申请可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本申请可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。