CN103577559A - 数据排序方法和装置 - Google Patents
数据排序方法和装置 Download PDFInfo
- Publication number
- CN103577559A CN103577559A CN201310505217.3A CN201310505217A CN103577559A CN 103577559 A CN103577559 A CN 103577559A CN 201310505217 A CN201310505217 A CN 201310505217A CN 103577559 A CN103577559 A CN 103577559A
- Authority
- CN
- China
- Prior art keywords
- data
- data section
- section
- storage medium
- read
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F7/00—Methods or arrangements for processing data by operating upon the order or content of the data handled
- G06F7/22—Arrangements for sorting or merging computer data on continuous record carriers, e.g. tape, drum, disc
- G06F7/24—Sorting, i.e. extracting data from one or more carriers, rearranging the data in numerical or other ordered sequence, and rerecording the sorted data on the original carrier or on a different carrier or set of carriers sorting methods in general
Abstract
本发明公开了一种数据排序方法和装置,属于计算机领域。所述方法包括:将待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段;再进行压缩,得到压缩数据段;将每次压缩后得到的压缩数据段写入所述存储介质;当所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段;对所述合并数据段进行解压,获取排序数据;将所述排序数据写入所述存储介质。本发明通过在对读入内存的数据进行排序后,对得到的有序数据段进行压缩,将压缩后的有序数据段进行归并,归并过程中无需解压,降低了磁盘IO,节省了CPU的资源,提高了数据排序的性能。
Description
技术领域
本发明涉及计算机领域,特别涉及一种数据排序方法和装置。
背景技术
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的数据调整为“有序”的数据。现有技术通常通过外部排序来对数据进行处理,即将待排序的数据分批读入内存,在内存中采用内存排序方法分别对读入的待排序数据进行排序,得到初始合并段,将得到的初始合并段写入磁盘;当所有的初始合并段均写入磁盘后,每次从磁盘中读取多个初始合并段,将该多个初始合并段进行归并,得到中间合并段,将得到的中间合并段再次写入磁盘中,直到磁盘中所有的初始合并段被归并为中间合并段后,再每次从磁盘中读取多个中间合并段进行归并,经过多次归并后,得到一个有序数据。
在实现本发明的过程中,发明人发现现有技术至少存在以下问题:
在对数据的进行排序的过程中,需要进行多次归并,且待排序的数据量越大,磁盘IO越大,排序耗时长,磁盘负担重。
发明内容
为了解决现有技术的问题,本发明实施例提供了一种数据排序方法和装置。所述技术方案如下:
第一方面,提供了一种数据排序方法,所述方法包括:
将存储介质中的待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段;
对所述有序数据段进行压缩,得到压缩数据段;
将每次压缩后得到的压缩数据段写入所述存储介质;
当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段;
对所述合并数据段进行解压,获取排序数据;
将所述排序数据写入所述存储介质。
结合第一方面,在第一方面的第一种可能实现方式中,将存储介质中的待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段包括:
将所述存储介质中的待排序数据分批读入所述内存;
每读入一段数据,使用预设内存排序算法,对所述读入的数据进行排序,得到所述有序数据段。
结合第一方面,在第一方面的第二种可能实现方式中,对所述有序数据段进行压缩,得到压缩数据段包括:
获取所述有序数据段中的数据以及每个数据在所述有序数据段中的出现次数;
根据所述有序数据段中的数据以及每个数据的出现次数,获取所述压缩数据段。
结合第一方面,在第一方面的第三种可能实现方式中,当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段包括:
当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,每读入预设数目的压缩数据段,对所述预设数目的压缩数据段进行归并,得到中间数据段;
将所述中间数据段写入所述存储介质;
当所述待排序数据对应的所有中间数据段均写入所述存储介质时,将所述所有中间数据段分批读入所述内存,继续进行归并,直至得到所述合并数据段。
结合第一方面的第三种可能实现方式,在第一方面的第四种可能实现方式中,每读入预设数目的压缩数据段,对所述预设数目的压缩数据段进行归并,得到中间数据段包括:
获取所述预设数目的压缩数据段中的数据,以及每个数据在对应的压缩数据段中的出现次数;
获取每个数据的总出现次数,所述总出现次数为所述每个数据在对应的压缩数据段中的出现次数之和;
根据所述每个数据和所述每个数据的总出现次数,获取所述中间数据段。
第二方面,提供了一种数据排序装置,所述装置包括:
数据读入模块,用于将存储介质中的待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段;
压缩模块,用于对所述有序数据段进行压缩,得到压缩数据段;
数据段写入模块,用于将每次压缩后得到的压缩数据段写入所述存储介质;
归并模块,用于当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段;
解压模块,用于对所述合并数据段进行解压,获取排序数据;
排序数据写入模块,用于将所述排序数据写入所述存储介质。
结合第二方面,在第二方面的第一种可能实现方式中,所述数据读入模块包括:
数据读入单元,用于将所述存储介质中的待排序数据分批读入所述内存;
排序单元,用于每读入一段数据,使用预设内存排序算法,对所述读入的数据进行排序,得到所述有序数据段。
结合第二方面,在第二方面的第二种可能实现方式中,所述压缩模块包括:
出现次数获取单元,用于获取所述有序数据段中的数据以及每个数据在所述有序数据段中的出现次数;
压缩数据段获取单元,用于根据所述有序数据段中的数据以及每个数据的出现次数,获取所述压缩数据段。
结合第二方面,在第二方面的第三种可能实现方式中,所述归并模块包括:
归并单元,用于当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,每读入预设数目的压缩数据段,对所述预设数目的压缩数据段进行归并,得到中间数据段;
中间数据段写入单元,用于将所述中间数据段写入所述存储介质;
合并数据段获取单元,用于当所述待排序数据对应的所有中间数据段均写入所述存储介质时,将所述所有中间数据段分批读入所述内存,继续进行归并,直至得到所述合并数据段。
结合第二方面的第三种可能实现方式,在第二方面的第四种可能实现方式中,所述归并单元包括:
出现次数获取子单元,用于获取所述预设数目的压缩数据段中的数据,以及每个数据在对应的压缩数据段中的出现次数;
总次数获取子单元,用于获取每个数据的总出现次数,所述总出现次数为所述每个数据在对应的压缩数据段中的出现次数之和;
中间数据段获取子单元,用于根据所述每个数据和所述每个数据的总出现次数,获取所述中间数据段。
本发明实施例提供的技术方案带来的有益效果是:
本发明实施例提供的方法和装置,通过在对读入内存的数据进行排序后,对得到的有序数据段进行压缩,将压缩后的有序数据段进行归并,归并过程中无需解压,降低了磁盘IO,节省了CPU的资源,提高了数据排序的性能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的一种数据排序方法的流程图;
图2a是本发明实施例提供的一种数据排序方法的流程图;
图2b是本发明实施例提供的两路归并示意图;
图3是本发明实施例提供的一种数据排序方法的流程图;
图4是本发明实施例提供的一种数据排序装置结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1是本发明实施例提供的一种数据排序方法的流程图,参见图1,所述方法包括:
101:将存储介质中的待排序数据分批读入内存,每读入一段数据,对该读入的数据进行排序,得到有序数据段;
102:对该有序数据段进行压缩,得到压缩数据段;
103:将每次压缩后得到的压缩数据段写入该存储介质;
104:当该待排序数据所对应的所有压缩数据段均写入该存储介质时,将该存储介质中的压缩数据段分批读入该内存,并进行归并,得到合并数据段;
105:对该合并数据段进行解压,获取排序数据;
106:将该排序数据写入该存储介质。
本发明实施例提供的方法,通过在对读入内存的数据进行排序后,对得到的有序数据段进行压缩,将压缩后的有序数据段进行归并,归并过程中无需解压,降低了磁盘IO,节省了CPU的资源,提高了数据排序的性能。
可选地,将存储介质中的待排序数据分批读入内存,每读入一段数据,对该读入的数据进行排序,得到有序数据段包括:
将该存储介质中的待排序数据分批读入该内存;
每读入一段数据,使用预设内存排序算法,对该读入的数据进行排序,得到该有序数据段。
可选地,对该有序数据段进行压缩,得到压缩数据段包括:
获取该有序数据段中的数据以及每个数据在该有序数据段中的出现次数;
根据该有序数据段中的数据以及每个数据的出现次数,获取该压缩数据段。
可选地,当该待排序数据所对应的所有压缩数据段均写入该存储介质时,将该存储介质中的压缩数据段分批读入该内存,并进行归并,得到合并数据段包括:
当该待排序数据所对应的所有压缩数据段均写入该存储介质时,将该存储介质中的压缩数据段分批读入该内存,每读入预设数目的压缩数据段,对该预设数目的压缩数据段进行归并,得到中间数据段;
将该中间数据段写入该存储介质;
当该待排序数据对应的所有中间数据段均写入该存储介质时,将该所有中间数据段分批读入该内存,继续进行归并,直至得到该合并数据段。
可选地,每读入预设数目的压缩数据段,对该预设数目的压缩数据段进行归并,得到中间数据段包括:
获取该预设数目的压缩数据段中的数据,以及每个数据在对应的压缩数据段中的出现次数;
获取每个数据的总出现次数,该总出现次数为该每个数据在对应的压缩数据段中的出现次数之和;
根据该每个数据和该每个数据的总出现次数,获取该中间数据段。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
图2a是本发明实施例提供的一种数据排序方法的流程图。本发明实施例应用于对包括重复数据的待排序数据进行排序的场景下,参见图2a,所述方法包括:
201:将存储介质中的待排序数据分批读入内存;
其中,该存储介质用于存储数据,可以为软盘、磁盘、光盘等。
为了进行数据排序,需要首先将待排序数据读入内存,而当该内存不足以容纳该待排序数据时,需要根据内存的大小,一次读入一部分的待排序数据到内存,也即是,将该待排序数据分批读入内存。
图2b是本发明实施例提供的两路归并示意图。参见图2b,该待排序数据为xbayabczxybyzdzbyaxzbxd,当内存不足以容纳该待排序数据时,将该待排序数据分为xbayabczxyby和zdzbyaxzbxd,并依次读入内存,即首先将待排序数据xbayabczxyby读入内存中。
202:每读入一段数据,使用预设内存排序算法,对该读入的数据进行排序,得到有序数据段;
其中,该预设内存排序算法可以为快速排序算法、堆排序算法或归并排序算法,本发明实施例对此不做限定。
具体地,每读入一段数据,使用该预设内存排序算法,对该读入的数据进行调整,将该读入的数据调整为一段有序的数据,即得到该有序数据段。
参见图2b,对该读入内存的待排序数据xbayabczxyby进行快速排序,得到有序数据段aabbbcxxyyyz。
203:对该有序数据段进行压缩,得到压缩数据段;
可选地,该步骤203具体包括:
(1)获取该有序数据段中的数据以及每个数据在该有序数据段中的出现次数;
本发明实施例应用于该待排序数据包括重复数据的场景下,则在获取该有序数据段中的数据的同时,获取数据在该有序数据段中的出现次数。
参见图2b,该有序数据段aabbbcxxyyyz包括数据a、b、c、x、y、z,且数据a、b、c、x、y、z在该有序数据段中的出现次数分别为2、3、1、2、3、1。
(2)根据该有序数据段中的数据以及每个数据的出现次数,获取该压缩数据段。
具体地,将该压缩数据段以该有序数据段中的数据与该数据的出现次数对应表示。
参见图2b,将该有序数据段aabbbcxxyyyz表示为a2b3c1x2y3z1。
优选地,该步骤203具体包括:对该有序数据段进行RLE(Run-Length-Encoding,行程编码)压缩,得到该压缩数据段。
其中,RLE是一种统计编码,该编码属于无损压缩编码,RLE压缩的基本原理是:将数据序列中的数据,用单个数据和该数据在该数据序列中的出现次数表示,从而实现数据的压缩,算法简单,压缩速度快。
204:将每次压缩后得到的压缩数据段写入该存储介质;
在本发明实施例中,将压缩后得到的压缩数据段写入该存储介质,降低了磁盘IO,提供了数据排序性能。
205:判断该存储介质中是否还存在待排序数据;如果是,执行步骤201,如果否,执行步骤206;
具体地,该存储介质中的待排序数据较大,当该内存不足以容纳该存储介质中的所有待排序数据时,根据该内存的大小,将待排序数据分批读入该内存,并判断该存储介质中是否还存在未读入内存的待排序数据,如果是,继续执行步骤201,将该存储介质中未读入内存的待排序数据读入该内存。
参见图2b,根据内存的大小将待排序数据xbayabczxybyzdzbyaxzbxd,分为xbayabczxyby和zdzbyaxzbxd依次读入内存,首先将xbayabczxyby读入内存后,并通过执行步骤202-步骤205,将xbayabczxyby对应的压缩数据段写入该存储介质,则判断该存储介质中是否还存在待排序数据,此时,确定该存储介质中还存在待排序数据zdzbyaxzbxd,则将待排序数据zdzbyaxzbxd读入该内存。
206:将该存储介质中的压缩数据段分批读入该内存;
在本发明实施例中,当该存储介质中不存在未读入内存的待排序数据时,将该存储介质中的压缩数据段分批读入该内存。
207:每读入预设数目的压缩数据段,获取该预设数目的压缩数据段中的数据,以及每个数据在对应的压缩数据段中的出现次数;
具体地,对于一个压缩数据段,获取该压缩数据段中的每个数据,并获取每个数据在该压缩数据段中的出现次数。
其中,该预设数目可以预先设定,或根据该压缩数据段的总数目确定,本发明实施例对此不做限定。
参见图2b,对于待排序数据xbayabczxybyzdzbyaxzbxd,得到的压缩数据段包括a2b3c1x2y3z1和a1b2d2x2y1z3,则在第一个数据段中,数据a、b、c、x、y、z的出现次数分别为2、3、1、2、3、1,在第二个数据段中,数据a、b、d、x、y、z的出现次数分别为1、2、2、2、1、3。
208:获取每个数据的总出现次数,该总出现次数为该每个数据在对应的压缩数据段中的出现次数之和;
在本发明实施例中,该总出现次数用于表示数据在该预设数目的压缩数据段中的总出现次数。具体地,对于该预设数目的压缩数据段,获取该预设数目的压缩数据段中的每个数据;当该预设数目的压缩数据段中的任两个压缩数据段中包括相同的数据时,获取该数据在该两个压缩数据段中的出现次数之和,进而获取该数据在该预设数目的每个压缩数据段的出现次数之和,将得到的出现次数之和确定为该数据的总出现次数;对于该预设数目的压缩数据段中的任两个压缩数据段中不同的数据,将该数据在对应的压缩数据段中的出现次数确定为该数据的总出现次数。
参见图2b,在第一个数据段中,数据a、b、c、x、y、z的出现次数分别为2、3、1、2、3、1,在第二个数据段中,数据a、b、d、x、y、z的出现次数分别为1、2、2、2、1、3,将相同的数据和对应的总出现次数组合,即数据a、b、x、y、z的总出现次数分别为3、5、4、4、4,将不同的数据和对应的出现次数分别组合,即数据c、d的总出现次数还是1、2。
209:根据该每个数据和该每个数据的总出现次数,获取该中间数据段;
具体地,将该中间数据段以每个数据与该数据的总出现次数对应表示。
在步骤207-209中,对该预设数目的压缩数据段进行归并排序,得到中间数据段。优选地,对该压缩数据段进行N次归并排序,即将N个压缩数据段归并为一个有序数据段。进一步优选地,采用两路归并算法对压缩数据段进行归并,即N=2,也即是该预设数目为2。
参见图2b,根据数据a、b、c、d、x、y、z的总出现次数,得到中间数据段a3b5c1d2x4y4z4。
210:将该中间数据段写入该存储介质;
211:判断该存储介质中是否还存在未读入内存的压缩数据段,如果是,执行步骤206,如果否,执行步骤212;
212:将该所有中间数据段分批读入该内存,继续进行归并,直至得到该合并数据段;
在本发明实施例中,当该存储介质中不存在未读入内存的压缩数据段时,将该存储介质中的所有中间数据段分批读入该内存。在读入内存后的归并过程与压缩数据段归并为中间数据段的过程类似,在此不再赘述。
其中,该合并数据段为一个有序的数据段,即对压缩数据段逐趟进行归并,直至得到一个有序的数据段为止。
参见图2b,该中间数据段a3b5c1d2x4y4z4为一个有序的数据段,且不存在其他数据段,则将该数据段a3b5c1d2x4y4z4确定为该合并数据段。
本发明实施例以采用两路归并算法对压缩数据段进行归并为例进行说明,则在对中间数据段进行归并时,同样是依次将两个中间数据段归并为一个数据段,并写入存储介质,当将所有的中间数据段归并且写入存储介质时,继续进行两路归并,直至归并为一个有序的数据段,即为该合并数据段。
在本发明实施例中,在对压缩数据段进行归并时,可以直接进行数据段的归并,而无需进行解压,避免了增加占用CPU的资源。
213:对该合并数据段进行解压,获取排序数据;
解压过程为压缩过程的逆过程,具体为:根据该合并数据段中的数据的出现次数,将该合并数据段以重复的数据表示,得到排序数据,其中,数据重复的次数即为数据的出现次数。
参见图2,对合并数据段a3b5c1d2x4y4z4进行解压,得到排序数据aaabbbbbcddxxxxyyyyzzzz。
214:将该排序数据写入该存储介质。
本发明实施例提供的方法,通过在对读入内存的数据进行排序后,对得到的有序数据段进行压缩,将压缩后的有序数据段进行归并,归并过程中无需解压,降低了磁盘IO,节省了CPU的资源,提高了数据排序的性能。
图3是本发明实施例提供的一种数据排序方法的流程图,本发明实施例应用于对数据库中的数据进行排序的场景下,参见图3,所述方法包括:
301:将存储介质中的待排序数据库数据分批读入内存;
具体地,当数据库的每个连接所分配的用于排序的内存不足以容纳该待排序数据时,将该待排序数据库数据分批读入该内存。
数据库中的很多操作都需要对数据进行排序,如聚集操作的一种实现方法为排序聚集,而数据库中的MAX、MIN、SUM、COUNT等基本功能都是通过聚集操作实现的,即数据库中的很多基本功能都需要对数据进行排序;又如,Merge Join操作是表连接的一种实现方法,需要内表和外表均为有序表,即MergeJoin操作也需要对数据进行排序。进一步地,由于数据库是高并发系统,为每个连接所分配的用于排序的内存一般不会太大(如,数据库Postgres默认只有1MB),则对于大数据量的数据排序操作需要使用存储介质进行数据排序。
302:每读入一段数据库数据,使用预设内存排序算法,对该读入的数据库数据进行排序,得到有序数据段;
具体地,每读入一段数据库数据,选择该数据库数据中的多列,并指定按照其中一列,对该数据库数据进行排序,如采用select……order by……语句,实现对读入内存的待排序数据库数据的排序。
例如,采用语句:select name,age,address,phone from order by age对数据库数据中的name、age、address、phone进行查询,并按照age从小到大的顺序进行排序。
如,表1是本发明实施例提供读入内存的待排序数据库数据,该读入内存的待排序数据库数据包括rowid,name,age,address,phone;其中rowid是唯一行定位标识。
表1
rowid | name | age | address | phone |
(37161,4) | 张三 | 20 | 北京 | 1234561 |
(10462,4) | 李四 | 21 | 上海 | 1234562 |
(93215,4) | 王五 | 21 | 广州 | 1234563 |
(49325,20) | 赵六 | 20 | 济南 | 1234564 |
对表1中的数据按照age进行排序,即执行语句select name,age,address,phone from order by age,其中,order by默认为升序排序,排序结果为表2所示:
表2
rowid | name | age | address | phone |
(37161,4) | 张三 | 20 | 北京 | 1234561 |
(49325,20) | 赵六 | 20 | 济南 | 1234564 |
(10462,4) | 李四 | 21 | 上海 | 1234562 |
(93215,4) | 王五 | 21 | 广州 | 1234563 |
303:对该有序数据段进行压缩,得到压缩数据段;
具体地,对该有序数据段中的数据进行压缩,并记录该有序数据段中的数据所对应的唯一行定位标识rowid,得到压缩数据段。
参见表1和表2,将该数据库数据按照age排序,则在对得到的有序数据段进行压缩时,对age进行压缩,并采用(age,count,rowid1,rowid2)的形式表示该有序数据段。其中,count为age值相同的记录个数,rowid1,rowid2为age对应的唯一行定位标识rowid。则对于表2中的排序结果,该压缩数据段为(20,2,(37161,4),(49325,20)),(21,2,(10462,4),(93215,4))。
304:将每次压缩后得到的压缩数据段写入该存储介质;
305:判断该存储介质中是否还存在待排序数据;如果是,执行步骤301,如果否,执行步骤306;
306:将该存储介质中的压缩数据段分批读入该内存;
307:对该压缩数据段进行多路归并,得到合并数据段;
对该压缩数据段进行多路归并的方法详见上述步骤207-212,在此不再赘述。
基于步骤303的举例,得到的压缩数据段为(20,2,(37161,4),(49325,20)),(21,2,(10462,4),(93215,4)),由于该两个压缩数据段的age不同,因此无需对age的出现次数相加,只需将该两个压缩数据段直接归并即可,得到合并数据段(20,2,(37161,4),(49325,20)),(21,2,(10462,4),(93215,4))。其中每个合并数据段的数据格式为:(age,count,rowid1,rowid2)。
308:对该合并数据段进行解压,获取排序数据;
解压过程为压缩过程的逆过程,详见上述步骤213,在此不再赘述。
基于步骤307的举例,对得到的合并数据段(20,2,(37161,4),(49325,20)),(21,2,(10462,4),(93215,4))进行解压,分别得到(20,(37161,4)),(20,(49325,20)),(21,(10462,4)),(21,(93215,4)),其中每个排序数据的数据格式为:(age,rowid)。
309:将该排序数据写入该存储介质。
本发明实施例提供的方法,通过在对读入内存的数据进行排序后,对得到的有序数据段进行压缩,将压缩后的有序数据段进行归并,归并过程中无需解压,降低了磁盘IO,节省了CPU的资源,提高了数据排序的性能。
图4是本发明实施例提供的一种数据排序装置结构示意图,参见图4,所述装置包括:数据读入模块401、压缩模块402、数据段写入模块403、归并模块404、解压模块405、排序数据写入模块406,
其中,数据读入模块401用于将存储介质中的待排序数据分批读入内存,每读入一段数据,对该读入的数据进行排序,得到有序数据段;压缩模块402与数据读入模块401连接,用于对该有序数据段进行压缩,得到压缩数据段;数据段写入模块403与压缩模块402连接,用于将每次压缩后得到的压缩数据段写入该存储介质;归并模块404与数据段写入模块403连接,用于当该待排序数据所对应的所有压缩数据段均写入该存储介质时,将该存储介质中的压缩数据段分批读入该内存,并进行归并,得到合并数据段;解压模块405与归并模块404连接,用于对该合并数据段进行解压,获取排序数据;排序数据写入模块406与解压模块405,用于将该排序数据写入该存储介质。
该数据读入模块401包括:
数据读入单元,用于将该存储介质中的待排序数据分批读入该内存;
排序单元,用于每读入一段数据,使用预设内存排序算法,对该读入的数据进行排序,得到该有序数据段。
可选地,该压缩模块402包括:
出现次数获取单元,用于获取该有序数据段中的数据以及每个数据在该有序数据段中的出现次数;
压缩数据段获取单元,用于根据该有序数据段中的数据以及每个数据的出现次数,获取该压缩数据段。
可选地,该归并模块404包括:
归并单元,用于当该待排序数据所对应的所有压缩数据段均写入该存储介质时,将该存储介质中的压缩数据段分批读入该内存,每读入预设数目的压缩数据段,对该预设数目的压缩数据段进行归并,得到中间数据段;
中间数据段写入单元,用于将该中间数据段写入该存储介质;
合并数据段获取单元,用于当该待排序数据对应的所有中间数据段均写入该存储介质时,将该所有中间数据段分批读入该内存,继续进行归并,直至得到该合并数据段。
可选地,该归并单元包括:
出现次数获取子单元,用于获取该预设数目的压缩数据段中的数据,以及每个数据在对应的压缩数据段中的出现次数;
总次数获取子单元,用于获取每个数据的总出现次数,该总出现次数为该每个数据在对应的压缩数据段中的出现次数之和;
中间数据段获取子单元,用于根据该每个数据和该每个数据的总出现次数,获取该中间数据段。
本发明实施例提供的装置,通过在对读入内存的数据进行排序后,对得到的有序数据段进行压缩,将压缩后的有序数据段进行归并,归并过程中无需解压,降低了磁盘IO,节省了CPU的资源,提高了数据排序的性能。
需要说明的是:上述实施例提供的数据排序装置在数据排序时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的数据排序装置与数据排序方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (10)
1.一种数据排序方法,其特征在于,所述方法包括:
将存储介质中的待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段;
对所述有序数据段进行压缩,得到压缩数据段;
将每次压缩后得到的压缩数据段写入所述存储介质;
当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段;
对所述合并数据段进行解压,获取排序数据;
将所述排序数据写入所述存储介质。
2.根据权利要求1所述的方法,其特征在于,将存储介质中的待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段包括:
将所述存储介质中的待排序数据分批读入所述内存;
每读入一段数据,使用预设内存排序算法,对所述读入的数据进行排序,得到所述有序数据段。
3.根据权利要求1所述的方法,其特征在于,对所述有序数据段进行压缩,得到压缩数据段包括:
获取所述有序数据段中的数据以及每个数据在所述有序数据段中的出现次数;
根据所述有序数据段中的数据以及每个数据的出现次数,获取所述压缩数据段。
4.根据权利要求1所述的方法,其特征在于,当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段包括:
当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,每读入预设数目的压缩数据段,对所述预设数目的压缩数据段进行归并,得到中间数据段;
将所述中间数据段写入所述存储介质;
当所述待排序数据对应的所有中间数据段均写入所述存储介质时,将所述所有中间数据段分批读入所述内存,继续进行归并,直至得到所述合并数据段。
5.根据权利要求4所述的方法,其特征在于,每读入预设数目的压缩数据段,对所述预设数目的压缩数据段进行归并,得到中间数据段包括:
获取所述预设数目的压缩数据段中的数据,以及每个数据在对应的压缩数据段中的出现次数;
获取每个数据的总出现次数,所述总出现次数为所述每个数据在对应的压缩数据段中的出现次数之和;
根据所述每个数据和所述每个数据的总出现次数,获取所述中间数据段。
6.一种数据排序装置,其特征在于,所述装置包括:
数据读入模块,用于将存储介质中的待排序数据分批读入内存,每读入一段数据,对所述读入的数据进行排序,得到有序数据段;
压缩模块,用于对所述有序数据段进行压缩,得到压缩数据段;
数据段写入模块,用于将每次压缩后得到的压缩数据段写入所述存储介质;
归并模块,用于当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,并进行归并,得到合并数据段;
解压模块,用于对所述合并数据段进行解压,获取排序数据;
排序数据写入模块,用于将所述排序数据写入所述存储介质。
7.根据权利要求6所述的装置,其特征在于,所述数据读入模块包括:
数据读入单元,用于将所述存储介质中的待排序数据分批读入所述内存;
排序单元,用于每读入一段数据,使用预设内存排序算法,对所述读入的数据进行排序,得到所述有序数据段。
8.根据权利要求6所述的装置,其特征在于,所述压缩模块包括:
出现次数获取单元,用于获取所述有序数据段中的数据以及每个数据在所述有序数据段中的出现次数;
压缩数据段获取单元,用于根据所述有序数据段中的数据以及每个数据的出现次数,获取所述压缩数据段。
9.根据权利要求6所述的装置,其特征在于,所述归并模块包括:
归并单元,用于当所述待排序数据所对应的所有压缩数据段均写入所述存储介质时,将所述存储介质中的压缩数据段分批读入所述内存,每读入预设数目的压缩数据段,对所述预设数目的压缩数据段进行归并,得到中间数据段;
中间数据段写入单元,用于将所述中间数据段写入所述存储介质;
合并数据段获取单元,用于当所述待排序数据对应的所有中间数据段均写入所述存储介质时,将所述所有中间数据段分批读入所述内存,继续进行归并,直至得到所述合并数据段。
10.根据权利要求9所述的装置,其特征在于,所述归并单元包括:
出现次数获取子单元,用于获取所述预设数目的压缩数据段中的数据,以及每个数据在对应的压缩数据段中的出现次数;
总次数获取子单元,用于获取每个数据的总出现次数,所述总出现次数为所述每个数据在对应的压缩数据段中的出现次数之和;
中间数据段获取子单元,用于根据所述每个数据和所述每个数据的总出现次数,获取所述中间数据段。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310505217.3A CN103577559A (zh) | 2013-10-23 | 2013-10-23 | 数据排序方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310505217.3A CN103577559A (zh) | 2013-10-23 | 2013-10-23 | 数据排序方法和装置 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103577559A true CN103577559A (zh) | 2014-02-12 |
Family
ID=50049335
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310505217.3A Pending CN103577559A (zh) | 2013-10-23 | 2013-10-23 | 数据排序方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN103577559A (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104021161A (zh) * | 2014-05-27 | 2014-09-03 | 华为技术有限公司 | 一种聚簇存储方法及装置 |
CN104102168A (zh) * | 2014-07-14 | 2014-10-15 | 上海航天能源股份有限公司 | 一种用于天然气管网调压的数据传输方法 |
CN104951473A (zh) * | 2014-03-31 | 2015-09-30 | 中国移动通信集团宁夏有限公司 | 对数据进行压缩的方法和装置 |
CN106528842A (zh) * | 2016-11-11 | 2017-03-22 | 哈尔滨工程大学 | 一种漏磁检测数据重要数据段筛选方法 |
CN106775586A (zh) * | 2016-11-11 | 2017-05-31 | 珠海市杰理科技股份有限公司 | 数据排序方法和装置 |
CN107544753A (zh) * | 2017-07-26 | 2018-01-05 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及服务器 |
CN109445693A (zh) * | 2018-10-19 | 2019-03-08 | 郑州云海信息技术有限公司 | 一种数据压缩方法和装置 |
CN110399372A (zh) * | 2019-06-05 | 2019-11-01 | 上海英方软件股份有限公司 | 一种rowid对应关系数据的压缩和解压方法 |
CN110767265A (zh) * | 2019-10-23 | 2020-02-07 | 中国科学院计算技术研究所 | 一种针对大数据基因组比对文件排序的并行加速方法 |
CN113392140A (zh) * | 2021-06-11 | 2021-09-14 | 上海达梦数据库有限公司 | 一种数据排序方法、装置、电子设备及存储介质 |
CN114679500A (zh) * | 2022-05-30 | 2022-06-28 | 深圳市明珞锋科技有限责任公司 | 一种重复信息归并的提速式信息传输系统 |
CN117435145A (zh) * | 2023-12-20 | 2024-01-23 | 北京清水爱派建筑设计股份有限公司 | 一种数字化建筑信息优化存储方法及系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080059492A1 (en) * | 2006-08-31 | 2008-03-06 | Tarin Stephen A | Systems, methods, and storage structures for cached databases |
CN102968496A (zh) * | 2012-12-04 | 2013-03-13 | 天津神舟通用数据技术有限公司 | 基于任务驱动和双缓冲机制的并行排序方法 |
CN103198127A (zh) * | 2013-04-10 | 2013-07-10 | 中国银行股份有限公司 | 大文件排序方法及系统 |
-
2013
- 2013-10-23 CN CN201310505217.3A patent/CN103577559A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20080059492A1 (en) * | 2006-08-31 | 2008-03-06 | Tarin Stephen A | Systems, methods, and storage structures for cached databases |
CN102968496A (zh) * | 2012-12-04 | 2013-03-13 | 天津神舟通用数据技术有限公司 | 基于任务驱动和双缓冲机制的并行排序方法 |
CN103198127A (zh) * | 2013-04-10 | 2013-07-10 | 中国银行股份有限公司 | 大文件排序方法及系统 |
Non-Patent Citations (1)
Title |
---|
王岁花等: "一种新的外部排序算法的设计与实现", 《许昌学院学报》 * |
Cited By (20)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104951473A (zh) * | 2014-03-31 | 2015-09-30 | 中国移动通信集团宁夏有限公司 | 对数据进行压缩的方法和装置 |
CN104021161B (zh) * | 2014-05-27 | 2018-06-15 | 华为技术有限公司 | 一种聚簇存储方法及装置 |
US10817258B2 (en) | 2014-05-27 | 2020-10-27 | Huawei Technologies Co., Ltd. | Clustering storage method and apparatus |
CN104021161A (zh) * | 2014-05-27 | 2014-09-03 | 华为技术有限公司 | 一种聚簇存储方法及装置 |
CN108897761A (zh) * | 2014-05-27 | 2018-11-27 | 华为技术有限公司 | 一种聚簇存储方法及装置 |
CN104102168A (zh) * | 2014-07-14 | 2014-10-15 | 上海航天能源股份有限公司 | 一种用于天然气管网调压的数据传输方法 |
CN104102168B (zh) * | 2014-07-14 | 2017-02-01 | 上海航天能源股份有限公司 | 一种用于天然气管网调压的数据传输方法 |
CN106775586B (zh) * | 2016-11-11 | 2019-06-11 | 珠海市杰理科技股份有限公司 | 数据排序方法和装置 |
CN106775586A (zh) * | 2016-11-11 | 2017-05-31 | 珠海市杰理科技股份有限公司 | 数据排序方法和装置 |
CN106528842A (zh) * | 2016-11-11 | 2017-03-22 | 哈尔滨工程大学 | 一种漏磁检测数据重要数据段筛选方法 |
CN107544753A (zh) * | 2017-07-26 | 2018-01-05 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及服务器 |
CN107544753B (zh) * | 2017-07-26 | 2020-08-14 | 阿里巴巴集团控股有限公司 | 数据处理方法、装置及服务器 |
CN109445693A (zh) * | 2018-10-19 | 2019-03-08 | 郑州云海信息技术有限公司 | 一种数据压缩方法和装置 |
CN110399372A (zh) * | 2019-06-05 | 2019-11-01 | 上海英方软件股份有限公司 | 一种rowid对应关系数据的压缩和解压方法 |
CN110767265A (zh) * | 2019-10-23 | 2020-02-07 | 中国科学院计算技术研究所 | 一种针对大数据基因组比对文件排序的并行加速方法 |
CN113392140A (zh) * | 2021-06-11 | 2021-09-14 | 上海达梦数据库有限公司 | 一种数据排序方法、装置、电子设备及存储介质 |
CN113392140B (zh) * | 2021-06-11 | 2023-05-09 | 上海达梦数据库有限公司 | 一种数据排序方法、装置、电子设备及存储介质 |
CN114679500A (zh) * | 2022-05-30 | 2022-06-28 | 深圳市明珞锋科技有限责任公司 | 一种重复信息归并的提速式信息传输系统 |
CN117435145A (zh) * | 2023-12-20 | 2024-01-23 | 北京清水爱派建筑设计股份有限公司 | 一种数字化建筑信息优化存储方法及系统 |
CN117435145B (zh) * | 2023-12-20 | 2024-02-13 | 北京清水爱派建筑设计股份有限公司 | 一种数字化建筑信息优化存储方法及系统 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103577559A (zh) | 数据排序方法和装置 | |
CN103488709B (zh) | 一种索引建立方法及系统、检索方法及系统 | |
CN104239518B (zh) | 重复数据删除方法和装置 | |
CN105224237A (zh) | 一种数据存储方法及装置 | |
WO2015145647A1 (ja) | ストレージ装置とデータ処理方法及びストレージシステム | |
CN104765665A (zh) | 一种测试硬盘的方法及装置 | |
US10042873B2 (en) | Data encoding and processing columnar data | |
CN103150260A (zh) | 重复数据删除方法和装置 | |
CN103440246A (zh) | 用于MapReduce的中间结果数据排序方法及系统 | |
CN112260694B (zh) | 一种仿真文件的数据压缩方法 | |
CN106126124A (zh) | 一种数据处理方法及电子设备 | |
CN104298736A (zh) | 数据集合连接方法、装置及数据库系统 | |
CN104951342A (zh) | 一种调整启动顺序的方法及装置 | |
CN106407442B (zh) | 一种海量文本数据处理方法及装置 | |
CN106557571A (zh) | 一种基于k‑v存储引擎的数据去重方法及装置 | |
CN103500224A (zh) | 一种数据写入方法及装置、数据读取方法及装置 | |
CN103765375A (zh) | 向目标物理介质集合传递在虚拟卷中组织的已去重的数据 | |
CN107729406A (zh) | 一种数据分类存储方法及装置 | |
CN104615490A (zh) | 一种数据转换的方法及装置 | |
CN108628760A (zh) | 原子写命令的方法与装置 | |
US9880930B2 (en) | Method for operating controller and method for operating device including the same | |
WO2021082926A1 (zh) | 一种数据压缩的方法及装置 | |
CN104462080A (zh) | 针对检索结果进行分组统计的索引结构创建方法和系统 | |
CN104753741A (zh) | 一种网卡测试性能调节的方法及装置 | |
CN103810297A (zh) | 基于重删技术的写方法、读方法、写装置和读装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20140212 |
|
RJ01 | Rejection of invention patent application after publication |