《数据驱动的并行排序系统和方法.pdf》由会员分享,可在线阅读,更多相关《数据驱动的并行排序系统和方法.pdf(20页珍藏版)》请在专利查询网上搜索。
1、10申请公布号CN104123304A43申请公布日20141029CN104123304A21申请号201310154333522申请日20130428G06F17/3020060171申请人国际商业机器公司地址美国纽约72发明人韦东杰杨新颖刘尔浩布莱恩康菲尔德74专利代理机构中国国际贸易促进委员会专利商标事务所11038代理人付建军54发明名称数据驱动的并行排序系统和方法57摘要本发明涉及数据驱动的并行排序系统和方法。提供了一种数据驱动的并行排序方法,包括循环地将输入的数据记录逐个地分配给N(N1)个分区,每个分区对应于所述并行排序中并行的一个排序处理并且分配有一个用于存储所分配的数据记录。
2、的内存块,所述内存块能够存储M(M0)个数据记录;在各个分区中并行地对各自的内存块中的当前数据记录进行排序;响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块;以及响应于所有数据记录完成分配,将各内存块中的已排序数据记录写入大容量存储器,并对大容量存储器中的所有有序数据块应用合并排序。51INTCL权利要求书2页说明书10页附图7页19中华人民共和国国家知识产权局12发明专利申请权利要求书2页说明书10页附图7页10申请公布号CN104123304ACN104123304A1/2页21一种数据驱动的并行。
3、排序方法,该方法包括循环地将输入的数据记录逐个地分配给N个分区,每个分区对应于所述并行排序中并行的一个排序处理并且分配有一个用于存储所分配的数据记录的内存块,所述内存块能够存储M个数据记录,其中N是大于1的整数且M是正整数;在各个分区中并行地对各自的内存块中的当前数据记录进行排序;响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块,其中表示M/N的商向下取整;以及响应于所有数据记录完成分配,将各内存块中的已排序数据记录写入大容量存储器,并对大容量存储器中的所有有序数据块应用合并排序。2根据权利要求1所述。
4、的方法,其中,输入的数据记录是流式数据。3根据权利要求1所述的方法,其中,设定I为分区的编号,1IN,并且其中,响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区包括响应于分配了第K轮的数据记录,控制第IKMODN分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,其中K是正整数,并且KMODN表示K模N后的余数。4根据权利要求3所述的方法,其中,对于第1个至第N1个分区,首次写入大容量存储器的有序数据块的大小小于M个数据记录;并且对于第N个分区,首次写入大容量存储器的有序数据块的大小小于或等于M个数据记录。5根据权利要求3所述的方法,其中,当K小于或等于N时,写。
5、入大容量存储器的有序数据块的大小为K个数据记录。6根据权利要求3所述的方法,其中,当K大于N并且输入的数据记录充足时,写入大容量存储器的有序数据块的大小为M个数据记录。7根据权利要求1所述的方法,其中,不把各个分区中的最后一个有序数据块写入大容量存储器。8根据权利要求1所述的方法,其中,与各个分区对应的排序处理中的至少两个竞争同一处理器资源。9根据权利要求1所述的方法,其中,来自各个分区的有序数据块的所述写入竞争同一输入输出资源。10根据权利要求8或9所述的方法,其中,对于所述N个分区,首次写入大容量存储器的有序数据块的大小不等,从而使各个分区对所述资源的竞争产生了时间差。11一种数据驱动的并。
6、行排序系统,该系统包括数据分配装置,被配置为循环地将输入的数据记录逐个地分配给N个分区,每个分区对应于所述并行排序中并行的一个排序处理并且分配有一个用于存储所分配的数据记录的内存块,所述内存块能够存储M个数据记录,其中N是大于1的整数且M是正整数;分区内排序装置,被配置为在各个分区中并行地对各自的内存块中的当前数据记录进权利要求书CN104123304A2/2页3行排序;受控数据转储装置,被配置为响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块,其中表示M/N的商向下取整;以及合并排序装置,被配置为响。
7、应于所有数据记录完成分配,将各内存块中的已排序数据记录写入大容量存储器,并对大容量存储器中的所有有序数据块应用合并排序。12根据权利要求11所述的系统,其中,输入的数据记录是流式数据。13根据权利要求11所述的系统,其中,设定I为分区的编号,1IN,并且其中,响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区包括响应于分配了第K轮的数据记录,控制第IKMODN分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,其中K是正整数,并且KMODN表示K模N后的余数。14根据权利要求13所述的系统,其中,对于第1个至第N1个分区,首次写入大容量存储器的有序数据块的大小小于。
8、M个数据记录;并且对于第N个分区,首次写入大容量存储器的有序数据块的大小小于或等于M个数据记录。15根据权利要求13所述的系统,其中,当K小于或等于N时,写入大容量存储器的有序数据块的大小为K个数据记录。16根据权利要求13所述的系统,其中,当K大于N并且输入的数据记录充足时,写入大容量存储器的有序数据块的大小为M个数据记录。17根据权利要求11所述的系统,其中,不把各个分区中的最后一个有序数据块写入大容量存储器。18根据权利要求11所述的系统,其中,与各个分区对应的排序处理中的至少两个竞争同一处理器资源。19根据权利要求11所述的系统,其中,来自各个分区的有序数据块的所述写入竞争同一输入输出。
9、资源。20根据权利要求18或19所述的系统,其中,对于所述N个分区,首次写入大容量存储器的有序数据块的大小不等,从而使各个分区对所述资源的竞争产生了时间差。权利要求书CN104123304A1/10页4数据驱动的并行排序系统和方法技术领域0001本发明涉及并行计算领域,更具体地说,本发明涉及一种数据驱动的并行排序系统和方法。背景技术0002并行排序算法是计算机并行计算能力大大发展之后,为了提高排序效率而提出的算法。并行排序是数据库、数据抽取转换装载(EXTRACTIONTRANSFORMATIONLOADING,ETL)等领域中广泛使用的技术。并行排序算法是采用分治法(DIVIDEANDCON。
10、QUER)的一个非常典型的应用,其原理是把待排序序列分为若干个子序列,使每个子序列有序,然后将已有序的子序列合并,得到完全有序的序列。0003在并行排序中,数据被分配到多个分区中,每个分区对应于一个排序处理,该排序处理例如是一个进程或者线程。对于每个分区,排序处理对分配给该分区的数据进行排序,各个分区中的这种排序是并行进行的,然后对所有分区中的有序数据应用合并排序,从而完成了对所有数据的排序。所述合并排序可以是任何公知的合并排序算法,只要其能够实现把多个有序序列合并成一个有序序列即可。0004并行排序现在常常应用于数据仓库中,例如可以对来自数据仓库中的多个数据库的输入的流式的数据进行排序。该输。
11、入的流式的数据由数据记录构成,可以依据数据记录中的特定字段对数据记录进行排序。在这种应用中,数据量往往非常大,没有办法在内存中一次容纳所有的数据记录以供排序。0005图2是示出了一种现有技术的用于数据量大的情况的并行排序方法的流程图。首先,在数据分配步骤(210)中,连续输入的流式的数据被均匀地分配到多个分区中,每个分区分配有一个特定大小的内存块,该内存块用于存储所分配的数据,以便进行排序。所述数据分配是持续进行的,当数据来到时,就进行分配(除非被阻塞),并且该数据分配处理独立于与各个分区对应的排序处理。在分区内排序步骤(220)中,在每个分区内,通过与该分区对应的排序处理对自身的内存块中的数。
12、据进行排序,各个分区中的排序是并行进行的。在数据转储步骤(230)中,每当一个分区中的内存块已满并且该内存块中的数据已完成排序时,使得该内存块中的当前有序数据块被临时写入大容量存储器(例如,硬盘)中,并清空这个内存块。也就是说,在同一分区内,通过使用同一(此时已清空的)内存块继续处理接下来的输入数据,并且当排序完成时再将有序数据块临时写入硬盘。对于每个分区,循环地执行排序和转储,直至所有的数据被排序成有序数据块并被写入硬盘。在合并排序步骤(240)中,响应于所有数据记录完成分配,将各个内存块中的有序数据块写入硬盘,并对硬盘中的所有有序数据块应用合并排序。利用简单的合并排序算法,对所有分区的所有。
13、这些(在硬盘上的)有序数据块进行合并排序,将这些有序数据块合并在一起并使其中的数据保持有序,从而得到最终的有序序列。这是广泛使用的针对大数据量的并行排序方法,其中各个分区并行地执行步骤220和步骤230。0006然而,采用这种技术,由于每个分区中的排序处理都几乎在同时竞争CPU资源,从说明书CN104123304A2/10页5而会导致CPU的利用率大幅波动并且使整体吞吐量降低。0007图3是示出了利用现有技术的并行排序方法时的CPU利用率的示意图。从图3中可见,CPU的利用率的波动很大,在波峰处CPU利用率接近或达到100,这使得处理效率降低,而在波谷时CPU利用率低于20,这造成了处理能力的。
14、浪费。造成这种现象的根本原因在于数据分配器采用轮询方式将数据均匀地分配给各个分区。在一轮分配中,向每个分区分配一个数据记录。每个分区接收分配给自己的输入数据。由于一轮分配可能在非常短的时间内完成(几乎同时),这使得各个分区的排序处理几乎在同时处理这个新输入的数据记录,并且还使得每个分区几乎同时需要把有序数据块写入硬盘。也就是说,当各个分区基于新分配给自己的数据记录的驱动而对内存块中的所有数据记录进行排序时,各个分区将同时竞争使用CPU资源,这就造成了图3中的波峰的出现。另外,由于以上原因,当各个分区内的排序完成时,为了把有序数据块写入硬盘,各个分区还会同时竞争输入输出(IO)资源,同样会造成等。
15、待和延迟。这使得系统资源的使用效率低下。0008已经发现,通常,当内存块的大小较小时,并行排序的系统利用效率的低下就不那么明显。减小内存块的大小会缓解上述问题,但是具有另外的明显缺陷。当数据量非常大时,小的内存块是无益的,因为这将导致在硬盘上产生过多的数据块,从而使得合并排序处理把所有这些数据块合并在一起变得非常慢,最终这将使整个排序过程变得非常慢。因此,减小内存块的大小无法解决上述问题。发明内容0009基于以上的描述,希望提供一种能够优化系统资源(CPU资源和输入输出资源)的利用率的数据驱动的并行排序系统和方法。0010根据本发明的一个方面,提供了一种数据驱动的并行排序方法,该方法包括循环地。
16、将输入的数据记录逐个地分配给N个分区,每个分区对应于所述并行排序中并行的一个排序处理并且分配有一个用于存储所分配的数据记录的内存块,所述内存块能够存储M个数据记录,其中N是大于1的整数且M是正整数;在各个分区中并行地对各自的内存块中的当前数据记录进行排序;响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块,其中表示M/N的商向下取整;以及响应于所有数据记录完成分配,将各内存块中的已排序数据记录写入大容量存储器,并对大容量存储器中的所有有序数据块应用合并排序。0011根据本发明的另一个方面,提供了一种数据。
17、驱动的并行排序系统,该系统包括数据分配装置,被配置为循环地将输入的数据记录逐个地分配给N个分区,每个分区对应于所述并行排序中并行的一个排序处理并且分配有一个用于存储所分配的数据记录的内存块,所述内存块能够存储M个数据记录,其中N是大于1的整数且M是正整数;分区内排序装置,被配置为在各个分区中并行地对各自的内存块中的当前数据记录进行排序;受控数据转储装置,被配置为响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块,其中表示M/N的商向下取整;以及合并排序装置,被配置为响应于所说明书CN104123304A。
18、3/10页6有数据记录完成分配,将各内存块中的已排序数据记录写入大容量存储器,并对大容量存储器中的所有有序数据块应用合并排序。0012本发明通过分别控制各个分区使它们分别在计算出的定时(即使内存块并未满)把自身的内存块中的已排序数据块写入到大容量存储器中,在把不同分区的内存块中的数据块写入硬盘的定时之间以及在CPU计算强度大的时间之间产生了时间差,从而避免了各分区对各种系统资源的集中竞争,从而能够优化系统资源的利用率,以提高并行排序的性能。附图说明0013通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同。
19、的参考标号通常代表相同部件。0014图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。0015图2是示出了一种现有技术的用于数据量大的情况的并行排序方法的流程图。0016图3是示出了利用现有技术的并行排序方法时的CPU利用率的示意图。0017图4是示出了根据本发明的一个实施例的数据驱动的并行排序方法的流程图。0018图5是示出了反映根据本发明的一个实施例的数据驱动的并行排序方法的原理的示意图。0019图6示出了根据本发明的一个实施例的数据驱动的并行排序系统的方框图。0020图7和图8是示出了现有技术的并行排序对于CPU的使用情况的示意图、以及根据本发明的实施例的并行排序。
20、对于减少CPU竞争的效果的示意图。具体实施方式0021在图3中所使用的现有技术的并行排序方法中,一个数据记录一被分配到分区中,该分区就对该数据记录和该分区的内存块中已排序的其它数据记录(如果有的话)进行重新排序,并且一旦一个分区的内存块变满,就把该内存块中的数据块写入硬盘。因此,该并行排序方法是一种数据驱动的方法。0022本发明的发明人发现,造成系统资源利用率降低主要是由于以下两个原因00231、各个分区对CPU资源的使用需求的峰值几乎同时出现,该峰值出现在内存块中数据量超过某个阈值直至内存块变满时(因为内存块中的数据越多,排序处理需要进行比较的次数更多,对CPU资源的使用也就越多)。0024。
21、2、由于轮询式的数据分配,各个分区的内存块会几乎同时变满,需要几乎同时地将内存块中的数据块写入硬盘中,这就造成了对输入输出资源的集中竞争。0025基于以上两点观察,为了解决以上技术问题,本发明的发明人发现,需要在把不同分区的内存块中的数据块写入硬盘的定时之间产生时间差。0026下面将参照附图更详细地描述本公开的优选实施方式。虽然附图中显示了本公开的优选实施方式,然而应该理解,可以以各种形式实现本公开而不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的说明书CN104123304A4/10页7范围完整地传达给本领域的技术人员。0027所属技术领。
22、域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。0028可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组。
23、合。计算机可读存储介质的更具体的例子(非穷举的列表)包括具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器ROM、可擦式可编程只读存储器EPROM或闪存、光纤、便携式紧凑磁盘只读存储器CDROM、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。0029计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适。
24、的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。0030计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、电线、光缆、RF等等,或者上述的任意合适的组合。0031可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言诸如JAVA、SMALLTALK、C,还包括常规的过程式程序设计语言诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执。
25、行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络包括局域网LAN或广域网WAN连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。0032下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序。
26、指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。0033也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置INSTRUCTIONMEANS的制造品(MANUFACTURE)。说明书CN104123304A5/10页80034也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过。
27、程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。0035图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。0036如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。0037总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围。
28、总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。0038计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。0039系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它。
29、可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CDROM,DVDROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。0040具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在。
30、例如存储器28中,这样的程序模块42包括但不限于操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。0041计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适。
31、配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。说明书CN104123304A6/10页90042现在参看图4,图4是示出了根据本发明的一个实施例的数据驱动的并行排序方法的流程图。根据本发明的实施例的数据数据驱动的并行排序方法例如可应用于数据仓库的数据采集。在这种应用中,输入。
32、的数据记录是流式数据,即,数据记录的流。图4中的流程图中的处理包括如下步骤数据分配步骤410、分区内排序步骤420、受控数据转储步骤430、以及合并排序步骤440。0043下面,将详细描述图4中的本发明的数据驱动的并行排序方法中的各个步骤。0044在数据分配步骤410中,使用轮询法(ROUNDROBIN),循环地将输入的数据记录逐个地分配给这N分区(假定存在N个分区,N是大于1的整数),每个分区对应于并行排序中并行的一个排序处理并且分配有一个用于存储所分配的数据记录的内存块,所述内存块能够存储M个数据记录(M是正整数)。在一个应用于数据采集的实施例中,M可以达到百万的数量级。0045在这里,轮。
33、询法指的是循环地将到来的数据记录依次地逐个地分配给N个分区。例如,将(按到来的次序的)第1至第N个数据记录分别分配给第1至第N个分区,然后再循环地将接下来的第N1至第2N个数据记录(按到来的次序)分别分配给第1至第N个分区,依此类推。0046所述排序处理例如是一个进程或者线程,与分区的数量相等的(即N个)排序处理能够并行执行。在一个实施例中,与各个分区对应的排序处理中的至少两个竞争同一处理器资源,从而使用本发明的并行排序方法能够减少对CPU资源的竞争。在另一个实施例中,与各个分区对应的排序处理被分配在不同的处理器或处理器核上执行,从而不存在对CPU的竞争关系,但是在这种情况下,本发明的并行排序。
34、方法仍然能够有效地减少对输入输出资源的竞争强度,这将在稍后描述。0047所述数据分配是持续进行的,当数据来到时,就进行分配(除非被阻塞),并且该数据分配独立于与各个分区对应的排序处理。0048图5是示出了反映根据本发明的一个实施例的数据驱动的并行排序方法的原理的示意图。图5仅仅给出了本发明的数据驱动的并行排序方法的一个示例性实施例,给出图5中的示例是为了便于理解本发明的原理,该示例不应被解释为对本发明的保护范围的限制。在图5中,给出了N个分区,每个分区分配有一个特定大小的内存块,并且每个分区具有一个对应的排序处理器,每个排序处理器是由一个进程或者线程实现的。作为示例,图5中仅仅示出了第1、2、。
35、I、N个分区,其余分区用分区间的横向虚线表示。当然,本发明同样适用于仅有2或3个分区的情况。0049图5中的分配器是一个单独的进程或线程,专门用于处理把到来的数据分配给N个分区,并且可以向图5中的排序处理器和/或转储发起器发送信号。根据步骤410的操作,图5中的分配器将到来的数据记录按轮询方式逐个地分配给各个分区并存储在相应的内存块中。0050在分区内排序步骤420中,在各个分区中并行地对各自的内存块中的当前数据记录进行排序。所述排序可以采用各种已知的排序算法,例如,起泡排序、快速排序、二分法排序等等。再次参照图5,图5中示出的排序处理器1N(仅例示了排序处理器1、2、I和N,其它的排序处理器。
36、被省略)分别对各自的分区中的内存块中的输入的数据记录进行排序。0051如上所述,由于数据分配可以在非常短的时间内完成,与数据分配花费的时间相说明书CN104123304A7/10页10比,各个分区需要长得多的时间进行分区内排序。而由于各分区的分区内排序几乎同时进行,产生了系统资源过度竞争的问题。本发明的发明人因此对现有技术的数据转储步骤进行了如下的改进。0052在受控数据转储步骤430中,响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块,其中表示M/N的商向下取整。这里,所述数据转储指的是把内存块中的。
37、数据块(已排序)写入到大容量存储器中并且清空该内容块,所述大容量存储器是诸如磁盘或固态硬盘的存储器。在一轮分配中,向每个分区分配一个数据记录。由于每当分配了轮的数据记录时,就控制N个分区中的一个分区使之执行数据转储,对于所述N个分区,使得首次写入大容量存储器的有序数据块的大小不等,从而使各个分区对系统资源的竞争产生了时间差。0053例如,参照图5所见,图5中的每个分区中省略地示出了数据块1、2、J、,这些数据块是进行分区内排序之后被从内存块转储到例如硬盘的有序数据块。其中,由于进行了根据本发明的控制,各个分区中的被转储的第一个数据块的大小不等,但是各个分区中的从第二个数据块起的数据块的大小相等。
38、且包含M个数据记录。另外,需要注意的是,各个分区的最后一个数据块(未示出)的大小也很可能不等,这是因为一般不会发生在最后一轮正好把所有内存块充满,对于现有技术中的图2中的并行排序处理也是如此。0054在一个实施例中,设定I为分区的编号,1IN,对于第1个至第N1个分区,首次写入大容量存储器的有序数据块的大小小于M个数据记录,例如图5中的第1、2、I分区中的数据块1所示(尽管图5只示出了四个分区(1、2、I、N)的情况,第1至N1分区中的数据块1的大小均小于M)。另外,对于第N个分区,首次写入大容量存储器的有序数据块的大小小于或等于M个数据记录。即,当M/N能够整除时,第N个分区中的数据块1的大。
39、小是M个数据记录;当M/N不能够整除时,第N个分区中的数据块1的大小小于M个数据记录。0055在一个实施例中,设定I为分区的编号,1IN,并且,响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区包括响应于分配了第K轮的数据记录,控制第IKMODN分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,其中K是正整数,并且KMODN表示K模N后的余数。在这里,可以把K看作一个计数器,该计数器被初始值化为0(要注意的是该初始化值并无意义),每当分配了轮的数据记录时,使该计数器的值加1。把该计数器的值模N后得到的余数即为要进行控制的分区的编号。0056在一个实施例中,上述计。
40、数器可以实现于图5中所示的转储发起器中。在此情况下,每当分配了轮的数据记录时,分配器向图5中的转储发起器发送一个信号,响应于该信号,转储发起器使所述计数器加1,并根据所述计数器的值计算的I(KMODN)来发起相应的分区I中的数据转储(参见图5中的转储发起器与各分区之间的横向双向箭头)。具体地,在一个实施例中,转储发起器可以针对该分区启动一个写入进程或线程,把该分区的内存块中的已排序的数据块的当前快照写入到例如硬盘,并清空该内存块。在另一个实施例中,转储发起器不必启动专门的写入进程或线程,而是可以通知相应的排序处理器,从而由该排序处理器响应于该通知而自己调用写入指令来完成数据转储。说明书CN10。
41、4123304A108/10页110057在一个实施例中,上述计数器可以实现于图5所述中的分配器中。在此情况下,每当分配了轮的数据记录时,分配器使所述计数器加1并根据所述计数器的值计算的I(KMODN)向相应的排序处理器I发送一个信号。响应于接收到直接来自分配器的该信号,该相应的排序处理器启动专门的写入进程或线程或者调用写入指令来完成数据转储。0058在引入了上述的值K的情况下,当K小于或等于N时,写入大容量存储器的有序数据块的大小为K个数据记录。另一方面,当K大于N并且输入的数据记录充足(即,不是第一个也不是最后一个数据块)时,写入大容量存储器的有序数据块的大小为M个数据记录。0059如上所。
42、述,可以采用各种方式来实现本发明的发明构思,本发明并不局限于图5中所示的特定结构。0060以下给出一个简单的例子来详细说明本发明的并行排序。假定N4(即,存在4个分区)并且M16(即,每个分区中的内存块能够存储16个数据记录)。需要注意的是,以上仅仅是为了易于理解而给出的一个简单例子,在现实中,分区的数目可以达到64个以上,而内存块的大小能够存储数百万个数据记录。在N4且M16的情况下,。也就是说,每当分配了4轮(即,16个)的数据记录时,循环地控制这4个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块。0061参考图5中的例子,当K1(即,分。
43、配了4轮的数据记录)时,对分区1(KMOD41)执行数据转储,此时分区1的内存块中仅具有4个已排序数据记录(即1/4满),这样,分区1中的大小为M1/4的数据块1被写入例如硬盘并且分区1的内存块被清空。0062当K2(即,分配了8轮的数据记录)时,对分区2(KMOD42)执行数据转储,此时分区2的内存块中仅具有8个已排序数据记录(即1/2满),这样,分区2中的大小为M1/2的数据块1被写入例如硬盘并且分区2的内存块被清空。0063当K3(即,分配了12轮的数据记录)时,对分区3(KMOD43)执行数据转储,此时分区3的内存块中仅具有12个已排序数据记录(即3/4满),这样,分区3中的大小为M3。
44、/4的数据块1被写入例如硬盘并且分区3的内存块被清空。0064当K4(即,分配了16轮的数据记录)时,对分区4(KMOD44)执行数据转储,此时分区4的内存块中具有16个已排序数据记录(即全满),这样,分区4中的大小为M的数据块1被写入例如硬盘并且分区4的内存块被清空。0065当K5(即,分配了20轮的数据记录)时,再次对分区1(KMOD41)执行数据转储,此时分区1的内存块中具有16个已排序数据记录(此时,在第4轮数据分配后清空分区1的内存块后又经过了16轮,使得该内存块变满),这样,分区1中的大小为M的数据块2被写入例如硬盘并且分区1的内存块被清空。0066受控数据转储步骤430如上所述地。
45、执行并且后续的步骤依此类推。需要注意的是,图5中的纵向箭头代表数据块之间的顺序关系,实线箭头代表相邻,虚线箭头代表在数据块之间存在省略的其它数据块。0067下面返回参照图4,在合并排序步骤440中,与图2中的合并排序步骤240类似地,响应于所有数据记录完成分配,将各内存块中的已排序数据记录写入大容量存储器,并对大容量存储器中的所有有序数据块应用合并排序。利用简单的合并排序算法,对所有分区说明书CN104123304A119/10页12的所有这些(在硬盘上的)有序数据块进行合并排序,将这些有序数据块合并在一起并使其中的数据保持有序,从而得到最终的有序序列(参见图5的下部)。0068在一个实施例中。
46、,响应于从分配器接收到数据分配完成的信号,转储发起器启动写入进程或线程将各个内存块中的数据块(已排序)写入例如硬盘。在另一个实施例中,分配器直接通知各个排序处理器数据分配已完成,从而由各个排序处理器各自启动写入进程或线程或者调用写入指令来把数据块写入例如硬盘。0069在另一个实施例中,当接收到数据分配完成的信号时,对各个分区中的内存块中的当前数据块(即,最后一个数据块)不进行转储,而是直接开始所有有序数据块(包括硬盘中的数据块和内存块中的数据块)的合并排序。这样做,可以避免最后一个数据块写入硬盘后又需要从硬盘取回的冗余的输入输出操作。0070本发明通过分别控制各个分区使它们分别在计算出的定时(。
47、即使内存块并未满)把自身的内存块中的已排序数据块写入到大容量存储器中,在把不同分区的内存块中的数据块写入硬盘的定时之间以及在CPU计算强度大的时间之间产生了时间差,从而避免了各分区对各种系统资源的集中竞争,从而能够优化系统资源的利用率,以提高并行排序的性能。0071图6是示出了根据本发明的实施例的数据驱动的并行排序系统的方框图。图6中的并行排序系统600包括数据分配装置610、分区内排序装置620、受控数据转储装置630以及合并排序装置640。数据分配装置610被配置为循环地将输入的数据记录逐个地分配给N个分区,每个分区对应于所述并行排序中并行的一个排序处理并且分配有一个用于存储所分配的数据记。
48、录的内存块,所述内存块能够存储M个数据记录,其中N是大于1的整数且M是正整数。分区内排序装置620被配置为在各个分区中并行地对各自的内存块中的当前数据记录进行排序。受控数据转储装置630被配置为,响应于分配了轮的数据记录,循环地控制所述N个分区中的一个分区,将该分区的内存块中的已排序数据记录写入大容量存储器作为有序数据块,并清空该内存块,其中表示M/N的商向下取整。合并排序装置640被配置为响应于所有数据记录完成分配,将各内存块中的已排序数据记录写入大容量存储器,并对大容量存储器中的所有有序数据块应用合并排序。0072图7和图8是示出了现有技术的并行排序对于CPU的使用情况的示意图、以及根据本。
49、发明的实施例的并行排序对于减少CPU竞争的效果的示意图。图7的上部示出了一个分区的排序处理对于CPU的使用情况。在现有技术中,当存在两个分区时,这两个分区的排序处理对于CPU的使用是相似的,例如都如图7的上部所示。这样,这两个分区的排序处理对CPU的利用率产生了如图8的上部所示的叠加情况,即,峰部与峰部重叠且谷部与谷部重叠。与之相对,采用本发明的并行排序,当存在两个分区时,使这两个分区对于CPU使用率高的时段之间产生时间差。例如,图7的上部表示分区1的排序处理对CPU的使用情况,而图7的下部表示分区2的排序处理对CPU的使用情况。图8的下部表示采用本发明的合并排序后这两个分区的排序处理对CPU的利用率产生了的叠加情况。如图可见,与图8的上部相比,CPU不存在利用率接近100的情况,实现了削峰平谷的作用,从而提高了CPU的响应速度,优化了CPU资源的利用率。0073另外,与图7和图8所示的例子类似,在来自各个分区的有序数据块的所述写入竞争同一输入输出资源的情况下,对输入输出资源的集中竞争也因为时间差的引入而被避说明书CN104123304A1210/10页13免,从而也优化了输入输出资源的利用率。另外,即使在多处理器的情况下,例如4处理器的情况下,如果分区的数目超过处理器的数目,那么仍然存在多个分区的排序处理竞争同一个处理器资源的情况。在这种情况下,本发明仍然可以适。