CN113392140A - 一种数据排序方法、装置、电子设备及存储介质 - Google Patents
一种数据排序方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN113392140A CN113392140A CN202110655370.9A CN202110655370A CN113392140A CN 113392140 A CN113392140 A CN 113392140A CN 202110655370 A CN202110655370 A CN 202110655370A CN 113392140 A CN113392140 A CN 113392140A
- Authority
- CN
- China
- Prior art keywords
- merging
- memory
- sorting
- ordered
- data
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2474—Sequence data queries, e.g. querying versioned data
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
- G06F16/285—Clustering or classification
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Probability & Statistics with Applications (AREA)
- Fuzzy Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种数据排序方法、装置、电子设备及存储介质。所述方法包括:确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;根据所述排序方式对所述待排序数据进行排序。利用该方法,能够计算所需要的排序内存并尽量申请所需要的排序内存,有效避免由于排序内存过小导致的多次读写磁盘,从而影响排序性能,还可以避免由于排序内存过大造成的内存资源浪费。
Description
技术领域
本发明实施例涉及数据库技术领域,尤其涉及一种数据排序方法、装置、电子设备及存储介质。
背景技术
结构化查询语言(Structured Query Language,SQL)是最重要也是最常用的关系数据库操作语言,ORDER BY子句是SQL标准中用于对数据进行排序处理的子句。在数据库的功能中,排序功能是非常重要的。除了ORDER BY子句和创建二级索引要使用排序功能外,DISTINCT子句和连接操作,也可能会用到排序功能。
在相关技术中,基于内部排序和多路归并的排序方式进行数据排序,其中一种方法包括以下步骤:步骤1:按照INI参数指定内存块大小分批加载待排序的数据到内存块中,直至待排序数据全部加载完毕,或者内存块全部占满;步骤2:依次对每个内存块中的数据进行内部排序,得到多个有序片段;步骤3:对多个内存块中的有序片段进行一趟或多趟归并排序,排序完成后,判断待排序数据是否加载完毕,若未加载完毕,则将得到的有序片段保存到磁盘中,执行步骤1,否则,判断磁盘中是否存在待排序的有序片段,若存在,则将本次得到的有序片段保存到磁盘中并执行步骤4;若不存在,则排序完成;步骤4:对磁盘中的有序片段进行一趟或多趟归并排序。
上述排序方法存在的问题包括排序内存大小受INI参数控制,在执行过程中排序内存大小是固定的。排序内存过小会导致多次读写磁盘,影响排序性能;排序内存过大则会造成内存资源浪费。
发明内容
本发明实施例提供了一种数据排序方法、装置、电子设备及存储介质,能够计算所需要的排序内存并尽量申请所需要的排序内存,有效避免由于排序内存过小导致的多次读写磁盘,从而影响排序性能,还可以避免由于排序内存过大造成的内存资源浪费。
第一方面,本发明实施例提供了一种数据排序方法,包括:
确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;
若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;
根据所述排序方式对所述待排序数据进行排序。
第二方面,本发明实施例还提供了一种数据排序装置,包括:
申请模块,用于确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;
确定模块,用于若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;
排序模块,用于根据所述排序方式对所述待排序数据进行排序。
第三方面,本发明实施例还提供了一种电子设备,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器用于实现本发明任意实施例中所述的数据排序方法。
第四方面,本发明实施例还提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如本发明任意实施例所提供的数据排序方法。
本发明实施例提供了一种数据排序方法、装置、电子设备及存储介质,首先确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;然后若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;最后根据所述排序方式对所述待排序数据进行排序。利用上述技术方案,能够计算所需要的排序内存并尽量申请所需要的排序内存,有效避免由于排序内存过小导致的多次读写磁盘,从而影响排序性能,还可以避免由于排序内存过大造成的内存资源浪费。
附图说明
图1为本发明实施例一所提供的一种数据排序方法的流程示意图;
图2为本发明实施例二所提供的一种数据排序方法的示例流程图;
图3为本发明实施例三所提供的一种数据排序装置的结构示意图;
图4为本发明实施例四所供的一种电子设备的结构示意图。
具体实施方式
下面结合附图和实施例对本发明作进一步的详细说明。可以理解的是,此处所描述的具体实施例仅仅用于解释本发明,而非对本发明的限定。另外还需要说明的是,为了便于描述,附图中仅示出了与本发明相关的部分而非全部结构。
在更加详细地讨论示例性实施例之前应当提到的是,一些示例性实施例被描述成作为流程图描绘的处理或方法。虽然流程图将各项操作(或步骤)描述成顺序的处理,但是其中的许多操作可以被并行地、并发地或者同时实施。此外,各项操作的顺序可以被重新安排。当其操作完成时所述处理可以被终止,但是还可以具有未包括在附图中的附加步骤。所述处理可以对应于方法、函数、规程、子例程、子程序等等。此外,在不冲突的情况下,本发明中的实施例及实施例中的特征可以相互组合。
本发明使用的术语“包括”及其变形是开放性包括,即“包括但不限于”。术语“基于”是“至少部分地基于”。术语“一个实施例”表示“至少一个实施例”。
在当前的数据库技术中,利用内部排序和多路归并排序的基础上,实现了以下两种数据排序方法。
当分类标志参数SORT_FLAG为0时,方法一的排序过程如下:
1)判断当前内存是否足够容纳下所有的待排序数据,若是,则将所有待排序数据加载到内存中,并直接进行内部排序,排序完成后,执行步骤4);若否,执行步骤2)。
2)从所有待排序数据中取出一部分数据加载到内存中,将内存中的待排序数据进行内部排序,得到一个有序片段,将该有序片段保存到磁盘上,继续执行步骤2),直至所有的待排序数据处理完毕,执行步骤3)。
3)对保存在磁盘上的多个有序片段进行一趟或多趟归并排序,排序完成后,执行步骤4)。
4)输出排序结果,排序结束。
当分类标志参数SORT_FLAG为1时,方法二的排序过程如下:
1)按INI参数指定内存块大小分批加载待排序的数据到内存块中,直至待排序数据全部加载完毕,或者内存块全部占满,执行步骤2)。
2)依次对每个内存块中的待排序数据分别进行内部排序,得到多个有序片段,执行步骤3)。
3)对多个内存块中的有序片段进行一趟或多趟归并排序,排序完成后,判断待排序数据是否加载完毕,若未加载完毕,则将得到的有序片段保存到磁盘中,执行步骤1),否则,判断磁盘中是否存在待排序的有序片段,若存在,则将本次得到的有序片段保存到磁盘中,执行步骤4),若不存在,执行步骤5)。
4)对磁盘中的有序片段进行一趟或多趟归并排序,排序完成后,执行步骤5)。
5)输出排序结果,排序结束。
上述两种排序方法存在以下四个缺点:
缺点一:排序内存大小受INI参数控制,在执行过程中排序内存的大小是固定的。排序内存过小会导致多次读写磁盘,影响排序性能;排序内存过大则会造成内存资源浪费。
缺点二:归并内存大小受INI参数控制,在执行过程中是固定的。归并内存过小,不足以容纳一趟归并所需要的数据时,会采取多趟归并排序,导致多次读写磁盘,影响排序性能。
缺点三:内存块大小受INI参数控制,在执行过程中是固定的。SORT_FLAG为1时,如果内存块大小很大,会导致内部排序的性能下降。
缺点四:SORT_FLAG为1时,如果中间得到很多个有序片段,且可以对全部有序片段进行一趟归并,则一趟归并的效率会很低。
本发明实施例提供的一种数据排序方法可以有效解决上述四个缺点。
实施例一
图1为本发明实施例一所提供的一种数据排序方法的流程示意图,该方法可适用于对数据库中的待排序数据进行排序的情况,该方法可以由数据排序装置来执行,其中该装置可由软件和/或硬件实现,并一般集成在电子设备上,在本实施例中电子设备包括但不限于:计算机设备和服务器等。
如图1所示,本发明实施例一提供的一种数据排序方法,包括如下步骤:
S110、确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存。
在本实施例中,如果待排序数据为空则无法对待排序数据进行排序;若待排序数据不为空,则可以计算待排序数据全部加载到内存中所需要的排序内存。
其中,待排序数据可以为需要进行排序的数据。排序内存可以为待排序数据进行内部排序时需要的内存空间大小。
在本实施例中,申请所需的排序内存,若申请成功,则确定排序方式;若申请失败,则可以减小,如减半申请所需排序内存并确定申请是否成功,若依然失败则可以继续减半申请所需排序内存直至申请成功。
S120、若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式。
在本实施例中,分类标志参数可以为一个标志排序方式的参数,示例性的,分类标志参数取值为0时可以对应一种排序方式;分类标志参数取值为1时可以对应另一种排序方式。根据分类标志参数可以有效区分使用哪种排序方式对待排序数据进行排序。可以理解的是,分类标志参数可以由用户选择,即用户可以自主选择排序方式;分类标志参数也可以由电子设备对待排序数据进行分析后自动确定,此处不对确定方式进行限定。
S130、根据所述排序方式对所述待排序数据进行排序。
在本实施例中,排序方式可以包括多种,此处不作限定。在此对不同排序方式的具体排序过程不做具体说明,详细排序过程可以根据具体选取的排序方式进行细化展开,细化展开的部分见下文。
本发明实施例一提供的一种数据排序方法,首先确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;然后若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;最终根据所述排序方式对所述待排序数据进行排序。利用上述方法,能够计算所需要的排序内存并尽量申请所需要的排序内存,有效避免由于排序内存过小导致的多次读写磁盘,从而影响排序性能,还可以避免由于排序内存过大造成的内存资源浪费。
进一步的,在根据分类标志参数的取值确定排序方式之前,还包括:根据预设归并内存总大小和每路数据所占的内存大小确定最大归并路数,所述最大归并路数用于确定使用不同排序方式时对应的归并路数;其中,所述最大归并路数表示所述预设归并内存总大小最多能归并的路数;每路数据为每路包括的设定数量行的数据。
示例性的,确定最大归并路数的方式可以为:若预设归并内存总大小为M,每路数据所占的内存为每路各50行数据所占的空间大小,则最大归并路数T_max的计算公式可以为:T_max=M/(每路各50行数据所占的空间大小)。
进一步的,若所述分类标志参数的取值为第一预设值,则所述排序方式包括:若所述排序内存大于或等于所述待排序数据所占内存,则对所述待排序数据进行内部排序;若所述排序内存小于所述待排序数据所占内存,则将所述待排序数据分为多次加载到所述排序内存中;将每次加载到所述排序内存中的部分待排序数据进行内部排序生成有序片段,并将所述有序片段保存到磁盘上;对保存到磁盘上的多个有序片段进行一趟归并排序或多趟归并排序。
其中,第一预设值可以为预先设置的参数数值,第一预设值可以为任意数值,示例性的,第一预设值可以为0。有序片段可以为一系列数据按照一定顺序排列组成的片段,示例性的,有序片段可以为(1,3,4)。
其中,在内存中对待排序数据直接进行排序的算法称为内部排序,一般使用堆排序算法来实现内部排序。
具体的,需要判断所述排序内存是否能够容纳下所有的待排序数据,若是,则可以将所有待排序数据加载到排序内存中,并对排序内存中的待排序数据进行内部排序;若无法将所有待排序数据加载到排序内存中,则可以从待排序数据中提取一部分数据加载到排序内存中,将排序内存中的待排序数据进行内部排序后可以得到一个有序片段,将该有序片段保存到磁盘上;继续从待排序数据中提取一部分数据加载到排序内存中进行内部排序并将排序后得到的有序片段保存至磁盘上,重复上述过程,直到所有待排序数据都加载完成。
进一步的,对保存到磁盘上的多个有序片段进行一趟归并排序或多趟归并排序,包括:按照每路包括设定数量行数据进行归并,确定进行一趟归并排序所需的归并内存;若所述归并内存小于或等于预设归并内存,则将磁盘上待归并的多路有序片段加载到所述归并内存中并进行一趟归并排序;若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请;若申请成功,则将磁盘上待归并的多路有序片段加载到归并内存中进行一趟归并排序;若申请失败,则根据变量的取值重新确定进行一趟归并排序所需的归并内存直到申请成功或所述变量的取值等于设定数量行;根据所述最大归并路数对磁盘中的初始待排序有序片段依次进行归并排序,并将每次排序后得到的有序片段保存在磁盘中;当磁盘中的所述初始待排序有序片段全部排序完成后得到多个有序片段,继续计算对得到的多个有序片段进行一趟归并排序所需的归并内存,直到磁盘中的所有待排序有序片段全部排序完成。
在本实施例中,在进行一趟归并排序或多趟归并排序时需要用到多路归并,多路归并可以理解为对已经有序的多个片段,使用归并排序算法来进行排序,其中,一个片段表示一路/组数据。
示例性的,针对多路归并排序方法,对两个有序片段进行排序的两路归并算法,有序片段1(1,3,4)和有序片段2(2,5,6)进行归并排序,默认排序方式为升序排序,则排序过程如下:
1)首先分别从两个有序片段中选取头部数据1和2放入归并内存中,比较1和2的大小,则输出较小值1;
2)从有序片段1中选取下一个数据3放入归并内存中,比较3和2的大小,输出较小值2;
3)从有序片段2中选取下一个数据5放入归并内存中,比较3和5的大小,输出较小值3;
4)从有序片段1中选取下一个数据4放入归并内存中,比较4和5的大小,输出较小值4;
5)由于有序片段1中的数据全部输出完成,因此将有序片段2中的剩余数据依次输出,即依次输出5和6;
6)两路归并排序的结果为(1,2,3,4,5,6)。
一趟归并排序的排序方式可以示例性的理解为:假如现在有10个有序片段,对这10个有序片段进行升序排序,如果归并内存可以容纳下10个值,则可以首先从10个有序片段中选取出10个头部数据放入归并内存中,进行大小比较后输出较小的数据,依照上述方式继续选取下一个数据到归并内存中进行比较后输出,直到所有有序片段上的数据全部输出完成。
多趟归并排序的排序方式可以示例性的理解为:假如现在有10个有序片段,对这10个有序片段进行升序排序,如果归并内存只能容纳下5个值,那么就将10个有序片段分为两组,每组5个有序片段,对两组有序片段分别进行一次归并排序,归并完成后可以得到2个有序片段,再对得到的2个有序片段进行一次归并排序,即可以得到最终的排序结果。其中,第一趟归并的路数为5,第二趟归并的路数为2。
在本实施例中,进行一趟归并排序所需的归并内存小于或等于预设归并内存可以表示在预设归并内存中进行一趟归并排序就可以将所有有序片段上的数据排序完成。其中,预设归并内存可以为预先给定的归并内存。
在本实施例中,进行一趟归并排序所需的归并内存大于预设归并内存可以表示在预设归并内存中不能进行一趟归并,此时可以设置一个变量I,并将变量I取值为1。
其中,若申请成功,则可以在申请的归并内存中进行一趟归并排序,加载磁盘上待归并的多路有序片段到归并内存中,进行一趟归并排序。
其中,若申请失败,则可以将(设定数量行-I)作为每路包括的最少行数重新计算一趟归并排序所需要的归并内存,并将变量I的取值设为(I+1);判断I是否小于设定数量行的行数,若小于,则重新将(设定数量行-I)作为每路包括的最少行数重新计算一趟归并排序所需要的归并内存,重复上述过程,每次I的取值改变后每路包括的最少行数也在变化,因此计算出的一趟归并所需的归并内存也是不同的,根据不同的所需内存申请归并内存,直到申请成功或I的取值等于设定数量行,当I的取值等于设定数量行时表示无法申请到足够的归并内存来进行一趟归并排序,因此需要进行多趟归并排序。
其中,进行多趟归并排序的过程可以为:以最大归并路数对磁盘中的有序片段依次进行归并排序,并将每次归并排序得到的有序片段保存到磁盘上,当磁盘中的有序片段全部排序完成后,重新按照每路至少取设定数量行数据进行归并来计算一趟归并所需的归并内存并判断是否能在预设的归并内存中进行一趟归并排序,若不能,则重复执行申请归并内存的操作以及申请失败后进行多趟归并排序的操作,直到所有有序片段加载到归并内存中进行一趟归并排序。
进一步的,若所述分类标志参数取值为第二预设值,则所述排序方式包括:确定预设行待排序数据占用的内存块大小,并按照所述内存块大小将所述排序内存分块得到多个相同大小的内存块;将所述待排序数据加载到所述内存块中,对所述内存块中的待排序数据进行内部排序得到多个有序片段,根据所述有序片段的个数确定对所述进行内部排序后得到的多个有序片段进行一趟归并排序或多趟归并排序。
在本实施例中,计算预设行待排序数据占用的内存大小,将其作为内存块大小,按照该大小将排序内存分块。其中,若预设行待排序数据所占用的内存大小小于1M,则按照1M计算。
其中,将待排序数据加载到内存块中,如果该内存块加载满,则放入下一个内存块中,直到所有内存块全部占满。
进一步的,根据有序片段的个数确定对有序片段进行一趟归并排序或多趟归并排序,包括:若所述有序片段个数大于预设值,则对所述有序片段进行多趟归并排序;若所述有序片段个数小于或等于预设值,则对所述有序片段进行一趟归并排序或多趟归并排序。
在本实施例中,预设值可以为预先设置的数值,此处对预设值的取值不做限定,示例性的,预设值可以为5000。
可以理解的是,根据有序片段个数与预设值的大小关系可以对有序片段执行不同的排序过程。
进一步的,所述若所述有序片段个数大于预设值,则对所述有序片段进行多趟归并排序,包括:若所述有序片段个数大于预设值,根据所述有序片段的个数以及最大归并路数确定所述多趟归并排序中第一趟归并排序对应的归并路数;以所述归并路数分别对所述内存块中的有序片段依次进行归并排序;保存排序后的有序片段;若所述排序后的有序片段全部保存在内存中,则重新确定所述排序后的有序片段个数是否大于预设值,若是,则继续对所述排序后的有序片段进行多趟归并排序,直到排序后的有序片段个数小于或等于设定值或排序后的有序片段全部保存在磁盘上;其中,若排序后的有序片段个数小于或等于设定值,则重新对所述有序片段进行一趟归并排序或多趟归并排序。
在本实施例中,若有序片段的个数大于预设值,则可以对有序片段进行多趟归并排序,此处的多趟归并排序可以理解为两趟归并排序。
具体的,根据所述有序片段的个数以及最大归并路数确定所述多趟归并排序中第一趟归并排序对应的归并路数可以包括:多趟归并排序中的第一趟归并排序的路数可以为有序片段个数开方后下取整再加1,多趟归并排序中的第二趟归并排序的路数可以为有序片段个数与第一趟归并排序的路数的比值。如果第二趟归并排序的路数小于预设值且第二趟归并排序的路数小于最大归并路数,则将原有的第一趟归并排序的路数作为归并路数对内存块中的有序片段依次进行归并排序;如果不满足第二趟归并排序的路数小于预设值且第二趟归并排序的路数小于最大归并路数,则可以将最大归并路数作为归并路数对内存块中的有序片段依次进行归并排序。
需要说明的是,由于归并排序的路数小于有序片段的个数,则可以确定需要进行多次归并排序。示例性的,若有序片段的个数为5000个,归并排序的路数为50路,则需要进行100次归并排序才可以将所有有序片段排序完成。
进一步的,所述保存排序后的有序片段,包括:为每一次进行归并排序申请内存空间;若申请内存空间成功,则将本次归并得到的有序片段存放至申请成功的内存空间中,释放参与本次归并的有序片段所占用的内存空间,继续进行下一次的归并排序;若申请内存空间失败,则将本次归并得到的有序片段存放至磁盘上,释放参与本次归并的有序片段所占用的内存空间,并将保存到申请内存空间中的有序片段转存到磁盘上,将以后每次进行归并排序后得到的有序片段存放至磁盘上。
具体的,每一次进行归并排序都需要申请一份内存空间,所述内存空间大小等于归并路数乘以每路数据所需的内存。申请成功后,可以将本次归并排序得到的有序片段存放至申请成功的内存空间中,并且可以释放参与本次归并排序的有序片段所占用的内存空间,然后继续进行下一次归并排序。若申请失败,则可以将本次归并排序得到的有序片段保存到磁盘上,释放参与本次归并的有序片段所占用的内存空间,并将之前归并后存放在新申请的内存中的有序片段也转存到磁盘上,接下来每次归并后都无需再申请内存,可以直接将得到的有序片段保存到磁盘上。因此,内存块中所有的有序片段归并排序结束后得到的有序片段全部保存在内存中或全部保存在磁盘上。当内存块中的有序片段全部排序完成后判断排序后的有序片段全部保存在内存中还是全部保存在磁盘上。
在本实施例中,若排序后的有序片段全部保存在内存中,则可以继续确定排序后的有序片段个数是否大于预设值,若是,则可以继续对有序片段进行多趟归并排序,重复执行上述过程,直到排序后得到的有序片段全部保存在磁盘上或者排序后得到的有序片段个数小于或等于预设值。若排序后的有序片段个数小于或等于预设值,则可以跳转到其他操作。
进一步的,若所述排序后的有序片段全部保存在磁盘上,则判断所述待排序数据是否全部加载到内存块中;若是,则对保存在磁盘上的多个有序片段进行一趟归并排序或多趟归并排序;若否,则将未加载的待排序数据加载到内存块中并重新根据对所述内存块中的待排序数据进行内部排序后得到的多个有序片段的个数,确定对所述有序片段进行一趟归并排序或多趟归并排序,直到所述待排序数据全部加载完成。
在本实施例中,对保存在磁盘上的多个有序片段进行一趟归并排序或多趟归并排序包括的内容已在前文进行过详细说明,此处不做赘述,可参考前文。
需要说明的是,由于排序后的有序片段全部保存在磁盘上,因此可将之前被待排序数据占满的内存块都清空,然后再将未加载到内存块中的待排序数据加载到已清空的内存块中。
具体的,若还有待排序数据没有加载到内存块中,则可以将剩余的待排序数据加载到清空的内存块中,直到所有内存块全部占满,对每个内存块进行内部排序得到多个有序片段,再根据有序片段的个数与预设值的大小确定对有序片段进行一趟归并排序还是多趟归并排序,若进行多趟归并排序,需要重新确定归并排序的归并路数并在每一次归并排序时申请内存空间,根据申请内存空间是否成功确定每次归并排序得到的有序片段是保存到内存中还是保存到磁盘上。待所有得到的有序片段全部保存到磁盘上后重复执行上述过程,直至所有的待排序数据全部加载完成,然后可以将保存在磁盘上的多个有序片段进行一趟或多趟归并排序。
进一步的,所述若所述有序片段个数小于或等于预设值,则对所述有序片段进行一趟归并排序或多趟归并排序,包括:按照每路包括设定数量行数据进行归并,确定进行一趟归并排序所需的归并内存;若所述归并内存小于或等于预设归并内存,则将内存块中待归并的多路有序片段加载到归并内存中进行一趟归并排序;判断磁盘中是否存在待排序的有序片段;若是,则将本次排序后得到的有序片段保存到磁盘上,并判断所述待排序数据是否全部加载到内存块中,直到所述待排序数据全部加载完成,对最终排序后的有序片段进行一趟归并排序或多趟归并排序;若否,且待排序数据未全部加载到内存块中,则将本次排序得到的有序片段保存到磁盘中;将未加载到内存块中的待排序数据加载到内存块中;对所述内存块中的待排序数据进行内部排序得到多个有序片段,根据有序片段的个数确定对所述有序片段进行一趟归并排序或多趟归并排序,直到所述待排序数据全部加载完成,再对磁盘上待排序的有序片段进行一趟归并排序或多趟归并排序。
具体的,按照每路至少取设定数量行数据进行归并来计算一趟归并排序所需要的归并内存,如果所需要的归并内存小于或等于预设归并内存,则可以表示预设的归并内存可以容纳下这些数据,即在预设归并内存中进行一趟归并排序就可以将当前待排序的全部有序片段排序完成;可以对当前待排序的全部有序片段进行一趟归并排序,排序完成后可以判断磁盘中是否存在待排序的有序片段,若存在,则可以将本次排序得到的有序片段保存在磁盘中,并判断待排序数据是否全部加载到内存块中,若是,则可以对保存在磁盘上的多个有序片段进行一趟归并排序或多趟归并排序;若还存在待排序数据没有加载到内存块中,则可以将未加载到内存块中的待排序数据加载到清空内存的内存块中,直到所有内存块占满,进行内部排序得到有序片段,若得到的有序片段个数小于或等于预设值,则可以继续按照每路至少取设定数量行数据进行归并来计算一趟归并所需的归并内存,根据所需的归并内存确定进行一趟归并或多趟归并排序,若仍然进行一趟归并排序,则可以进行一趟归并排序后判断磁盘中是否存在待排序的有序片段,若存在,则将本次排序得到的有序片段保存到磁盘中,继续判断是否有待排序数据没有加载到内存块中,若存在,则重复上述过程,直到所有待排序数据都加载完成。
具体的,按照每路至少取设定数量行数据进行归并来计算一趟归并排序所需要的归并内存,如果所需要的归并内存小于或等于预设归并内存,则可以表示预设的归并内存可以容纳下这些数据,即在预设归并内存中进行一趟归并排序就可以将当前待排序的全部有序片段排序完成;可以对当前待排序的全部有序片段进行一趟归并排序,排序完成后可以判断磁盘中是否存在待排序的有序片段,若存在,则可以将本次排序得到的有序片段保存在磁盘中,并判断全部待排序数据是否全部加载到内存块中,若磁盘中不存在待排序的有序片段,则可以继续判断是否有待排序的有序片段未加载到内存块中,若否,则表示所有的待排序数据都排序完成,若是,则将本次排序得到的有序片段保存到磁盘上,继续将未加载到内存块中的待排序数据加载到已经清空的内存块中,直到所有内存块占满,并执行后续操作,直到待排序数据全部加载完成,再对磁盘上待排序的有序片段进行一趟归并排序或多趟归并排序。
进一步的,若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请;若申请成功,则将内存块中待归并的多路有序片段加载到归并内存中进行一趟归并排序;若申请失败,则根据变量的取值重新确定进行一趟归并排序所需的归并内存直到申请成功或所述变量的取值等于设定数量行;根据所述最大归并路数对所述内存块中的有序片段依次进行归并排序,并将每次排序得到的有序片段保存到磁盘中;当所述内存块中的有序片段全部排序完成后,继续判断所述待排序数据是否全部加载到内存块中,直到所述待排序数据全部加载完成,则对最终排序后的有序片段进行一趟归并排序或多趟归并排序。
具体的,若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请,若申请成功,则可以在申请的归并内存中对当前待排序的有序片段进行一趟归并排序,排序完成后,判断磁盘中是否存在待排序的有序片段,若存在,则可以将本次排序得到的有序片段保存到磁盘中,判断待排序数据是否全部加载到内存块中,若是,则对保存在磁盘上的多个有序片段进行一趟归并排序或多趟归并排序;若否,则可以继续将未加载到内存块中的待排序数据加载到清空的内存块中,直至所有内存块占满并执行后续操作。
具体的,若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请,若申请成功,则可以在申请的归并内存中对当前待排序的有序片段进行一趟归并排序,排序完成后,判断磁盘中是否存在待排序的有序片段,若不存在,则可以继续判断是否存在待排序数据未加载到内存块中,若否,则可直接输出当前排序结果;若是,则将本次排序得到的有序片段保存至磁盘后,继续将未加载到内存块中的待排序数据加载到清空的内存块中,直至所有内存块占满,执行后续操作。
具体的,若所述归并内存大于预设归并内存表示不能进行一趟归并排序,可以设置变量I的取值为1,根据所述归并内存进行内存申请,若申请失败,则可以将(设定数量行-I)作为每路至少包括的行数重新计算进行一趟归并排序所需要的归并内存,将变量I取值为(I+1),并判断I是否小于设定数量行,若I小于设定数量行,则按照新计算的归并内存,继续尝试申请内存;如果I等于设定数量行,则可以表示无法申请到足够的归并内存来进行一趟归并,因此需要进行多趟归并排序。其中,多趟归并排序的具体过程可以包括以最大归并路数作为归并路数对当前待排序的有序片段依次进行归并排序,并将每次归并排序得到的有序片段保存到磁盘上,当前待排序的有序片段全部排序完成后,继续判断是否有待排序数据未加载到内存块中,若否,则可以对保存在磁盘上的多个有序片段进行一趟归并排序或多趟归并排序;若是,则可以将未加载到内存块中的待排序数据加载到清空的内存块中,直到所有内存块占满,执行后续操作。
实施例二
图2为本发明实施例二所提供的一种数据排序方法的示例流程图,本实施例二为上述各实施例的具体实施例。
如图2所示,本发明实施例二提供的一种数据排序方法,包括以下步骤:
S210、计算待排序数据全部加载到内存中所需要的排序内存。
S220、申请所需要的排序内存。
S230、若申请失败,则减半申请所需排序内存,直到申请成功。
S240、若申请成功,则根据分类标志参数的取值确定排序方式。
其中,申请成功后,还需要计算最大归并路数。设给定的归并内存总大小为M,给定的归并内存最多能归并的路数为T_max,T_max=M/(每路各50行数据所占的空间大小)。
在本实施例中,分类标志参数SORT_FLAG取值为0时,对应的排序方式一包括以下步骤:
步骤1、判断排序内存是否足够容纳下所有的待排序数据,若是,则将所有待排序数据加载到排序内存中,并直接进行内部排序,排序完成后,执行步骤4;若否,执行步骤2;
步骤2、从所有待排序数据中取出一部分待排序数据加载到排序内存中,将排序内存中的待排序数据进行内部排序,得到一个有序片段,将该有序片段保存到磁盘上,继续执行步骤2,直至所有的待排序数据处理完毕,执行步骤3;
步骤3、对保存在磁盘上的多个有序片段进行一趟或多趟归并排序,排序完成后,执行步骤4;
步骤4、输出排序结果,排序完成。
需要进一步说明的是,上述步骤3中的“对保存在磁盘上的多个有序片段进行一趟或多趟归并排序”的具体流程如下:
1)按照每路至少取50行数据进行归并来计算一趟归并所需要的归并内存,记为M_need,如果M_need小于或等于给定的归并内存,则执行步骤4);如果M_need大于给定的归并内存,则置变量I为1,执行步骤2);
2)根据M_need申请归并内存,如果申请成功,则可以在申请的归并内存中进行一趟归并,执行步骤4);如果申请失败,则将(50-I)作为每路最少行数重新计算M_need,并将变量I置为(I+1),然后判断I是否小于50,如果I小于50,执行步骤2)继续尝试申请内存;如果I等于50,表示无法申请到足够的归并内存来进行一趟归并,因此需要进行多趟归并,执行步骤3);
3)以T_max为归并路数对磁盘中的有序片段依次进行归并排序,并将每次归并排序得到的有序片段保存到磁盘上,待当前磁盘中的有序片段全部排序完成后,执行步骤1);
4)加载磁盘上待归并的多路有序片段到归并内存中,进行一趟归并排序。
在本实施例中,分类标志参数SORT_FLAG取值为1时,对应的排序方式二包括以下步骤:
步骤1、计算10000行待排序数据所占用的内存大小(若小于1M,则按照1M计算),并将其作为内存块大小,按照该大小将排序内存分块。执行步骤2;
步骤2、将待排序数据加载到内存块中,如果该内存块加载满,就放入下一个内存块中,直到内存块全部占满。执行步骤3;
步骤3、对每个内存块中的待排序数据分别进行内部排序,全部排序完成后将得到多个有序片段,执行步骤4;
步骤4、如果有序片段个数大于5000,执行步骤5;否则,执行步骤8;
步骤5、对有序片段进行多趟归并排序,设第一趟归并排序的路数为T1,第二趟归并的路数为T2,有序片段的个数为T。则T2=T/T1。如果T2<5000,且T2<T_max,则执行步骤6;否则,置T1=T_max,执行步骤6;
步骤6、以T1为归并路数对内存块中的有序片段依次进行归并排序。
其中,每一次归并都需要申请一份内存空间,空间大小等于归并路数乘以每路数据所需内存,申请成功后,将本次归并得到的有序片段放到申请成功的空间中,并且释放参与本次归并的有序片段所占用的内存空间,然后继续进行下一次归并排序;如果申请失败,则将本次归并得到的有序片段保存到磁盘上,释放参与本次归并的有序片段所占用的内存空间,并将之前归并后保存到新申请的内存中的有序片段也转存到磁盘上,且接下来每次归并后都无需再申请内存,直接将得到的有序片段保存到磁盘上。待内存块中的有序片段全部排序完成后,执行步骤7;
步骤7、判断步骤6得到的有序片段全部保存在内存中还是磁盘上,若全部保存在内存中,则执行步骤4;若全部保存在磁盘上,则执行步骤12;
步骤8、按照每路至少取50行数据进行归并来计算一趟归并所需要的归并内存,记为M_need,如果M_need小于或等于给定的归并内存,则执行步骤11;否则置变量I为1,执行步骤9;
步骤9、根据M_need申请归并内存,如果申请成功,则可以在申请的归并内存中进行一趟归并,执行步骤11);如果申请失败,则将(50-I)作为每路最少行数重新计算M_need,并将变量I置为(I+1),然后判断I是否小于50,如果I小于50,执行步骤9继续尝试申请内存;如果I等于50,则执行步骤10;
步骤10、以T_max为归并路数对当前待排序的有序片段依次进行归并排序,并将每次归并排序得到的有序片段保存到磁盘上,当前待排序的有序片段全部排序完成后,执行步骤12;
步骤11、对当前待排序的全部有序片段进行一趟归并排序,排序完成后,判断磁盘中是否存在待排序的有序片段,若存在,则将本次排序得到的有序片段保存到磁盘中,执行步骤12;若不存在,则判断步骤2中的待排序数据是否加载完毕,若未加载完毕,则将本次排序得到的有序片段保存到磁盘中,执行步骤2,否则执行步骤13;
步骤12、如果步骤2中所有待排序数据都已加载完毕,则对保存在磁盘上的多个有序片段进行一趟或多趟归并排序,排序完成后,执行步骤13;若步骤2中所有待排序数据没有加载完毕,则执行步骤2;
步骤13、输出排序结果,排序完成。
需要进一步说明的是,上述步骤12中的“对保存在磁盘上的多个有序片段进行一趟或多趟归并排序”的具体流程已在上文进行详细说明,此处不做赘述。
本发明实施例二所提供的一种数据排序方法,S210到S230计算所需要的排序内存,并进行申请所需要的排序内存,可以解决现有技术中存在的缺点一;排序方式一中的步骤3以及排序方式二中的步骤8和步骤9可以计算所需要的归并内存,当给定的归并内存过小时,重新申请归并内存,尽可能进行一趟归并排序,减少归并趟数,可以避免反复读写磁盘和读取数据,解决现有技术中存在的缺点二;排序方式二中的步骤1计算出合适的内存块大小来对排序内存进行分块,尽量提高内部排序的性能,解决现有技术中存在的缺点三;排序方式二中的步骤5和步骤6通过减少归并路数,增加归并趟数(尽量为两趟归并),来提高归并效率。同时增加额外的内存来保存归并数据,尽量保证两趟或多趟归并的数据全部保存在内存中,从而避免读写磁盘,解决现有技术中的缺点四。
实施例三
图3为本发明实施例三所提供的一种数据排序装置的结构示意图,该装置可适用于对数据库中的数据进行排序的情况,其中该装置可由软件和/或硬件实现,并一般集成在电子设备上。
如图3所示,该装置包括:申请模块310、确定模块320以及排序模块330。
申请模块310,用于确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;
确定模块320,用于若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;
排序模块330,用于根据所述排序方式对所述待排序数据进行排序。
在本实施例中,该装置首先通过申请模块310确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;然后通过确定模块320用于若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;最后通过排序模块330根据所述排序方式对所述待排序数据进行排序。
本实施例提供了一种数据排序装置,能够计算所需要的排序内存并尽量申请所需要的排序内存,有效避免由于排序内存过小导致的多次读写磁盘,从而影响排序性能,还可以避免由于排序内存过大造成的内存资源浪费。
进一步的,在根据分类标志参数的取值确定排序方式之前,还包括:最大路数确定模块,用于根据预设归并内存总大小和每路数据所占的内存大小确定最大归并路数,所述最大归并路数用于确定使用不同排序方式时对应的归并路数;其中,所述最大归并路数表示所述预设归并内存总大小最多能归并的路数;每路数据为每路包括的设定数量行的数据。
进一步的,若所述分类标志参数的取值为第一预设值,则所述排序方式包括:若所述排序内存大于或等于所述待排序数据所占内存,则对所述待排序数据进行内部排序;若所述排序内存小于所述待排序数据所占内存,则将所述待排序数据分为多次加载到所述排序内存中;将每次加载到所述排序内存中的部分待排序数据进行内部排序生成有序片段,并将所述有序片段保存到磁盘上;对保存到磁盘上的多个有序片段进行一趟归并排序或多趟归并排序。
进一步的,若所述分类标志参数取值为第二预设值,则所述排序方式包括:确定预设行待排序数据占用的内存块大小,并按照所述内存块大小将所述排序内存分块得到多个相同大小的内存块;将所述待排序数据加载到所述内存块中,对所述内存块中的待排序数据进行内部排序得到多个有序片段,根据有序片段的个数确定对有序片段进行一趟归并排序或多趟归并排序。
进一步的,根据有序片段的个数确定对有序片段进行一趟归并排序或多趟归并排序,包括:若所述有序片段个数大于预设值,则对所述有序片段进行多趟归并排序;若所述有序片段个数小于或等于预设值,则对所述有序片段进行一趟归并排序或多趟归并排序。
进一步的,所述若所述有序片段个数大于预设值,则对所述有序片段进行多趟归并排序,包括:若所述有序片段个数大于预设值,根据所述有序片段的个数以及最大归并路数确定所述多趟归并排序中第一趟归并排序对应的归并路数;以所述归并路数分别对所述内存块中的有序片段依次进行归并排序;保存排序后的有序片段;若所述排序后的有序片段全部保存在内存中,则重新确定所述排序后的有序片段个数是否大于预设值,若是,则继续对所述排序后的有序片段进行多趟归并排序,直到排序后的有序片段个数小于或等于预设值或排序后的有序片段全部保存在磁盘上;其中,若排序后的有序片段个数小于或等于设定值,则重新对所述有序片段进行一趟归并排序或多趟归并排序。
进一步的,所述保存排序后的有序片段,包括:为每一次进行归并排序申请内存空间;若申请内存空间成功,则将本次归并得到的有序片段存放至申请成功的内存空间中,释放参与本次归并的有序片段所占用的内存空间,继续进行下一次归并排序;若申请内存空间失败,则将本次归并得到的有序片段存放至磁盘上,释放参与本次归并的有序片段所占用的内存空间,并将保存到申请内存空间中的有序片段转存到磁盘上,将以后每次进行归并排序后得到的有序片段存放至磁盘上。
进一步的,还包括:若所述排序后的有序片段全部保存在磁盘上,则判断所述待排序数据是否全部加载到内存块中;若是,则对保存在磁盘上的多个有序片段进行一趟归并排序或多趟归并排序;若否,则将未加载的待排序数据加载到内存块中并重新根据对所述内存块中的待排序数据进行内部排序后得到的多个有序片段的个数,确定对所述有序片段进行一趟归并排序或多趟归并排序,直到所述待排序数据全部加载完成。
进一步的,所述若所述有序片段个数小于或等于预设值,则对所述有序片段进行一趟归并排序或多趟归并排序,包括:按照每路包括设定数量行数据进行归并,确定进行一趟归并排序所需的归并内存;若所述归并内存小于或等于预设归并内存,则将内存块中待归并的多路有序片段加载到归并内存中进行一趟归并排序;判断磁盘中是否存在待排序的有序片段;若是,则将本次排序后得到的有序片段保存到磁盘上,并判断所述待排序数据是否全部加载到内存块中,直到所述待排序数据全部加载完成,对最终排序后的有序片段进行一趟归并排序或多趟归并排序;若否,且待排序数据未全部加载到内存块中,则将本次排序得到的有序片段保存到磁盘中;将未加载到内存块中的待排序数据加载到内存块中;对所述内存块中的待排序数据进行内部排序得到多个有序片段,根据有序片段的个数确定对所述有序片段进行一趟归并排序或多趟归并排序,直到所述待排序数据全部加载完成,再对磁盘上待排序的有序片段进行一趟归并排序或多趟归并排序。
进一步的,还包括:若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请;若申请成功,则将内存块中待归并的多路有序片段加载到归并内存中进行一趟归并排序;若申请失败,则根据变量的取值重新确定进行一趟归并排序所需的归并内存直到申请成功或所述变量的取值等于设定数量行;根据所述最大归并路数对所述内存块中的有序片段依次进行归并排序,并将每次排序得到的有序片段保存到磁盘中;当所述内存块中的有序片段全部排序完成后,继续判断所述待排序数据是否全部加载到内存块中,直到所述待排序数据全部加载完成,则对最终排序后的有序片段进行一趟归并排序或多趟归并排序。
进一步的,对保存到磁盘上的多个有序片段进行一趟归并排序或多趟归并排序,包括:按照每路包括设定数量行数据进行归并,确定进行一趟归并排序所需的归并内存;若所述归并内存小于或等于预设归并内存,则将磁盘上待归并的多路有序片段加载到所述归并内存中并进行一趟归并排序;若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请;若申请成功,则将磁盘上待归并的多路有序片段加载到归并内存中进行一趟归并排序;若申请失败,则根据变量的取值重新确定进行一趟归并排序所需的归并内存直到申请成功或所述变量的取值等于设定数量行;根据所述最大归并路数对磁盘中的初始待排序有序片段依次进行归并排序,并将每次排序后得到的有序片段保存在磁盘中;当磁盘中的所述初始待排序有序片段全部排序完成后得到多个有序片段,继续计算对得到的多个有序片段进行一趟归并排序所需的归并内存,直到磁盘中的所有待排序有序片段全部排序完成。
上述数据排序装置可执行本发明任意实施例所提供的数据排序方法,具备执行方法相应的功能模块和有益效果。
实施例四
图4为本发明实施例四所供的一种电子设备的结构示意图。如图4所示,本发明实施例四提供的电子设备包括:一个或多个处理器41和存储装置42;该电子设备中的处理器41可以是一个或多个,图4中以一个处理器41为例;存储装置42用于存储一个或多个程序;所述一个或多个程序被所述一个或多个处理器41执行,使得所述一个或多个处理器41实现如本发明实施例中任一项所述的数据排序方法。
所述电子设备还可以包括:输入装置43和输出装置44。
电子设备中的处理器41、存储装置42、输入装置43和输出装置44可以通过总线或其他方式连接,图4中以通过总线连接为例。
该电子设备中的存储装置42作为一种计算机可读存储介质,可用于存储一个或多个程序,所述程序可以是软件程序、计算机可执行程序以及模块,如本发明实施例一或二所提供的数据排序方法对应的程序指令/模块(例如,附图3所示的数据排序装置中的模块,包括:申请模块310、确定模块320以及排序模块330)。处理器41通过运行存储在存储装置42中的软件程序、指令以及模块,从而执行电子设备的各种功能应用以及数据处理,即实现上述方法实施例中数据排序方法。
存储装置42可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序;存储数据区可存储根据电子设备的使用所创建的数据等。此外,存储装置42可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实例中,存储装置42可进一步包括相对于处理器41远程设置的存储器,这些远程存储器可以通过网络连接至设备。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
输入装置43可用于接收输入的数字或字符信息,以及产生与电子设备的用户设置以及功能控制有关的键信号输入。输出装置44可包括显示屏等显示设备。
并且,当上述电子设备所包括一个或者多个程序被所述一个或者多个处理器41执行时,程序进行如下操作:
确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;
若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;
根据所述排序方式对所述待排序数据进行排序。
实施例五
本发明实施例五提供了一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时用于执行数据排序方法,该方法包括:
确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;
若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;
根据所述排序方式对所述待排序数据进行排序。
可选的,该程序被处理器执行时还可以用于执行本发明任意实施例所提供的数据排序方法。
本发明实施例的计算机存储介质,可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是,但不限于,电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(Random Access Memory,RAM)、只读存储器(Read Only Memory,ROM)、可擦式可编程只读存储器(ErasableProgrammable Read Only Memory,EPROM)、闪存、光纤、便携式CD-ROM、光存储器件、磁存储器件、或者上述的任意合适的组合。计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括但不限于:电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于:无线、电线、光缆、无线电频率(Radio Frequency,RF)等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言,诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言,诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
Claims (14)
1.一种数据排序方法,其特征在于,所述方法包括:
确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;
若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;
根据所述排序方式对所述待排序数据进行排序。
2.根据权利要求1所述的方法,其特征在于,在根据分类标志参数的取值确定排序方式之前,还包括:
根据预设归并内存总大小和每路数据所占的内存大小确定最大归并路数,所述最大归并路数用于确定使用不同排序方式时对应的归并路数;
其中,所述最大归并路数表示所述预设归并内存总大小最多能归并的路数;每路数据为每路包括的设定数量行的数据。
3.根据权利要求1所述的方法,其特征在于,若所述分类标志参数的取值为第一预设值,则所述排序方式包括:
若所述排序内存大于或等于所述待排序数据所占内存,则对所述待排序数据进行内部排序;
若所述排序内存小于所述待排序数据所占内存,则将所述待排序数据分为多次加载到所述排序内存中;将每次加载到所述排序内存中的部分待排序数据进行内部排序生成有序片段,并将所述有序片段保存到磁盘上;对保存到磁盘上的多个有序片段进行一趟归并排序或多趟归并排序。
4.根据权利要求1所述的方法,其特征在于,若所述分类标志参数取值为第二预设值,则所述排序方式包括:
确定预设行待排序数据占用的内存块大小,并按照所述内存块大小将所述排序内存分块得到多个相同大小的内存块;
将所述待排序数据加载到所述内存块中,对所述内存块中的待排序数据进行内部排序得到多个有序片段,根据有序片段的个数确定对有序片段进行一趟归并排序或多趟归并排序。
5.根据权利要求4所述的方法,其特征在于,根据有序片段的个数确定对有序片段进行一趟归并排序或多趟归并排序,包括:
若所述有序片段个数大于预设值,则对所述有序片段进行多趟归并排序;
若所述有序片段个数小于或等于预设值,则对所述有序片段进行一趟归并排序或多趟归并排序。
6.根据权利要求5所述的方法,其特征在于,所述若所述有序片段个数大于预设值,则对所述有序片段进行多趟归并排序,包括:
若所述有序片段个数大于预设值,根据所述有序片段的个数以及最大归并路数确定所述多趟归并排序中第一趟归并排序对应的归并路数;
以所述归并路数分别对所述内存块中的有序片段依次进行归并排序;
保存排序后的有序片段;
若所述排序后的有序片段全部保存在内存中,则重新确定所述排序后的有序片段个数是否大于预设值,若是,则继续对所述排序后的有序片段进行多趟归并排序,直到排序后的有序片段个数小于或等于设定值或排序后的有序片段全部保存在磁盘上;其中,若排序后的有序片段个数小于或等于设定值,则重新对所述有序片段进行一趟归并排序或多趟归并排序。
7.根据权利要求6所述的方法,其特征在于,所述保存排序后的有序片段,包括:
为每一次进行归并排序申请内存空间;
若申请内存空间成功,则将本次归并得到的有序片段存放至申请成功的内存空间中,释放参与本次归并的有序片段所占用的内存空间,继续进行下一次归并排序;
若申请内存空间失败,则将本次归并得到的有序片段存放至磁盘上,释放参与本次归并的有序片段所占用的内存空间,并将保存到申请内存空间中的有序片段转存到磁盘上,将以后每次进行归并排序后得到的有序片段存放至磁盘上。
8.根据权利要求6所述的方法,其特征在于,还包括:
若所述排序后的有序片段全部保存在磁盘上,则判断所述待排序数据是否全部加载到内存块中;
若是,则对保存在磁盘上的多个有序片段进行一趟归并排序或多趟归并排序;
若否,则将未加载的待排序数据加载到内存块中并重新根据对所述内存块中的待排序数据进行内部排序后得到的多个有序片段的个数,确定对所述有序片段进行一趟归并排序或多趟归并排序,直到所述待排序数据全部加载完成。
9.根据权利要求5所述的方法,其特征在于,所述若所述有序片段个数小于或等于预设值,则对所述有序片段进行一趟归并排序或多趟归并排序,包括:
按照每路包括设定数量行数据进行归并,确定进行一趟归并排序所需的归并内存;
若所述归并内存小于或等于预设归并内存,则将内存块中待归并的多路有序片段加载到归并内存中进行一趟归并排序;
判断磁盘中是否存在待排序的有序片段;
若是,则将本次排序后得到的有序片段保存到磁盘上,并判断所述待排序数据是否全部加载到内存块中,直到所述待排序数据全部加载完成,对最终排序后的有序片段进行一趟归并排序或多趟归并排序;
若否,且待排序数据未全部加载到内存块中,则将本次排序得到的有序片段保存到磁盘中;将未加载到内存块中的待排序数据加载到内存块中;对所述内存块中的待排序数据进行内部排序得到多个有序片段,根据有序片段的个数确定对所述有序片段进行一趟归并排序或多趟归并排序,直到所述待排序数据全部加载完成,再对磁盘上待排序的有序片段进行一趟归并排序或多趟归并排序。
10.根据权利要求9所述的方法,其特征在于,还包括:
若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请;
若申请成功,则将内存块中待归并的多路有序片段加载到归并内存中进行一趟归并排序;
若申请失败,则根据变量的取值重新确定进行一趟归并排序所需的归并内存直到申请成功或所述变量的取值等于设定数量行;根据所述最大归并路数对所述内存块中的有序片段依次进行归并排序,并将每次排序得到的有序片段保存到磁盘中;当所述内存块中的有序片段全部排序完成后,继续判断所述待排序数据是否全部加载到内存块中,直到所述待排序数据全部加载完成,则对磁盘上待排序的有序片段进行一趟归并排序或多趟归并排序。
11.根据权利要求3或5所述的方法,其特征在于,对保存到磁盘上的多个有序片段进行一趟归并排序或多趟归并排序,包括:
按照每路包括设定数量行数据进行归并,确定进行一趟归并排序所需的归并内存;
若所述归并内存小于或等于预设归并内存,则将磁盘上待归并的多路有序片段加载到所述归并内存中并进行一趟归并排序;
若所述归并内存大于预设归并内存,则根据所述归并内存进行内存申请;
若申请成功,则将磁盘上待归并的多路有序片段加载到归并内存中进行一趟归并排序;
若申请失败,则根据变量的取值重新确定进行一趟归并排序所需的归并内存直到申请成功或所述变量的取值等于设定数量行;根据所述最大归并路数对磁盘中的初始待排序有序片段依次进行归并排序,并将每次排序后得到的有序片段保存在磁盘中;当磁盘中的所述初始待排序有序片段全部排序完成后得到多个有序片段,继续计算对得到的多个有序片段进行一趟归并排序所需的归并内存,直到磁盘中的所有待排序有序片段全部排序完成。
12.一种数据排序装置,其特征在于,所述装置包括:
申请模块,用于确定待排序数据加载到内存中所需的排序内存,并申请所述排序内存;
确定模块,用于若所述排序内存申请成功,则根据分类标志参数的取值确定排序方式;
排序模块,用于根据所述排序方式对所述待排序数据进行排序。
13.一种电子设备,其特征在于,包括:
一个或多个处理器;
存储装置,用于存储一个或多个程序;
所述一个或多个程序被所述一个或多个处理器执行,使得所述一个或多个处理器用于执行权利要求1-11任一项所述的数据排序方法。
14.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1-11任一项所述的数据排序方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110655370.9A CN113392140B (zh) | 2021-06-11 | 2021-06-11 | 一种数据排序方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110655370.9A CN113392140B (zh) | 2021-06-11 | 2021-06-11 | 一种数据排序方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113392140A true CN113392140A (zh) | 2021-09-14 |
CN113392140B CN113392140B (zh) | 2023-05-09 |
Family
ID=77620661
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110655370.9A Active CN113392140B (zh) | 2021-06-11 | 2021-06-11 | 一种数据排序方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113392140B (zh) |
Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464451A (zh) * | 2002-06-26 | 2003-12-31 | 联想(北京)有限公司 | 一种数据记录的排序方法 |
US20120323923A1 (en) * | 2011-06-14 | 2012-12-20 | Bank Of America Corporation | Sorting Data in Limited Memory |
CN103399822A (zh) * | 2013-08-14 | 2013-11-20 | 上海斐讯数据通信技术有限公司 | 用于解决申请图片内存不足的内存分配方法及系统 |
CN103577559A (zh) * | 2013-10-23 | 2014-02-12 | 华为技术有限公司 | 数据排序方法和装置 |
CN103995827A (zh) * | 2014-04-10 | 2014-08-20 | 北京大学 | MapReduce计算框架中的高性能排序方法 |
CN105740264A (zh) * | 2014-12-10 | 2016-07-06 | 北大方正集团有限公司 | 一种分布式xml数据库的排序方法及装置 |
WO2017101475A1 (zh) * | 2015-12-15 | 2017-06-22 | 深圳市华讯方舟软件技术有限公司 | 一种基于Spark大数据处理平台的查询方法 |
US20170344608A1 (en) * | 2016-05-24 | 2017-11-30 | International Business Machines Corporation | Sorting tables in analytical databases |
CN107908714A (zh) * | 2017-11-10 | 2018-04-13 | 上海达梦数据库有限公司 | 一种数据归并排序方法及装置 |
CN111078406A (zh) * | 2019-12-10 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存管理方法、装置、存储介质及电子设备 |
CN112199407A (zh) * | 2020-10-12 | 2021-01-08 | 上海达梦数据库有限公司 | 一种数据分组排序方法、装置、设备及存储介质 |
-
2021
- 2021-06-11 CN CN202110655370.9A patent/CN113392140B/zh active Active
Patent Citations (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1464451A (zh) * | 2002-06-26 | 2003-12-31 | 联想(北京)有限公司 | 一种数据记录的排序方法 |
US20120323923A1 (en) * | 2011-06-14 | 2012-12-20 | Bank Of America Corporation | Sorting Data in Limited Memory |
CN103399822A (zh) * | 2013-08-14 | 2013-11-20 | 上海斐讯数据通信技术有限公司 | 用于解决申请图片内存不足的内存分配方法及系统 |
CN103577559A (zh) * | 2013-10-23 | 2014-02-12 | 华为技术有限公司 | 数据排序方法和装置 |
CN103995827A (zh) * | 2014-04-10 | 2014-08-20 | 北京大学 | MapReduce计算框架中的高性能排序方法 |
CN105740264A (zh) * | 2014-12-10 | 2016-07-06 | 北大方正集团有限公司 | 一种分布式xml数据库的排序方法及装置 |
WO2017101475A1 (zh) * | 2015-12-15 | 2017-06-22 | 深圳市华讯方舟软件技术有限公司 | 一种基于Spark大数据处理平台的查询方法 |
US20170344608A1 (en) * | 2016-05-24 | 2017-11-30 | International Business Machines Corporation | Sorting tables in analytical databases |
CN107908714A (zh) * | 2017-11-10 | 2018-04-13 | 上海达梦数据库有限公司 | 一种数据归并排序方法及装置 |
CN111078406A (zh) * | 2019-12-10 | 2020-04-28 | Oppo(重庆)智能科技有限公司 | 内存管理方法、装置、存储介质及电子设备 |
CN112199407A (zh) * | 2020-10-12 | 2021-01-08 | 上海达梦数据库有限公司 | 一种数据分组排序方法、装置、设备及存储介质 |
Non-Patent Citations (3)
Title |
---|
何奉道: "分段有序归并排序算法", 《西南交通大学学报》 * |
修晓琴: ""基于Linux平台的数字电...盒应用升级机制的研究和设计"", 《中国有线电视》 * |
金树东,冯玉才,王元珍: "用于分组和集函数计算的并行排序方法", 小型微型计算机系统 * |
Also Published As
Publication number | Publication date |
---|---|
CN113392140B (zh) | 2023-05-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112085644B (zh) | 多列数据排序方法、装置、可读存储介质和电子设备 | |
CN112597739B (zh) | 修复电路中的保持时间违例的方法和装置 | |
CN107908714B (zh) | 一种数据归并排序方法及装置 | |
CN111045933A (zh) | 一种回归策略更新方法、装置、存储介质及终端设备 | |
CN111597768B (zh) | 用于构建版图图案集的方法、设备和计算机可读存储介质 | |
CN115357356A (zh) | 基于计算图优化的算子间并行调度方法、设备和介质 | |
CN114064242A (zh) | 调度参数的调整方法、设备及存储介质 | |
CN109359760B (zh) | 一种物流路径优化方法、装置及服务器 | |
CN114358252A (zh) | 目标神经网络模型中的操作执行方法及装置、存储介质 | |
CN114429195A (zh) | 混合专家模型训练的性能优化方法和装置 | |
US8667008B2 (en) | Search request control apparatus and search request control method | |
CN113392140A (zh) | 一种数据排序方法、装置、电子设备及存储介质 | |
CN116820709B (zh) | 任务链的运行方法、装置、终端及计算机存储介质 | |
CN109165729A (zh) | 神经网络的调度方法及系统 | |
US20050229124A1 (en) | Distributed BDD reordering | |
US20220129270A1 (en) | Method and system for topk operation | |
CN109165325A (zh) | 用于切分图数据的方法、装置、设备以及计算机可读存储介质 | |
CN111198766B (zh) | 数据库访问操作部署方法、数据库访问方法及装置 | |
CN112100446A (zh) | 搜索方法、可读存储介质和电子设备 | |
CN111346372A (zh) | 一种基于数据备份的游戏登录加载方法、装置及服务器 | |
CN112214627A (zh) | 搜索方法、可读存储介质和电子设备 | |
CN111800446A (zh) | 调度处理方法、装置、设备和存储介质 | |
CN115344332B (zh) | 一种基于有限状态机的状态变化提取方法及系统 | |
CN113177224B (zh) | 基于区块链的数据密封方法、装置、设备和存储介质 | |
CN114265556B (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 |