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