數據排序方法和裝置制造方法
【專利摘要】本發明公開了一種數據排序方法和裝置,屬于計算機領域。所述方法包括:將待排序數據分批讀入內存,每讀入一段數據,對所述讀入的數據進行排序,得到有序數據段;再進行壓縮,得到壓縮數據段;將每次壓縮后得到的壓縮數據段寫入所述存儲介質;當所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,并進行歸并,得到合并數據段;對所述合并數據段進行解壓,獲取排序數據;將所述排序數據寫入所述存儲介質。本發明通過在對讀入內存的數據進行排序后,對得到的有序數據段進行壓縮,將壓縮后的有序數據段進行歸并,歸并過程中無需解壓,降低了磁盤IO,節省了CPU的資源,提高了數據排序的性能。
【專利說明】數據排序方法和裝置
【技術領域】
[0001]本發明涉及計算機領域,特別涉及一種數據排序方法和裝置。
【背景技術】
[0002]排序是計算機內經常進行的一種操作,其目的是將一組“無序”的數據調整為“有序”的數據。現有技術通常通過外部排序來對數據進行處理,即將待排序的數據分批讀入內存,在內存中采用內存排序方法分別對讀入的待排序數據進行排序,得到初始合并段,將得到的初始合并段寫入磁盤;當所有的初始合并段均寫入磁盤后,每次從磁盤中讀取多個初始合并段,將該多個初始合并段進行歸并,得到中間合并段,將得到的中間合并段再次寫入磁盤中,直到磁盤中所有的初始合并段被歸并為中間合并段后,再每次從磁盤中讀取多個中間合并段進行歸并,經過多次歸并后,得到一個有序數據。
[0003]在實現本發明的過程中,發明人發現現有技術至少存在以下問題:
[0004]在對數據的進行排序的過程中,需要進行多次歸并,且待排序的數據量越大,磁盤10越大,排序耗時長,磁盤負擔重。
【發明內容】
[0005]為了解決現有技術的問題,本發明實施例提供了一種數據排序方法和裝置。所述技術方案如下:
[0006]第一方面,提供了一種數據排序方法,所述方法包括:
[0007]將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對所述讀入的數據進行排序,得到有序數據段;
[0008]對所述有序數據段進行壓縮,得到壓縮數據段;
[0009]將每次壓縮后得到的壓縮數據段寫入所述存儲介質;
[0010]當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,并進行歸并,得到合并數據段;
[0011]對所述合并數據段進行解壓,獲取排序數據;
[0012]將所述排序數據寫入所述存儲介質。
[0013]結合第一方面,在第一方面的第一種可能實現方式中,將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對所述讀入的數據進行排序,得到有序數據段包括:
[0014]將所述存儲介質中的待排序數據分批讀入所述內存;
[0015]每讀入一段數據,使用預設內存排序算法,對所述讀入的數據進行排序,得到所述有序數據段。
[0016]結合第一方面,在第一方面的第二種可能實現方式中,對所述有序數據段進行壓縮,得到壓縮數據段包括:
[0017]獲取所述有序數據段中的數據以及每個數據在所述有序數據段中的出現次數;
[0018]根據所述有序數據段中的數據以及每個數據的出現次數,獲取所述壓縮數據段。[0019]結合第一方面,在第一方面的第三種可能實現方式中,當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,并進行歸并,得到合并數據段包括:
[0020]當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,每讀入預設數目的壓縮數據段,對所述預設數目的壓縮數據段進行歸并,得到中間數據段;
[0021]將所述中間數據段寫入所述存儲介質;
[0022]當所述待排序數據對應的所有中間數據段均寫入所述存儲介質時,將所述所有中間數據段分批讀入所述內存,繼續進行歸并,直至得到所述合并數據段。
[0023]結合第一方面的第三種可能實現方式,在第一方面的第四種可能實現方式中,每讀入預設數目的壓縮數據段,對所述預設數目的壓縮數據段進行歸并,得到中間數據段包括:
[0024]獲取所述預設數目的壓縮數據段中的數據,以及每個數據在對應的壓縮數據段中的出現次數;
[0025]獲取每個數據的總出現次數,所述總出現次數為所述每個數據在對應的壓縮數據段中的出現次數之和;
[0026]根據所述每個數據和所述每個數據的總出現次數,獲取所述中間數據段。
[0027]第二方面,提供了一種數據排序裝置,所述裝置包括:
[0028]數據讀入模塊,用于將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對所述讀入的數據進行排序,得到有序數據段;
[0029]壓縮模塊,用于對所述有序數據段進行壓縮,得到壓縮數據段;
[0030]數據段寫入模塊,用于將每次壓縮后得到的壓縮數據段寫入所述存儲介質;
[0031]歸并模塊,用于當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,并進行歸并,得到合并數據段;
[0032]解壓模塊,用于對所述合并數據段進行解壓,獲取排序數據;
[0033]排序數據寫入模塊,用于將所述排序數據寫入所述存儲介質。
[0034]結合第二方面,在第二方面的第一種可能實現方式中,所述數據讀入模塊包括:
[0035]數據讀入單元,用于將所述存儲介質中的待排序數據分批讀入所述內存;
[0036]排序單元,用于每讀入一段數據,使用預設內存排序算法,對所述讀入的數據進行排序,得到所述有序數據段。
[0037]結合第二方面,在第二方面的第二種可能實現方式中,所述壓縮模塊包括:
[0038]出現次數獲取單元,用于獲取所述有序數據段中的數據以及每個數據在所述有序數據段中的出現次數;
[0039]壓縮數據段獲取單元,用于根據所述有序數據段中的數據以及每個數據的出現次數,獲取所述壓縮數據段。
[0040]結合第二方面,在第二方面的第三種可能實現方式中,所述歸并模塊包括:
[0041]歸并單元,用于當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,每讀入預設數目的壓縮數據段,對所述預設數目的壓縮數據段進行歸并,得到中間數據段;[0042]中間數據段寫入單元,用于將所述中間數據段寫入所述存儲介質;
[0043]合并數據段獲取單元,用于當所述待排序數據對應的所有中間數據段均寫入所述存儲介質時,將所述所有中間數據段分批讀入所述內存,繼續進行歸并,直至得到所述合并數據段。
[0044]結合第二方面的第三種可能實現方式,在第二方面的第四種可能實現方式中,所述歸并單元包括:
[0045]出現次數獲取子單元,用于獲取所述預設數目的壓縮數據段中的數據,以及每個數據在對應的壓縮數據段中的出現次數;
[0046]總次數獲取子單元,用于獲取每個數據的總出現次數,所述總出現次數為所述每個數據在對應的壓縮數據段中的出現次數之和;
[0047]中間數據段獲取子單元,用于根據所述每個數據和所述每個數據的總出現次數,獲取所述中間數據段。
[0048]本發明實施例提供的技術方案帶來的有益效果是:
[0049]本發明實施例提供的方法和裝置,通過在對讀入內存的數據進行排序后,對得到的有序數據段進行壓縮,將壓縮后的有序數據段進行歸并,歸并過程中無需解壓,降低了磁盤10,節省了 CPU的資源,提高了數據排序的性能。
【專利附圖】
【附圖說明】
[0050]為了更清楚地說明本發明實施例中的技術方案,下面將對實施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發明的一些實施例,對于本領域普通技術人員來講,在不付出創造性勞動的前提下,還可以根據這些附圖獲得其他的附圖。
[0051]圖1是本發明實施例提供的一種數據排序方法的流程圖;
[0052]圖2a是本發明實施例提供的一種數據排序方法的流程圖;
[0053]圖2b是本發明實施例提供的兩路歸并示意圖;
[0054]圖3是本發明實施例提供的一種數據排序方法的流程圖;
[0055]圖4是本發明實施例提供的一種數據排序裝置結構示意圖。
【具體實施方式】
[0056]下面將結合本發明實施例中的附圖,對本發明實施例中的技術方案進行清楚、完整地描述,顯然,所描述的實施例是本發明一部分實施例,而不是全部的實施例。基于本發明中的實施例,本領域普通技術人員在沒有做出創造性勞動前提下所獲得的所有其他實施例,都屬于本發明保護的范圍。
[0057]圖1是本發明實施例提供的一種數據排序方法的流程圖,參見圖1,所述方法包括:
[0058]101:將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對該讀入的數據進行排序,得到有序數據段;
[0059]102:對該有序數據段進行壓縮,得到壓縮數據段;
[0060]103:將每次壓縮后得到的壓縮數據段寫入該存儲介質;[0061]104:當該待排序數據所對應的所有壓縮數據段均寫入該存儲介質時,將該存儲介質中的壓縮數據段分批讀入該內存,并進行歸并,得到合并數據段;
[0062]105:對該合并數據段進行解壓,獲取排序數據;
[0063]106:將該排序數據寫入該存儲介質。
[0064]本發明實施例提供的方法,通過在對讀入內存的數據進行排序后,對得到的有序數據段進行壓縮,將壓縮后的有序數據段進行歸并,歸并過程中無需解壓,降低了磁盤10,節省了 CPU的資源,提高了數據排序的性能。
[0065]可選地,將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對該讀入的數據進行排序,得到有序數據段包括:
[0066]將該存儲介質中的待排序數據分批讀入該內存;
[0067]每讀入一段數據,使用預設內存排序算法,對該讀入的數據進行排序,得到該有序數據段。
[0068]可選地,對該有序數據段進行壓縮,得到壓縮數據段包括:
[0069]獲取該有序數據段中的數據以及每個數據在該有序數據段中的出現次數;
[0070]根據該有序數據段中的數據以及每個數據的出現次數,獲取該壓縮數據段。
[0071]可選地,當該待排序數據所對應的所有壓縮數據段均寫入該存儲介質時,將該存儲介質中的壓縮數據段分批讀入該內存,并進行歸并,得到合并數據段包括:
[0072]當該待排序數據所對應的所有壓縮數據段均寫入該存儲介質時,將該存儲介質中的壓縮數據段分批讀入該內存,每讀入預設數目的壓縮數據段,對該預設數目的壓縮數據段進行歸并,得到中間數據段;
[0073]將該中間數據段寫入該存儲介質;
[0074]當該待排序數據對應的所有中間數據段均寫入該存儲介質時,將該所有中間數據段分批讀入該內存,繼續進行歸并,直至得到該合并數據段。
[0075]可選地,每讀入預設數目的壓縮數據段,對該預設數目的壓縮數據段進行歸并,得到中間數據段包括:
[0076]獲取該預設數目的壓縮數據段中的數據,以及每個數據在對應的壓縮數據段中的出現次數;
[0077]獲取每個數據的總出現次數,該總出現次數為該每個數據在對應的壓縮數據段中的出現次數之和;
[0078]根據該每個數據和該每個數據的總出現次數,獲取該中間數據段。
[0079]上述所有可選技術方案,可以采用任意結合形成本發明的可選實施例,在此不再
--贅述。
[0080]圖2a是本發明實施例提供的一種數據排序方法的流程圖。本發明實施例應用于對包括重復數據的待排序數據進行排序的場景下,參見圖2a,所述方法包括:
[0081]201:將存儲介質中的待排序數據分批讀入內存;
[0082]其中,該存儲介質用于存儲數據,可以為軟盤、磁盤、光盤等。
[0083]為了進行數據排序,需要首先將待排序數據讀入內存,而當該內存不足以容納該待排序數據時,需要根據內存的大小,一次讀入一部分的待排序數據到內存,也即是,將該待排序數據分批讀入內存。[0084]圖2b是本發明實施例提供的兩路歸并示意圖。參見圖2b,該待排序數據為xbayabczxybyzdzbyaxzbxd,當內存不足以容納該待排序數據時,將該待排序數據分為xbayabczxyby和zdzbyaxzbxd,并依次讀入內存,即首先將待排序數據xbayabczxyby讀入內存中。
[0085]202:每讀入一段數據,使用預設內存排序算法,對該讀入的數據進行排序,得到有序數據段;
[0086]其中,該預設內存排序算法可以為快速排序算法、堆排序算法或歸并排序算法,本發明實施例對此不做限定。
[0087]具體地,每讀入一段數據,使用該預設內存排序算法,對該讀入的數據進行調整,將該讀入的數據調整為一段有序的數據,即得到該有序數據段。
[0088]參見圖2b,對該讀入內存的待排序數據xbayabczxyby進行快速排序,得到有序數據段 aabbbcxxyyyz。
[0089]203:對該有序數據段進行壓縮,得到壓縮數據段;
[0090]可選地,該步驟203具體包括:
[0091](1)獲取該有序數據段中的數據以及每個數據在該有序數據段中的出現次數;
[0092]本發明實施例應用于該待排序數據包括重復數據的場景下,則在獲取該有序數據段中的數據的同時,獲取數據在該有序數據段中的出現次數。
[0093]參見圖2b,該有序數據段aabbbcxxyyyz包括數據a、b、c、x、y、z,且數據a、b、c、x、y、z在該有序數據段中的出現次數分別為2、3、1、2、3、1。
[0094](2)根據該有序數據段中的數據以及每個數據的出現次數,獲取該壓縮數據段。
[0095]具體地,將該壓縮數據段以該有序數據段中的數據與該數據的出現次數對應表
/j、l Ο
[0096]參見圖2b,將該有序數據段aabbbcxxyyyz表示為a2b3clx2y3zl。
[0097]優選地,該步驟203具體包括:對該有序數據段進行RLE (Run-Length-Encoding,行程編碼)壓縮,得到該壓縮數據段。
[0098]其中,RLE是一種統計編碼,該編碼屬于無損壓縮編碼,RLE壓縮的基本原理是:將數據序列中的數據,用單個數據和該數據在該數據序列中的出現次數表示,從而實現數據的壓縮,算法簡單,壓縮速度快。
[0099]204:將每次壓縮后得到的壓縮數據段寫入該存儲介質;
[0100]在本發明實施例中,將壓縮后得到的壓縮數據段寫入該存儲介質,降低了磁盤10,提供了數據排序性能。
[0101]205:判斷該存儲介質中是否還存在待排序數據;如果是,執行步驟201,如果否,執行步驟206 ;
[0102]具體地,該存儲介質中的待排序數據較大,當該內存不足以容納該存儲介質中的所有待排序數據時,根據該內存的大小,將待排序數據分批讀入該內存,并判斷該存儲介質中是否還存在未讀入內存的待排序數據,如果是,繼續執行步驟201,將該存儲介質中未讀入內存的待排序數據讀入該內存。
[0103]參見圖2b,根據內存的大小將待排序數據xbayabczxybyzdzbyaxzbxd,分為xbayabczxyby和zdzbyaxzbxd依次讀入內存,首先將xbayabczxyby讀入內存后,并通過執行步驟202-步驟205,將xbayabczxyby對應的壓縮數據段寫入該存儲介質,則判斷該存儲介質中是否還存在待排序數據,此時,確定該存儲介質中還存在待排序數據zdzbyaxzbxd,則將待排序數據zdzbyaxzbxd讀入該內存。
[0104]206:將該存儲介質中的壓縮數據段分批讀入該內存;
[0105]在本發明實施例中,當該存儲介質中不存在未讀入內存的待排序數據時,將該存儲介質中的壓縮數據段分批讀入該內存。
[0106]207:每讀入預設數目的壓縮數據段,獲取該預設數目的壓縮數據段中的數據,以及每個數據在對應的壓縮數據段中的出現次數;
[0107]具體地,對于一個壓縮數據段,獲取該壓縮數據段中的每個數據,并獲取每個數據在該壓縮數據段中的出現次數。
[0108]其中,該預設數目可以預先設定,或根據該壓縮數據段的總數目確定,本發明實施例對此不做限定。
[0109]參見圖2b,對于待排序數據xbayabczxybyzdzbyaxzbxd,得到的壓縮數據段包括a2b3clx2y3zl和alb2d2x2ylz3,則在第一個數據段中,數據a、b、c、x、y、z的出現次數分別為2、3、1、2、3、1,在第二個數據段中,數據a、b、d、x、y、z的出現次數分別為1、2、2、2、1、3。
[0110]208:獲取每個數據的總出現次數,該總出現次數為該每個數據在對應的壓縮數據段中的出現次數之和;
[0111]在本發明實施例中,該總出現次數用于表示數據在該預設數目的壓縮數據段中的總出現次數。具體地,對于該預設數目的壓縮數據段,獲取該預設數目的壓縮數據段中的每個數據;當該預設數目的壓縮數據段中的任兩個壓縮數據段中包括相同的數據時,獲取該數據在該兩個壓縮數據段中的出現次數之和,進而獲取該數據在該預設數目的每個壓縮數據段的出現次數之和,將得到的出現次數之和確定為該數據的總出現次數;對于該預設數目的壓縮數據段中的任兩個壓縮數據段中不同的數據,將該數據在對應的壓縮數據段中的出現次數確定為該數據的總出現次數。
[0112]參見圖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。
[0113]209:根據該每個數據和該每個數據的總出現次數,獲取該中間數據段;
[0114]具體地,將該中間數據段以每個數據與該數據的總出現次數對應表示。
[0115]在步驟207-209中,對該預設數目的壓縮數據段進行歸并排序,得到中間數據段。優選地,對該壓縮數據段進行N次歸并排序,即將N個壓縮數據段歸并為一個有序數據段。進一步優選地,采用兩路歸并算法對壓縮數據段進行歸并,即N=2,也即是該預設數目為2。
[0116]參見圖2b,根據數據a、b、C、d、x、y、z的總出現次數,得到中間數據段a3b5cld2x4y4z40
[0117]210:將該中間數據段寫入該存儲介質;
[0118]211:判斷該存儲介質中是否還存在未讀入內存的壓縮數據段,如果是,執行步驟206,如果否,執行步驟212 ;
[0119]212:將該所有中間數據段分批讀入該內存,繼續進行歸并,直至得到該合并數據段;
[0120]在本發明實施例中,當該存儲介質中不存在未讀入內存的壓縮數據段時,將該存儲介質中的所有中間數據段分批讀入該內存。在讀入內存后的歸并過程與壓縮數據段歸并為中間數據段的過程類似,在此不再贅述。
[0121]其中,該合并數據段為一個有序的數據段,即對壓縮數據段逐趟進行歸并,直至得到一個有序的數據段為止。
[0122]參見圖2b,該中間數據段a3b5cld2x4y4z4為一個有序的數據段,且不存在其他數據段,則將該數據段a3b5cld2X4y4z4確定為該合并數據段。
[0123]本發明實施例以采用兩路歸并算法對壓縮數據段進行歸并為例進行說明,則在對中間數據段進行歸并時,同樣是依次將兩個中間數據段歸并為一個數據段,并寫入存儲介質,當將所有的中間數據段歸并且寫入存儲介質時,繼續進行兩路歸并,直至歸并為一個有序的數據段,即為該合并數據段。
[0124]在本發明實施例中,在對壓縮數據段進行歸并時,可以直接進行數據段的歸并,而無需進行解壓,避免了增加占用CPU的資源。
[0125]213:對該合并數據段進行解壓,獲取排序數據;
[0126]解壓過程為壓縮過程的逆過程,具體為:根據該合并數據段中的數據的出現次數,將該合并數據段以重復的數據表示,得到排序數據,其中,數據重復的次數即為數據的出現次數。
[0127]參見圖2,對合并數據段a3b5cld2X4y4z4進行解壓,得到排序數據aaabbbbbcddxxxxyyyyzzzz0
[0128]214:將該排序數據寫入該存儲介質。
[0129]本發明實施例提供的方法,通過在對讀入內存的數據進行排序后,對得到的有序數據段進行壓縮,將壓縮后的有序數據段進行歸并,歸并過程中無需解壓,降低了磁盤10,節省了 CPU的資源,提高了數據排序的性能。
[0130]圖3是本發明實施例提供的一種數據排序方法的流程圖,本發明實施例應用于對數據庫中的數據進行排序的場景下,參見圖3,所述方法包括:
[0131]301:將存儲介質中的待排序數據庫數據分批讀入內存;
[0132]具體地,當數據庫的每個連接所分配的用于排序的內存不足以容納該待排序數據時,將該待排序數據庫數據分批讀入該內存。
[0133]數據庫中的很多操作都需要對數據進行排序,如聚集操作的一種實現方法為排序聚集,而數據庫中的MAX、MIN、SUM、COUNT等基本功能都是通過聚集操作實現的,即數據庫中的很多基本功能都需要對數據進行排序;又如,Merge Join操作是表連接的一種實現方法,需要內表和外表均為有序表,即Mergejoin操作也需要對數據進行排序。進一步地,由于數據庫是高并發系統,為每個連接所分配的用于排序的內存一般不會太大(如,數據庫Postgres默認只有1MB),則對于大數據量的數據排序操作需要使用存儲介質進行數據排序。
[0134]302:每讀入一段數據庫數據,使用預設內存排序算法,對該讀入的數據庫數據進行排序,得到有序數據段;
[0135]具體地,每讀入一段數據庫數據,選擇該數據庫數據中的多列,并指定按照其中一列,對該數據庫數據進行排序,如采用select......0rder by......語句,實現對讀入內存的待
排序數據庫數據的排序。
[0136]例如,米用語句:selectname,age,address,phone from order by age對數據庫數據中的name、age、address、phone進行查詢,并按照age從小到大的順序進行排序。
[0137]如,表1是本發明實施例提供讀入內存的待排序數據庫數據,該讀入內存的待排序數據庫數據包括rowid, name, age, address, phone ;其中rowid是唯一行定位標識。
[0138]表1
【權利要求】
1.一種數據排序方法,其特征在于,所述方法包括: 將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對所述讀入的數據進行排序,得到有序數據段; 對所述有序數據段進行壓縮,得到壓縮數據段; 將每次壓縮后得到的壓縮數據段寫入所述存儲介質; 當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,并進行歸并,得到合并數據段; 對所述合并數據段進行解壓,獲取排序數據; 將所述排序數據寫入所述存儲介質。
2.根據權利要求1所述的方法,其特征在于,將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對所述讀入的數據進行排序,得到有序數據段包括: 將所述存儲介質中的待排序數據分批讀入所述內存; 每讀入一段數據,使用預設內存排序算法,對所述讀入的數據進行排序,得到所述有序數據段。
3.根據權利要求1所述的方法,其特征在于,對所述有序數據段進行壓縮,得到壓縮數據段包括: 獲取所述有序數據段中的數據以及每個數據在所述有序數據段中的出現次數;· 根據所述有序數據段中的數據以及每個數據的出現次數,獲取所述壓縮數據段。
4.根據權利要求1所述的方法,其特征在于,當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,并進行歸并,得到合并數據段包括: 當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,每讀入預設數目的壓縮數據段,對所述預設數目的壓縮數據段進行歸并,得到中間數據段; 將所述中間數據段寫入所述存儲介質; 當所述待排序數據對應的所有中間數據段均寫入所述存儲介質時,將所述所有中間數據段分批讀入所述內存,繼續進行歸并,直至得到所述合并數據段。
5.根據權利要求4所述的方法,其特征在于,每讀入預設數目的壓縮數據段,對所述預設數目的壓縮數據段進行歸并,得到中間數據段包括: 獲取所述預設數目的壓縮數據段中的數據,以及每個數據在對應的壓縮數據段中的出現次數; 獲取每個數據的總出現次數,所述總出現次數為所述每個數據在對應的壓縮數據段中的出現次數之和; 根據所述每個數據和所述每個數據的總出現次數,獲取所述中間數據段。
6.一種數據排序裝置,其特征在于,所述裝置包括: 數據讀入模塊,用于將存儲介質中的待排序數據分批讀入內存,每讀入一段數據,對所述讀入的數據進行排序,得到有序數據段; 壓縮模塊,用于對所述有序數據段進行壓縮,得到壓縮數據段; 數據段寫入模塊,用于將每次壓縮后得到的壓縮數據段寫入所述存儲介質;歸并模塊,用于當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,并進行歸并,得到合并數據段; 解壓模塊,用于對所述合并數據段進行解壓,獲取排序數據; 排序數據寫入模塊,用于將所述排序數據寫入所述存儲介質。
7.根據權利要求6所述的裝置,其特征在于,所述數據讀入模塊包括: 數據讀入單元,用于將所述存儲介質中的待排序數據分批讀入所述內存; 排序單元,用于每讀入一段數據,使用預設內存排序算法,對所述讀入的數據進行排序,得到所述有序數據段。
8.根據權利要求6所述的裝置,其特征在于,所述壓縮模塊包括: 出現次數獲取單元,用于獲取所述有序數據段中的數據以及每個數據在所述有序數據段中的出現次數; 壓縮數據段獲取單元,用于根據所述有序數據段中的數據以及每個數據的出現次數,獲取所述壓縮數據段。
9.根據權利要求6所述的 裝置,其特征在于,所述歸并模塊包括: 歸并單元,用于當所述待排序數據所對應的所有壓縮數據段均寫入所述存儲介質時,將所述存儲介質中的壓縮數據段分批讀入所述內存,每讀入預設數目的壓縮數據段,對所述預設數目的壓縮數據段進行歸并,得到中間數據段; 中間數據段寫入單元,用于將所述中間數據段寫入所述存儲介質; 合并數據段獲取單元,用于當所述待排序數據對應的所有中間數據段均寫入所述存儲介質時,將所述所有中間數據段分批讀入所述內存,繼續進行歸并,直至得到所述合并數據段。
10.根據權利要求9所述的裝置,其特征在于,所述歸并單元包括: 出現次數獲取子單元,用于獲取所述預設數目的壓縮數據段中的數據,以及每個數據在對應的壓縮數據段中的出現次數; 總次數獲取子單元,用于獲取每個數據的總出現次數,所述總出現次數為所述每個數據在對應的壓縮數據段中的出現次數之和; 中間數據段獲取子單元,用于根據所述每個數據和所述每個數據的總出現次數,獲取所述中間數據段。
【文檔編號】G06F17/30GK103577559SQ201310505217
【公開日】2014年2月12日 申請日期:2013年10月23日 優先權日:2013年10月23日
【發明者】王傳廷, 劉輝軍 申請人:華為技術有限公司