CN107908714B - 一种数据归并排序方法及装置 - Google Patents

一种数据归并排序方法及装置 Download PDF

Info

Publication number
CN107908714B
CN107908714B CN201711104222.8A CN201711104222A CN107908714B CN 107908714 B CN107908714 B CN 107908714B CN 201711104222 A CN201711104222 A CN 201711104222A CN 107908714 B CN107908714 B CN 107908714B
Authority
CN
China
Prior art keywords
sub
merging
control information
sorted
queue
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201711104222.8A
Other languages
English (en)
Other versions
CN107908714A (zh
Inventor
王攀
望声宜
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shanghai Dameng Database Co Ltd
Original Assignee
Shanghai Dameng Database Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shanghai Dameng Database Co Ltd filed Critical Shanghai Dameng Database Co Ltd
Priority to CN201711104222.8A priority Critical patent/CN107908714B/zh
Publication of CN107908714A publication Critical patent/CN107908714A/zh
Application granted granted Critical
Publication of CN107908714B publication Critical patent/CN107908714B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2453Query optimisation
    • G06F16/24534Query rewriting; Transformation
    • G06F16/24549Run-time optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2455Query execution
    • G06F16/24553Query execution of query operations
    • G06F16/24554Unary operations; Data partitioning operations
    • G06F16/24556Aggregation; Duplicate elimination
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/245Query processing
    • G06F16/2457Query processing with adaptation to user needs
    • G06F16/24578Query processing with adaptation to user needs using ranking

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computational Linguistics (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

本发明实施例公开了一种数据归并排序方法及装置,该方法包括:根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息;获取子表控制信息队列;按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列;对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果;如果确定所述归并队列中至少一个已排序子表中的数据已经全部输出,则继续获取满足归并条件的已排序子表加入归并队列,直至完成将全部已排序子表加入所述归并队列。本发明实施例能够提升内存资源使用的灵活性,同时提升数据归并排序的效率。

Description

一种数据归并排序方法及装置
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种数据归并排序方法及装置。
背景技术
随着信息技术和互联网的不断迅速发展,数据库技术已发展成为信息科学里一项十分重要的技术,广泛应用于商业管理、政府办公、科学研究以及工程开发等领域。在数据库应用中,常常采用两阶段多路归并排序算法来解决对海量数据的排序问题,该算法包括以下两个阶段:
1、将待排序数据分成N个片段,对每个片段进行排序之后以形成N个子表,其中,N为正整数;
2、归并N个子表以形成单个的排序表,归并过程为:对每一个子表进行数据分块处理,加载N个子表中的第一个数据块至排序缓冲区,将N个子表中第一个数据块的第一个数据进行比较,输出比较结果中的最小值之后,将最小值对应的数据块中的下一数据提升至该数据块的第一位,继续比较N个子表中的第一个数据,如此循环,若某个数据块的数据已输出完毕,则将该数据块对应的子表中下一数据块加载至排序缓冲区,继续循环比较所有数据块的第一个数据,直至N个子表的所有数据全部输出完毕为止。
现有技术的缺陷在于:在数据库的实际应用中,往往会出现资源使用限制的情况,即,仅提供内存中的部分资源用于数据排序,然而,当提供的资源不足以使海量数据在两阶段完成归并排序时,会发出资源不足的提醒,导致无法继续执行数据归并排序的操作,如果对海量数据进行多阶段归并排序,则增加数据读出和写入的操作,严重影响系统性能,导致数据归并排序效率低。
发明内容
本发明实施例提供一种数据归并排序方法及装置,以解决现有技术中对海量数据归并排序效率低的问题。
第一方面,本发明实施例提供了一种数据归并排序方法,包括:
根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址;
根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列;
按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,所述归并条件包括归并队列中任意两个归并子表之间具有部分重叠的取值范围;
按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果;
如果确定所述归并队列中至少一个已排序子表中的数据已经全部输出,则返回执行按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列的操作,直至完成将全部已排序子表加入所述归并队列。
第二方面,本发明实施例还提供了一种数据归并排序装置,包括:
子表控制信息生成模块,用于根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址;
子表控制信息队列获取模块,用于根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列;
归并队列确定模块,用于按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,所述归并条件包括归并队列中任意两个归并子表之间具有部分重叠的取值范围;
归并排序模块,用于按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果;
循环模块,用于如果确定所述归并队列中至少一个已排序子表中的数据已经全部输出,则重新激活所述归并队列确定模块执行,直至完成将全部已排序子表加入所述归并队列。
本发明实施例通过生成已排序子表对应的子表控制信息,并获取子表控制信息队列,根据子表控制信息队列中的子表控制信息,选取满足归并条件的已排序子表加入归并队列,对归并队列进行归并排序之后,更新归并队列,以完成对全部已排序子表的归并排序操作。本发明实施例对传统的两阶段多路归并排序算法进行了优化改进,避免了内存资源使用限制对归并排序的不良影响,归并队列中的已排序子表的数量并不是固定的,可以根据实际情况进行动态调整,提升了内存资源使用的灵活性,同时,避免了对海量数据多次读出和写入的操作,提升了数据归并排序的效率,改善了系统性能。
附图说明
图1是本发明实施例一中的一种数据归并排序方法的流程图;
图2是本发明实施例二中的一种数据归并排序方法的流程图;
图3是本发明实施例三中的一种数据归并排序方法的流程图;
图4是本发明实施例四中的一种数据归并排序方法的流程图;
图5是本发明实施例五中的一种数据归并排序装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部内容。在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。
为了便于理解,首先将本发明的实现原理进行简单介绍:本发明各实施例只要实现的是对现有技术中的两阶段多路归并排序算法中的第二阶段的算法进行改进。如前所述,在归并排序算法的第一阶段中,会得到N个(N为大于1的整数)子表,每个子表中的数据都是按照设定排序规则(例如:从大到小或者从小到大)排序后的数据,为了改进现有的第二阶段需要同时在归并队列中和加入这N个子表进行归并排序而造成的资源占用问题,发明人考虑是否可以不对这N个子表进行同时的归并处理,减少同一时间加入归并队列进行归并排序的子表个数,以达到减少对资源过度占用的问题。
基于这一个总的目标,实现难点是:由于最终需要得到的归并排序结果应该是全部数据的排序结果,因此必须保证在有一个或者多个子表没有加入当前归并队列中进行排序时,对该归并队列进行归并排序的输出结果应该与该一个或者多个子表加入当前归并队列中进行排序时,对该归并队列进行归并排序的输出结果相一致。
举一个简单的例子,如果子表A中存储的数据的数值范围为[1,10],子表B中存储的数据的数值范围为[5,13],子表C中存储的数据的数值范围为[16,27],则在对上述三个子表进行数据的从小到大排序时可以看出:可以首先将子表A以及子表B加入归并队列进行排序,其所输出的归并排序结果和是否加入子表C时的归并排序结果相一致,此时,则无需将子表A、子表B以及子表C同时加入归并队列进行排序,可以首先将子表A以及子表B加入至归并队列,之后肯定是子表A中的数据首先被全部输出,在子表A输出结束后再输入子表C进行归并排序,对归并排序结束后最终的输出结果没有任何影响。
基于上述得到的部分子表归并排序结果需要和全部子表的归并排序结果相一致的总的构思。发明人基于不同的排序规则设计了不同类型的部分归并方法。
如果排序规则为从小到大排序,则需要保证未输入至归并队列的所有子表的最小值,一定要大于当前归并队列中的至少一个子表中最大值的最小值;如果排序规则为从大到小排序,则需要保证未输入至归并队列的所有子表的最大值,一定要小于当前归并队列中的至少一个子表中最小值中的最大值,这样设置,就可以保证对当前归并队列中的部分子表进行归并排序的输出结果与对全部子表进行归并排序的输出结果相一致。
实施例一
图1为本发明实施例一提供的一种数据归并排序方法的流程图,本实施例可适用于根据可使用的内存资源进行海量数据归并排序的情况,该方法可以由一种数据归并排序装置来执行,该装置可以采用软件和/或硬件的方式实现,一般集成于终端设备中,PC机或者平板电脑等。如图1所示,本实施例的方法具体包括:
S110、根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址。
一般来说,在内存资源中的排序缓冲区对海量数据进行归并排序的操作,发明人通过研究发现,在计算机运行过程中,用于为海量数据进行归并排序操作的内存资源是有限制的,并且多阶段归并排序对计算机的性能影响很大。其中,一个阶段具体是指数据从磁盘读取至内存中,经过处理后,再从内存写回至磁盘的过程,所述多阶段具体是指数据在磁盘和内存之间多次进行读取和写回的操作。
在本实施例中,首先,获取与待排序数据对应的至少两个已排序子表,需要说明的是,获取的至少两个已排序子表是第一阶段的排序结果。具体获取过程可以为根据内存的排序缓冲区的容量大小,对待排序数据进行分段操作,获取待排序数据对应的至少两个片段。按照排序类型,分别对至少两个片段进行排序操作,获取到的各片段的排序结果可以理解为已排序子表。排序类型可以根据实际应用情况具体设定,可以对待排序数据按照从小到大的顺序进行排序,也可以对待排序数据按照从大到小的顺序进行排序,本发明对此并不限制。
根据与待排序数据对应的至少两个已排序子表,即,在第一阶段排序结果的基础上,在排序缓冲区中生成与各已排序子表分别对应的子表控制信息,子表控制信息中包括已排序子表数据中的最小值,最大值以及用于查找已排序子表的已排序子表的访问地址。从磁盘中取出待排序数据,获取待排序数据对应的多个已排序子表,同时在排序缓冲区生成各已排序子表对应的子表控制信息之后,将已排序子表写回至磁盘,完成第一阶段的操作。
S120、根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列。
具体的,可以预先设置排序类型,即待排序数据从小到大排序或者从大到小排序,对各子表控制信息进行排序时,可以按照各子表控制信息中的最小值由小到大排序,得到子表控制信息队列。可以理解的是,在对各子表控制信息进行排序时,也可以按照各子表控制信息中的最大值由大到小排序,本发明对此并不限制。
通过上述设置,可以保证子表控制信息队列中的各子表控制信息可以按照最小值从小到大的顺序或者最大值从大到小的顺序进行排序,以方便后续在多个已排序子表中选择满足需要的部分已排序子表进行优先的归并排序。
S130、按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,所述归并条件包括归并队列中任意两个归并子表之间具有部分重叠的取值范围。
如前所述,如果排序规则为从小到大排序,则需要保证未输入至归并队列的所有子表的最小值,一定要大于当前归并队列中的至少一个子表中最大值的最小值;如果排序规则为从大到小排序,则需要保证未输入至归并队列的所有子表的最大值,一定要小于当前归并队列中的至少一个子表中最小值中的最大值,也就是要求在排序规则为从小到大排序的情况下,所有未输入至归并队列的子表对应的子表控制信息的最小值大于等于归并队列中至少一个归并子表的所有数据,在排序规则为从大到小排序的情况下,所有未输入至归并队列的子表对应的子表控制信息的最大值小于等于归并队列中至少一个归并子表的所有数据,在归并队列中的至少一个归并子表的全部数据完成归并排序输出后,再加入符合归并条件的已排序子表,也完全不会对排序结果有任何影响。
具体的,获取子表控制信息队列中的子表控制信息的排布顺序,例如,排布顺序可以为按照各子表控制信息的最小值由小到大进行排序,按照排布顺序,顺序对子表控制信息队列中的每一个子表控制信息进行处理,选取至少一个满足归并条件的子表控制信息对应的已排序子表,可以根据子表控制信息中的子表的访问地址,获取已排序子表,并加入至归并队列。根据子表控制信息包括的已排序子表数据的最大值和最小值,获取子表控制信息队列中相邻子表控制信息具有数据上部分重叠的关联,因此,归并条件可以包括归并队列中任意两个归并子表之间具有部分重叠的取值范围,可以理解为至少两个已排序子表中的数据具有重叠的部分,获取具有重叠部分的至少两个已排序子表,并加入至归并队列一起进行归并排序。需要说明的是,加入到归并队列的已排序子表可以理解为归并子表。
在本实施例中,根据子表控制信息队列中的首个子表控制信息,确定归并阈值,在本实施例的另一个可选的实施方式中,归并阈值可以为首个子表控制信息中的最大值,将首个子表控制信息对应的已排序子表加入至归并队列,如果首个子表控制信息不是子表控制信息队列中的最后一个子表控制信息,则顺序获取子表控制信息队列中首个子表控制信息的下一个子表控制信息,将归并阈值与下一个子表控制信息中的最小值进行比较,如果确定下一个子表控制信息中的最小值小于归并阈值,则将下一个子表控制信息加入至归并队列之后,再将归并阈值与下一个子表控制信息中的最大值进行比较,以确定归并阈值是否需要更新。如果确定下一个子表控制信息中的最大值大于等于归并阈值,则归并阈值不需要更新,如果确定下一个子表控制信息中的最大值小于归并阈值,则更新归并阈值为下一子表控制信息中的最大值。循环执行将子表控制信息队列中的下一子表控制信息的最小值和最大值分别与归并阈值进行比较的操作,直至下一子表控制信息的最小值大于等于归并阈值或者子表控制信息队列中不存在下一子表控制信息为止。需要说明的是,当下一子表控制信息中的最小值大于等于归并阈值时,则暂停选取满足归并条件的已排序子表加入归并队列的操作,对归并队列中的归并子表进行归并排序。
在一个具体例子中,如有子表A中存储的数据的数值范围为[1,100],子表B中存储的数据的数值范围为[5,80],子表C中存储的数据的数值范围为[10,60],子表D中存储的数据的数值范围为[70,100],则根据本发明的方法,先把子表A加入至归并队列,归并阈值为100,再把子表B加入至归并队列,归并阈值更新为80,再把子表C加入至归并队列,归并阈值更新为60,此时,虽然子表D的数据取值范围与子表A和子表C的数据取值范围有重叠部分,但是,本发明可以进一步地需要归并队列中至少一个子表的所有数据小于未输入至归并队列的子表对应的子表控制信息的最小值,所以子表D对应的子表控制信息的最小值大于子表C的所有数据,子表D暂时不加入归并队列,等待子表C中的数据首先完成归并排序之后,再将子表D加入至归并队列,可以保证整个归并排序结果的正确性。
S140、按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。
具体的,首先可以获取归并队列中归并子表的数量,当归并子表的数量为一个时,可以直接输出归并子表,即归并子表的归并排序处理结束,可以将归并子表输出至内存中的其它缓冲区进行进一步的处理操作。当归并子表的数量为两个以上时,对归并队列中的归并子表按照排序类型进行归并排序的操作,例如,排序类型可以为从小到大排序,对归并队列中归并子表中的数据从小到大进行排序之后,输出至内存中的其它缓冲区进行进一步的处理操作。
S150、判断所述归并队列中至少一个已排序子表中的数据是否已经全部输出:若是,执行S160;否则,返回执行S140。
S160、判断是否完成将全部已排序子表加入所述归并队列:若是,执行S170,否则,返回执行S130。
S170、将所述归并队列中当前仍存在的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。
其中,如果在有一个或者多个已排序子表中的数据被全部输出的前提下,确定当前已经没有新的已排序列表需要加入归并队列,则继续将所述归并队列中当前仍存在的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果,当所述归并队列中的全部已排序子表均被输出后,即是完成了对上述待排序数据的完整排序输出。
如果确定所述归并队列中至少一个已排序子表中的数据已经全部输出,则返回执行按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列的操作,直至完成将全部已排序子表加入所述归并队列,获取到对待排序数据完整的归并排序输出结果。
具体的,如果确定归并队列中至少一个已排序子表中的数据已经全部输出,输出结果可以包括至少一个已排序子表的全部数据,以及归并队列中其它已排序子表的部分数据,此时,可以理解为一路归并排序结束,可以继续从子表控制信息队列中选取至少一个满足归并条件的已排序子表加入归并队列,遍历归并队列中未完成归并排序的归并子表,获取未完成归并排序的所有归并子表的最大值,选取其中的最小值作为下一路归并排序的初始化归并阈值,从上一次子表控制信息队列选取归并子表的截止位置开始向后检查,当子表控制信息队列中下一子表控制信息的最小值大于等于归并阈值时,暂停选取满足归并条件的已排序子表加入归并队列的操作,对归并队列中的归并子表进行归并排序,循环执行将满足归并条件的已排序子表加入归并队列进行归并排序的操作,在经过多路归并排序之后,完成对全部已排序子表的归并排序。
本领域技术人员可知,对各所述子表控制信息也可以按照最小值从大到小的顺序进行排序、最大值从小到大的顺序进行排序、最大值从大到小的顺序进行排序、以及其它类似的排序顺序,本发明对此并不限制。
本发明实施例一提供的一种数据归并排序方法,能够避免内存资源使用限制对归并排序的不良影响,归并队列中的已排序子表的数量并不是固定的,可以根据实际情况进行动态调整,提升了内存资源使用的灵活性,同时,避免了对海量数据多次读出和写入的操作,提升了数据归并排序的效率,改善了系统性能。
实施例二
图2为本发明实施例二提供的一种数据归并排序的方法的流程图,本发明实施例二以实施例一为基础进行了优化,具体是对根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列的操作进一步优化,如图2所示,本发明实施例二具体包括:
S210、根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址。
S220、根据排序类型,对各所述子表控制信息按照最小值从小到大的顺序进行排序,得到子表控制信息队列。
优选的,获取一个所述子表控制信息作为当前待处理子表控制信息;
根据设定排序标准,将所述当前子表控制信息加入至所述子表控制信息队列之后,更新所述子表控制信息队列;
返回执行获取一个所述子表控制信息作为当前待处理子表控制信息的操作,直至完成对所有所述子表控制信息的排序操作。
具体的,按照排序类型为从小到大的顺序,已排序子表中的数据为从小到大排序。对于已排序子表对应的子表控制信息,设定排序标准可以为对各子表控制信息中的最小值按照从小到大的顺序进行排序,可以理解的是,设定排序标准还可以为其它的排序顺序,本发明对此并不限制。
选取排序缓冲区的一个子表控制信息作为当前待处理子表控制信息,在子表控制信息队列保持以子表控制信息的最小值由小到大排序的情况下,将当前待处理子表控制信息加入到子表控制信息队列中,可以采用经典内存排序算法,也可以采用二分查找的方法定位控制信息在队列中的插入位置,本发明对此并不限制。如果确定还有未加入子表控制信息队列的子表控制信息,则继续获取一个所述子表控制信息作为当前待处理子表控制信息,将当前待处理子表控制信息加入到子表控制信息队列中,直至所有的子表控制信息都加入至子表控制信息队列中。
S230、按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,所述归并条件包括归并队列中任意两个归并子表之间具有部分重叠的取值范围。
S240、按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。
S250、判断所述归并队列中至少一个已排序子表中的数据是否已经全部输出:若是,执行S260;否则,返回执行S240。
S260、判断是否完成将全部已排序子表加入所述归并队列:若是,执行S270,否则,返回执行S230。
S270、将所述归并队列中当前仍存在的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。
本发明实施例二提供的一种数据归并排序方法,在第一阶段获取已排序的子表时,生成与已排序子表对应的子表控制信息,并得到子表控制信息队列,在第二阶段归并时,不是将所有已排序子表的首个数据块加载至内存进行排序,而是根据子表控制信息队列,选取部分已排序子表开始归并,当某个子表归并结束之后,再从子表控制信息队列中装载后续的子表控制信息,继续选取部分已排序子表进行归并,提升了内存资源使用的灵活性,并且提升了数据归并排序的效率。
实施例三
图3为本发明实施例三提供的一种数据归并排序方法的流程图,本发明实施例三以上述各实施例为基础进行了优化改进,对按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列进行了进一步说明,如图3所示,本发明实施例三的方法具体包括:
S310、根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址。
S320、根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列。
S330、获取所述归并队列中的归并阈值,所述归并队列在未使用时,所述归并阈值为初始化阈值。
具体的,归并队列中的归并阈值不是固定的,根据归并队列的归并进程,归并阈值可以相同,也可以不相同。在归并队列为空时,即归并队列未使用时,归并阈值为初始化阈值,初始化阈值可以根据实际情况具体设定,可以将初始化阈值设置为一个很大的值,例如,初始化阈值可以设置为9999999999,但不限于9999999999,本发明对此不做限制。
S340、按照所述子表控制信息队列中的子表控制信息中最小值从小到大的顺序,顺序获取一个子表控制信息作为当前操作控制信息,执行S350。
其中,获取的所述子表控制信息为顺序获取的,且当前未加入至所述归并队列的一个已排序子表的子表控制信息。
具体的,子表控制信息队列是按照子表控制信息的最小值由小到大排序的,获取子表控制信息队列中的首个子表控制信息,作为当前操作控制信息,对首个子表控制信息处理结束之后,再顺序获取首个子表控制信息的下一子表控制信息,当前操作控制信息,以此类推,依次获取子表控制信息队列中的子表控制信息。如果顺序获取一个子表控制信息失败,则暂时结束选取已排序子表加入至归并队列的操作,对归并队列中的归并子表进行排序的操作。
S350、判断所述归并阈值是否为初始化阈值:若是,执行S360,否则,执行S370。
具体的,首先判断归并阈值是否为初始化阈值,如果归并阈值为初始化阈值,则说明在对子表控制信息队列中的首个子表控制信息进行处理,直接将首个子表控制信息对应的已排序子表加入至归并队列即可。
S360、将与所述当前操作控制信息对应的已排序子表加入所述归并队列中,并重新确定归并阈值,执行S380。
优选的,重新确定归并阈值,包括:
如果确定所述归并阈值为初始化阈值,则将所述归并阈值确定为所述当前操作控制信息中的最大值;
如果确定所述当前操作控制信息中的最小值小于所述归并阈值,则比较所述归并阈值与所述当前操作控制信息中的最大值的大小;
在所述当前操作控制信息中的最大值小于所述归并阈值时,将所述归并阈值确定为所述当前操作控制信息中的最大值;
在所述当前操作控制信息中的最大值大于等于所述归并阈值时,则确定所述归并阈值保持不变。
具体的,如果确定归并阈值为初始化阈值,则可以理解为当前操作控制信息为子表控制信息队列中的首个子表控制信息,需要重新确定归并阈值,归并阈值可以设置为首个子表控制信息的最大值。当当前操作控制信息中的最小值小于所述归并阈值时,则将与当前操作控制信息对应的已排序子表加入至归并队列之后,也重新确定归并阈值,确定方法可以为:比较归并阈值与当前操作控制信息中最大值的大小,如果确定当前操作控制信息中的最大值小于归并阈值,则更新归并阈值为当前操作控制信息中的最大值,如果确定当前操作控制信息中的最大值大于等于归并阈值,则归并阈值保持不变。
S370、判断所述当前操作控制信息中的最小值是否小于所述归并阈值:若是,返回执行S360;否则,执行S390。
具体的,如果当前操作控制信息中的最小值小于所述归并阈值,则说明当前操作控制信息与上一操作控制信息分别对应的已排序子表中具有重叠的取值范围,根据当前操作控制信息中的访问地址,将获取的当前操作控制信息对应的已排序子表加入至归并队列中。如果当前操作控制信息中的最小值大于等于所述归并阈值,则说明归并排序队列中的至少一个已排序子表的全部数据小于当前操作控制信息中的最小值,暂时结束选取已排序子表加入至归并队列的操作,对归并队列中的归并子表进行排序的操作。
S380、判断所述当前操作控制信息为所述子表控制信息队列中的最后一个子表控制信息,若是,执行S390;否则,返回执行S340。
S390、按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果,执行S3100。
优选的,按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果,包括:
获取所述归并队列中所述已排序子表的数量;
如果确定所述已排序子表的数量为一个,则直接输出所述已排序子表;
如果确定所述已排序子表的数量为至少两个,则对所述归并队列执行归并排序的操作,直至所述归并队列中至少一个已排序子表中的数据已经全部输出。
具体的,在对归并队列中的已排序子表进行归并排序之前,优选首先确定归并队列中已排序子表的数量,如果归并队列中仅包括一个已排序子表,则直接输出已排序子表至后续处理区域,如果归并队列中包括两个或者更多的已排序子表,则对归并队列进行归并排序的操作,直至归并队列中至少一个已排序子表中的数据全部输出至后续处理区域,一般情况下,会输出一个已排序子表中的全部数据以及其它已排序子表中的部分数据。
S3100、判断所述归并队列中是否至少一个已排序子表中的数据已经全部输出,若是,执行S3110;否则,返回执行S390。
S3110、判断所述归并队列中是否包括至少一个已排序子表,若是,执行S3120;否则,执行S3130。
S3120、获取所述归并队列中包括的所述已排序子表对应的子表控制信息中的目标最大值,并将所述归并阈值更新为至少一个所述目标最大值中的最小值,执行S3140。
具体的,在确定归并队列中至少一个已排序子表中的数据已经全部输出时,则可以继续判断归并队列中是否还包括已排序子表,如果归并队列中还包括已排序子表,则遍历归并队列中未完成归并排序的已排序子表的最大值,获取所有最大值中的最小值,作为归并阈值。
S3130、将所述归并阈值更新为所述初始化阈值,执行S3140。
S3140、判断是否完成将全部已排序子表加入所述归并队列:若是,执行S3150,否则,返回执行S340。
S3150、将所述归并队列中当前仍存在的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。
具体的,当将全部已排序子表加入至归并队列时,对归并队列中当前仍存在的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。否则,从上一次在子表控制信息队列中选取归并子表的截止位置开始,向后继续顺序检查子表控制信息,添加符合归并条件的子表控制信息对应的已排序子表至归并队列进行归并排序的操作。至此,归并排序的第一阶段和第二阶段已全部完成。
表1
Figure BDA0001463995580000181
本实施例中,示例性地,表1为本发明实施例三提供的一种数据归并排序方法中的一个子表控制信息队列,参见表1,需要说明的是,子表控制信息号所在行的编号仅仅是为了便于后续描述,具体实现时,并不需要为子表控制信息进行编号。子表控制信息队列是按照子表控制信息的最小值由小到大排序的,获取子表控制信息队列中的1号子表控制信息,作为当前操作控制信息,此时,归并阈值为初始值,可以直接将1号子表控制信息对应的已排序子表加入至归并队列。此外,由于归并阈值的初始值可以设置为很大的值,1号子表控制信息的最小值小于归并阈值的初始值,也同样将1号子表控制信息对应的已排序子表加入至归并队列。然后,将归并阈值更新为1号子表控制信息的最大值1000。将在子表控制信息队列中选取位置后移一位,顺序获取一个子表控制信息作为当前操作控制信息,即2号子表控制信息,将归并阈值1000与2号子表控制信息的最小值30进行比较,2号子表控制信息的最小值小于归并阈值,则将2号子表控制信息也加入归并队列中,此时,需要重新确定归并阈值,将2号子表控制信息的最大值500与归并阈值1000进行比较,2号子表控制信息的最大值小于归并阈值,则将归并阈值更新为500。将在子表控制信息队列中选取位置后移一位,顺序获取一个子表控制信息作为当前操作控制信息,即3号子表控制信息,将归并阈值500与3号子表控制信息的最小值200进行比较,3号子表控制信息的最小值小于归并阈值,则将3号子表控制信息也加入归并队列中,此时,需要重新确定归并阈值,将3号子表控制信息的最大值1500与归并阈值500进行比较,3号子表控制信息的最大值大于归并阈值,此时,归并阈值保持不变。将在子表控制信息队列中选取位置后移一位,顺序获取一个子表控制信息作为当前操作控制信息,即4号子表控制信息,将归并阈值500与4号子表控制信息的最小值500进行比较,4号子表控制信息的最小值不小于归并阈值,则归并子表的选择暂时结束。此时,归并队列中包括1-3号子表控制信息,对归并队列进行归并排序的操作。
如果确定归并队列中至少一个已排序子表中的数据已经全部输出,则一路已排序子表归并排序结束,遍历归并队列中未完成归并排序的归并子表对应的子表控制信息的最大值,将未完成归并排序的归并子表对应的子表控制信息的最大值作为目标最大值,选取目标最大值中的最小值作为归并阈值。参见表1可知,2号子表控制信息会首先归并排序结束,重新确定阈值为1号子表控制信息和3号子表控制信息中最大值的最小值,即归并阈值为1000,将在子表控制信息队列中选取位置后移一位,顺序获取一个子表控制信息作为当前操作控制信息,即4号子表控制信息,将归并阈值1000与4号子表控制信息的最小值500进行比较,4号子表控制信息的最小值小于归并阈值,则将4号子表控制信息也加入归并队列中,此时,需要重新确定归并阈值,将4号子表控制信息的最大值1500与归并阈值1000进行比较,4号子表控制信息的最大值大于归并阈值,归并阈值保持不变。将在子表控制信息队列中选取位置后移一位,顺序获取一个子表控制信息作为当前操作控制信息,即5号子表控制信息,将归并阈值1000与5号子表控制信息的最小值600进行比较,5号子表控制信息的最小值小于归并阈值,则将5号子表控制信息也加入归并队列中,此时,需要重新确定归并阈值,将5号子表控制信息的最大值2000与归并阈值1000进行比较,5号子表控制信息的最大值大于归并阈值,归并阈值保持不变。将在子表控制信息队列中选取位置后移一位,顺序获取一个子表控制信息作为当前操作控制信息,即6号子表控制信息,将归并阈值1000与6号子表控制信息的最小值1200进行比较,6号子表控制信息的最小值大于归并阈值,则归并子表的选择暂时结束。此时,归并队列中包括1号和3号子表控制信息对应的已排序子表的部分数据,以及4-5号子表,对归并队列进行归并排序的操作。
如果确定归并队列中至少一个已排序子表中的数据已经全部输出,则两路已排序子表归并排序结束,继续执行选取满足归并条件的子表控制信息对应的已排序子表加入至归并队列的操作,直至完成将全部已排序子表加入所述归并队列。
本发明实施例三提供的一种数据归并排序方法,归并路数不是固定的,根据实际情况,归并路数动态调整,突破了所有子表同时归并的归并模式,进而更加灵活的利用内存资源。
实施例四
图4为本发明实施例四提供的一种数据归并排序方法的流程图,本发明实施例四以上述各实施例为基础进行了优化改进,对根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息之前的操作,进行了进一步说明,如图4所示,本发明实施例四的方法具体包括:
S410、获取排序缓冲区的容量,并根据所述排序缓冲区的容量,获取所述待排序数据的至少两个分段结果。
S420、在所述排序缓冲区对所述至少两个分段结果依次进行排序操作,获取所述待排序数据对应的至少两个已排序子表。
具体的,根据内存的排序缓冲区的容量大小,对待排序数据进行分段操作,获取待排序数据对应的至少两个片段。按照排序类型,即从小到大排序或者从大到小排序,分别对至少两个片段进行排序操作,获取到的各片段的排序结果作为待排序数据对应的已排序子表。
S430、根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址。
S440、根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列。
S450、按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,所述归并条件包括归并队列中任意两个归并子表之间具有部分重叠的取值范围。
S460、按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。
S470、判断所述归并队列中至少一个已排序子表中的数据是否已经全部输出:若是,执行S480;否则,返回执行S460。
S480、判断是否完成将全部已排序子表加入所述归并队列:若是,执行S490,否则,返回执行S450。
S490、将所述归并队列中当前仍存在的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果。
本发明实施例四提供的一种数据归并排序方法,是一种动态调整归并路数的两阶段多路归并排序方法,通过动态调整第二阶段归并时的路数,更加合理的利用内存资源,同时在很大程度上减少需要进行第三阶段归并发生的概率,提升了归并排序的效率。
实施例五
图5是本发明实施例五中的一种数据归并排序装置的结构示意图,该装置应用于根据可使用的内存资源进行海量数据归并排序的情况,该装置可以采用软件和/或硬件的方式实现,一般集成于终端设备中,PC机或者平板电脑等。如图5所示,装置包括:子表控制信息生成模块510、子表控制信息队列获取模块520、归并队列确定模块530、归并排序模块540以及循环模块550,其中:
子表控制信息生成模块510,用于根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址;
子表控制信息队列获取模块520,用于根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列;
归并队列确定模块530,用于按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,所述归并条件包括归并队列中任意两个归并子表之间具有部分重叠的取值范围;
归并排序模块540,用于按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果;
循环模块550,用于如果确定所述归并队列中至少一个已排序子表中的数据已经全部输出,则返回执行按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列的操作,直至完成将全部已排序子表加入所述归并队列。
在上述实施例的基础上,所述排序类型包括:将待排序数据按照从小到大的顺序进行排序。
在上述实施例的基础上,所述子表控制信息队列获取模块可以包括:
排队单元,用于对各所述子表控制信息按照最小值从小到大的顺序进行排序,得到子表控制信息队列。
在上述实施例的基础上,所述排队单元可以包括:
当前处理子单元,用于获取一个所述子表控制信息作为当前待处理子表控制信息;
位置确定子单元,用于根据设定排序标准,将所述当前子表控制信息加入至所述子表控制信息队列之后,更新所述子表控制信息队列;
返回子单元,用于返回执行获取一个所述子表控制信息作为当前待处理子表控制信息的操作,直至完成对所有所述子表控制信息的排序操作。
在上述实施例的基础上,所述归并队列确定模块可以包括:
归并阈值获取单元,用于获取所述归并队列中的归并阈值,所述归并队列在未使用时,所述归并阈值为初始化阈值;
当前操作单元,用于按照所述子表控制信息队列中的子表控制信息中最小值从小到大的顺序,顺序获取一个子表控制信息作为当前操作控制信息;
归并队列确定单元,用于如果确定所述当前操作控制信息中的最小值小于所述归并阈值或者所述归并阈值为初始化阈值,则将与所述当前操作控制信息对应的已排序子表加入所述归并队列中,并重新确定归并阈值;
循环单元,用于返回执行按照所述子表控制信息队列中的子表控制信息中最小值从小到大的顺序,顺序获取一个子表控制信息作为当前操作控制信息的操作,直至所述当前操作控制信息中的最小值大于等于所述归并阈值或者所述当前操作控制信息为所述子表控制信息队列中的最后一个子表控制信息。
在上述实施例的基础上,所述归并队列确定模块还可以包括:
第一阈值重新确定单元,用于如果确定所述归并阈值为初始化阈值,则将所述归并阈值确定为所述当前操作控制信息中的最大值;
比较单元,用于如果确定所述当前操作控制信息中的最小值小于所述归并阈值,则比较所述归并阈值与所述当前操作控制信息中的最大值的大小;
第二阈值重新确定单元,用于在所述当前操作控制信息中的最大值小于所述归并阈值时,将所述归并阈值确定为所述当前操作控制信息中的最大值;
第三阈值重新确定单元,用于在所述当前操作控制信息中的最大值大于等于所述归并阈值时,则确定所述归并阈值保持不变。
在上述实施例的基础上,所述装置还包括:
第一阈值确定单元,用于如果确定所述归并队列中不包括已排序子表,则将所述归并阈值更新为所述初始化阈值;
第二阈值确定单元,用于如果确定所述归并队列中包括至少一个已排序子表,则获取所述归并队列中包括的所述已排序子表对应的子表控制信息中的目标最大值,并将所述归并阈值更新为至少一个所述目标最大值中的最小值。
在上述实施例的基础上,所述归并排序模块可以包括:
数量获取单元,用于获取所述归并队列中所述已排序子表的数量;
子表输出单元,用于如果确定所述已排序子表的数量为一个,则直接输出所述已排序子表;
归并排序单元,用于如果确定所述已排序子表的数量为至少两个,则对所述归并队列执行归并排序的操作,直至所述归并队列中至少一个已排序子表中的数据已经全部输出。
在上述实施例的基础上,所述装置还包括:
分段单元,用于获取排序缓冲区的容量,并根据所述排序缓冲区的容量,获取所述待排序数据的至少两个分段结果;
已排序子表获取单元,用于在所述排序缓冲区对所述至少两个分段结果依次进行排序操作,获取所述待排序数据对应的至少两个已排序子表。
本发明实施例提供的数据归并排序装置可执行本发明任意实施例提供的数据归并排序方法,具备执行数据归并排序方法相应的功能模块和有益效果。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。

Claims (9)

1.一种数据归并排序方法,其特征在于,包括:
根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址;
根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列;
按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,如果排布顺序为从小到大排序,则未输入至归并队列的所有已排序子表的最小值,大于当前归并队列中的至少一个已排序子表中最大值的最小值;如果排布顺序为从大到小排序,则未输入至归并队列的所有已排序子表的最大值,小于当前归并队列中的至少一个已排序子表中最小值的最大值;
按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果;
如果确定所述归并队列中至少一个已排序子表中的数据已经全部输出,则返回执行按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列的操作,直至完成将全部已排序子表加入所述归并队列。
2.根据权利要求1所述的方法,其特征在于,所述排序类型包括:将待排序数据按照从小到大的顺序进行排序;
根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列,包括:
对各所述子表控制信息按照最小值从小到大的顺序进行排序,得到子表控制信息队列。
3.根据权利要求2所述的方法,其特征在于,对各所述子表控制信息按照最小值从小到大的顺序进行排序,得到子表控制信息队列包括:
获取一个所述子表控制信息作为当前待处理子表控制信息;
根据设定排序标准,将所述当前子表控制信息加入至所述子表控制信息队列之后,更新所述子表控制信息队列;
返回执行获取一个所述子表控制信息作为当前待处理子表控制信息的操作,直至完成对所有所述子表控制信息的排序操作。
4.根据权利要求2所述的方法,其特征在于,按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,包括:
获取所述归并队列中的归并阈值,所述归并队列在未使用时,所述归并阈值为初始化阈值;
按照所述子表控制信息队列中的子表控制信息中最小值从小到大的顺序,顺序获取一个子表控制信息作为当前操作控制信息;
如果确定所述当前操作控制信息中的最小值小于所述归并阈值或者所述归并阈值为初始化阈值,则将与所述当前操作控制信息对应的已排序子表加入所述归并队列中,并重新确定归并阈值;
返回执行按照所述子表控制信息队列中的子表控制信息中最小值从小到大的顺序,顺序获取一个子表控制信息作为当前操作控制信息的操作,直至所述当前操作控制信息中的最小值大于等于所述归并阈值或者所述当前操作控制信息为所述子表控制信息队列中的最后一个子表控制信息;
其中,所述归并阈值根据子表控制信息队列中的首个子表控制信息进行确定;所述初始化阈值为预设的极大值;
重新确定归并阈值,包括:
如果确定所述归并阈值为初始化阈值,则将所述归并阈值确定为所述当前操作控制信息中的最大值;
如果确定所述当前操作控制信息中的最小值小于所述归并阈值,则比较所述归并阈值与所述当前操作控制信息中的最大值的大小;
在所述当前操作控制信息中的最大值小于所述归并阈值时,将所述归并阈值确定为所述当前操作控制信息中的最大值;
在所述当前操作控制信息中的最大值大于等于所述归并阈值时,则确定所述归并阈值保持不变。
5.根据权利要求4所述的方法,其特征在于,在确定所述归并队列中至少一个已排序子表中的数据已经全部输出之后,还包括:
如果确定所述归并队列中不包括已排序子表,则将所述归并阈值更新为所述初始化阈值;
如果确定所述归并队列中包括至少一个已排序子表,则获取所述归并队列中包括的所述已排序子表对应的子表控制信息中的目标最大值,并将所述归并阈值更新为至少一个所述目标最大值中的最小值。
6.根据权利要求1所述的方法,其特征在于,按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果,包括:
获取所述归并队列中所述已排序子表的数量;
如果确定所述已排序子表的数量为一个,则直接输出所述已排序子表;
如果确定所述已排序子表的数量为至少两个,则对所述归并队列执行归并排序的操作,直至所述归并队列中至少一个已排序子表中的数据已经全部输出。
7.根据权利要求1所述的方法,其特征在于,根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息之前,还包括:
获取排序缓冲区的容量,并根据所述排序缓冲区的容量,获取所述待排序数据的至少两个分段结果;
在所述排序缓冲区对所述至少两个分段结果依次进行排序操作,获取所述待排序数据对应的至少两个已排序子表。
8.一种数据归并排序装置,其特征在于,包括:
子表控制信息生成模块,用于根据与待排序数据对应的至少两个已排序子表,生成与各所述已排序子表分别对应的子表控制信息,其中,所述子表控制信息包括已排序子表中数据的最小值、最大值以及已排序子表的访问地址;
子表控制信息队列获取模块,用于根据排序类型,对各所述子表控制信息进行排序,得到子表控制信息队列;
归并队列确定模块,用于按照所述子表控制信息队列中的子表控制信息的排布顺序,顺序获取至少一个满足归并条件的已排序子表加入归并队列,其中,如果排布顺序为从小到大排序,则未输入至归并队列的所有已排序子表的最小值,大于当前归并队列中的至少一个已排序子表中最大值的最小值;如果排布顺序为从大到小排序,则未输入至归并队列的所有已排序子表的最大值,小于当前归并队列中的至少一个已排序子表中最小值的最大值;
归并排序模块,用于按照所述排序类型,对所述归并队列中的已排序子表进行归并排序,获取并输出所述待排序数据的归并排序结果;
循环模块,用于如果确定所述归并队列中至少一个已排序子表中的数据已经全部输出,则重新激活所述归并队列确定模块执行,直至完成将全部已排序子表加入所述归并队列。
9.根据权利要求8 所述的装置,其特征在于,所述归并排序模块包括:
数量获取单元,用于获取所述归并队列中所述已排序子表的数量;
子表输出单元,用于如果确定所述已排序子表的数量为一个,则直接输出所述已排序子表;
归并排序单元,用于如果确定所述已排序子表的数量为至少两个,则对所述归并队列执行归并排序的操作,直至所述归并队列中至少一个已排序子表中的数据已经全部输出。
CN201711104222.8A 2017-11-10 2017-11-10 一种数据归并排序方法及装置 Active CN107908714B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201711104222.8A CN107908714B (zh) 2017-11-10 2017-11-10 一种数据归并排序方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201711104222.8A CN107908714B (zh) 2017-11-10 2017-11-10 一种数据归并排序方法及装置

Publications (2)

Publication Number Publication Date
CN107908714A CN107908714A (zh) 2018-04-13
CN107908714B true CN107908714B (zh) 2021-05-04

Family

ID=61844650

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201711104222.8A Active CN107908714B (zh) 2017-11-10 2017-11-10 一种数据归并排序方法及装置

Country Status (1)

Country Link
CN (1) CN107908714B (zh)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN109492191B (zh) * 2018-09-17 2024-05-07 平安科技(深圳)有限公司 计算投保概率的方法、装置、计算机设备和存储介质
CN110413821A (zh) * 2019-07-31 2019-11-05 四川长虹电器股份有限公司 数据标注方法
CN110837366A (zh) * 2019-10-11 2020-02-25 平安科技(深圳)有限公司 一种表单生成方法、电子装置及计算机可读存储介质
CN111562898B (zh) * 2020-05-11 2023-06-09 上海大学 一种基于fpga实现的多级归并排序方法
CN112947890B (zh) * 2021-03-09 2021-11-02 中科驭数(北京)科技有限公司 一种归并排序方法及装置
CN113076312B (zh) * 2021-03-11 2022-11-18 中科驭数(北京)科技有限公司 归并树形排序装置、排序系统及排序方法
CN113392140B (zh) * 2021-06-11 2023-05-09 上海达梦数据库有限公司 一种数据排序方法、装置、电子设备及存储介质

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104360824A (zh) * 2014-11-10 2015-02-18 北京奇虎科技有限公司 一种数据合并的方法和装置
CN104601732A (zh) * 2015-02-12 2015-05-06 北京金和软件股份有限公司 一种快速实现多路数据归并的方法
CN105264488A (zh) * 2013-05-13 2016-01-20 微软技术许可有限责任公司 使用数组对来合并有序列表

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI459223B (zh) * 2012-08-15 2014-11-01 Hon Hai Prec Ind Co Ltd 海量資料索引建立系統及方法

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105264488A (zh) * 2013-05-13 2016-01-20 微软技术许可有限责任公司 使用数组对来合并有序列表
CN104360824A (zh) * 2014-11-10 2015-02-18 北京奇虎科技有限公司 一种数据合并的方法和装置
CN104601732A (zh) * 2015-02-12 2015-05-06 北京金和软件股份有限公司 一种快速实现多路数据归并的方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
一种新的多路归并排序网络;赵立军等;《计算机研究与发展》;19991231;第36卷(第4期);第417-422页 *
分段有序归并排序算法;何奉道;《西南交通大学学报》;19921231(第87期);第41-46页 *

Also Published As

Publication number Publication date
CN107908714A (zh) 2018-04-13

Similar Documents

Publication Publication Date Title
CN107908714B (zh) 一种数据归并排序方法及装置
US20180157711A1 (en) Method and apparatus for processing query based on heterogeneous computing device
US7908283B2 (en) Finding superlatives in an unordered list
US8843502B2 (en) Sorting a dataset of incrementally received data
CN109325032B (zh) 一种索引数据存储及检索方法、装置及存储介质
EP3432157B1 (en) Data table joining mode processing method and apparatus
CN108415912B (zh) 基于MapReduce模型的数据处理方法和设备
US20170270162A1 (en) Query optimization method in distributed query engine and apparatus thereof
CN112085644B (zh) 多列数据排序方法、装置、可读存储介质和电子设备
JP6418431B2 (ja) 効率的な1対1結合のための方法
JP2018518764A (ja) オブジェクト検索方法、装置およびサーバ
CN112015366B (zh) 数据排序方法、数据排序装置及数据库系统
US20140047221A1 (en) Fusing flag-producing and flag-consuming instructions in instruction processing circuits, and related processor systems, methods, and computer-readable media
CN113177024B (zh) 一种海量数据场景下的数据全局合并方法
US10101965B1 (en) Method and apparatus for high speed streaming sorter
US8667008B2 (en) Search request control apparatus and search request control method
US8196082B1 (en) Signal routing and pin placement
CN116521733A (zh) 一种数据查询方法及装置
US9201982B2 (en) Priority search trees
CN112818007B (zh) 数据处理方法、装置及可读存储介质
CN109992687B (zh) 人脸数据的搜索方法、装置、电子设备及可读存储介质
US10402230B2 (en) System allocating links for data packets in an electronic system
CN114546944B (zh) 多进程负载均衡的数据库文件排序优化方法及装置
US20200057638A1 (en) Linear feedback shift register for a reconfigurable logic unit
WO2022262737A1 (zh) 数据处理方法、装置、芯片及计算机可读存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant