本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,具體而言,涉及一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序方法和裝置。
背景技術(shù):
數(shù)據(jù)的排序目前更多的應(yīng)用于大數(shù)據(jù)統(tǒng)計(jì)中,例如對(duì)網(wǎng)站訪問(wèn)量進(jìn)行排序,可以查看訪問(wèn)量最大的網(wǎng)站排名次序,然后進(jìn)行一些決策。其中,在小數(shù)據(jù)量的數(shù)據(jù)進(jìn)行排序的情況下,利用當(dāng)前許多快速的排序算法,排序?qū)⑹且患浅:?jiǎn)單的事情。但是當(dāng)數(shù)據(jù)量大到一定級(jí)別之后,原本簡(jiǎn)單的排序也變得復(fù)雜起來(lái)。例如,當(dāng)有100G的數(shù)據(jù)需要排序的時(shí)候,系統(tǒng)已經(jīng)無(wú)法簡(jiǎn)單的把數(shù)據(jù)讀入內(nèi)存然后進(jìn)行單機(jī)排序,因?yàn)闆](méi)有任何一臺(tái)服務(wù)器有100G的內(nèi)存,就算有這種超大內(nèi)存的服務(wù)器,也絕對(duì)不會(huì)用它的全部?jī)?nèi)存來(lái)進(jìn)行排序。
當(dāng)前的技術(shù)架構(gòu)所構(gòu)建的排序方式,可以通過(guò)現(xiàn)有的框架來(lái)把數(shù)據(jù)排序的任務(wù)分布到集群的各個(gè)節(jié)點(diǎn)上去計(jì)算。即把100G的數(shù)據(jù)切分,分布到集群的各個(gè)節(jié)點(diǎn)中去,通過(guò)框架的統(tǒng)一調(diào)度,在各個(gè)節(jié)點(diǎn)上讀取數(shù)據(jù),然后進(jìn)行排序計(jì)算,最后將各個(gè)節(jié)點(diǎn)上排好序的結(jié)果進(jìn)行合并,然后將整體的結(jié)果輸出到文件系統(tǒng)中。
上述的排序方式有兩個(gè)問(wèn)題:
第一個(gè)問(wèn)題為結(jié)果的合并:在各個(gè)節(jié)點(diǎn)上排好序的排序結(jié)果需要進(jìn)行合并。因?yàn)閿?shù)據(jù)本身是無(wú)序的,因此各個(gè)節(jié)點(diǎn)的排序結(jié)果之間也是毫無(wú)規(guī)律的,這樣的問(wèn)題就是合并過(guò)程要么十分緩慢,要么需要引入新的分布機(jī)制,對(duì)于要合并的排序結(jié)果數(shù)據(jù)進(jìn)行相對(duì)有序的再次分布后再次排序和合并,而無(wú)論哪一種方案都會(huì)比較緩慢。
第二個(gè)問(wèn)題為結(jié)果的查看:即整個(gè)數(shù)據(jù)集都排序好之后,需要保存成文件,而這樣就造成了查看排序結(jié)果的不便,無(wú)法快速的查看任意指定區(qū)間的排序結(jié)果。
針對(duì)上述的問(wèn)題,目前尚未提出有效的解決方案。
技術(shù)實(shí)現(xiàn)要素:
本申請(qǐng)實(shí)施例提供了一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序方法和裝置,以至少解決 現(xiàn)有技術(shù)中數(shù)據(jù)排序效率低的技術(shù)問(wèn)題。
根據(jù)本申請(qǐng)實(shí)施例的一個(gè)方面,提供了一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序方法,該方法包括:將待排序數(shù)據(jù)切分至所述HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn)中,其中,每個(gè)所述集群節(jié)點(diǎn)在得到切分?jǐn)?shù)據(jù)后,均執(zhí)行所述HBase數(shù)據(jù)庫(kù)的行鍵值排序方式;讀取每個(gè)所述集群節(jié)點(diǎn)的排序結(jié)果,得到多個(gè)所述排序結(jié)果,其中,每個(gè)所述集群節(jié)點(diǎn)執(zhí)行所述行鍵值排序方式對(duì)切分?jǐn)?shù)據(jù)進(jìn)行排序后,均得到一個(gè)所述排序結(jié)果;以及確定多個(gè)所述排序結(jié)果的集合為所述待排序數(shù)據(jù)的排序結(jié)果。
進(jìn)一步地,每個(gè)所述集群節(jié)點(diǎn)執(zhí)行所述行鍵值排序方式對(duì)切分?jǐn)?shù)據(jù)進(jìn)行排序后,均得到一個(gè)所述排序結(jié)果包括:集群節(jié)點(diǎn)Ai執(zhí)行所述行鍵值排序方式對(duì)切分至所述集群節(jié)點(diǎn)Ai的切分?jǐn)?shù)據(jù)Di進(jìn)行排序,得到排序結(jié)果Ri,其中,i依次取1至n,n為所述HBase數(shù)據(jù)庫(kù)中集群節(jié)點(diǎn)的數(shù)量,集群節(jié)點(diǎn)A1至集群節(jié)點(diǎn)An構(gòu)成所述HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn),切分?jǐn)?shù)據(jù)D1至切分?jǐn)?shù)據(jù)Dn構(gòu)成所述待排序數(shù)據(jù),確定多個(gè)所述排序結(jié)果的集合為所述待排序數(shù)據(jù)的排序結(jié)果包括:所述集群節(jié)點(diǎn)Ai將所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù),得到所述待排序數(shù)據(jù)的排序結(jié)果,其中,所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)為所述切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí)和所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量組成的鍵值對(duì)。
進(jìn)一步地,所述集群節(jié)點(diǎn)Ai將所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù)包括:查詢(xún)所述HBase數(shù)據(jù)庫(kù)是否已存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di的行鍵值,其中,所述切分?jǐn)?shù)據(jù)Di的行鍵值為所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量的負(fù)數(shù);在所述HBase數(shù)據(jù)庫(kù)內(nèi)已存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,將所述切分?jǐn)?shù)據(jù)Di存儲(chǔ)至第一目標(biāo)列,其中,所述第一目標(biāo)列為所述切分?jǐn)?shù)據(jù)Di的行鍵值所在行的所屬列族中的任意一列;以及在所述HBase數(shù)據(jù)庫(kù)內(nèi)未存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,根據(jù)所述HBase數(shù)據(jù)庫(kù)已存儲(chǔ)的行鍵值存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di鍵值對(duì)。
進(jìn)一步地,在所述HBase數(shù)據(jù)庫(kù)內(nèi)未存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,根據(jù)所述HBase數(shù)據(jù)庫(kù)已存儲(chǔ)的行鍵值存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di鍵值對(duì)包括:依次比較所述切分?jǐn)?shù)據(jù)Di的行鍵值與已存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù)中的行鍵值的大??;將所述切分?jǐn)?shù)據(jù)Di的行鍵值插入至所述HBase數(shù)據(jù)庫(kù)中的目標(biāo)行,其中,所述目標(biāo)行為第一行鍵值所在行的下一行或第二行鍵值所在行的上一行,所述第一行鍵值和第二行鍵值均為所述HBase數(shù)據(jù)庫(kù)中已存儲(chǔ)的行鍵值,所述第一行鍵值為小于所述切分?jǐn)?shù)據(jù)Di的行鍵值,并且與所述切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值,所述第二行鍵值為大于所述切分?jǐn)?shù)據(jù)Di的行鍵值,并且與所述切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值;將所述切分?jǐn)?shù)據(jù)Di存儲(chǔ)至與所述目標(biāo)行對(duì)應(yīng)的第二目標(biāo)列,其中,所述第二目標(biāo)列為所述目標(biāo)行 的所屬列族中的任意一列;以及更新已存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù)中的行鍵值。
進(jìn)一步地,所述方法還包括:通過(guò)所述HBase數(shù)據(jù)庫(kù)中的查詢(xún)接口接收來(lái)自用戶(hù)的查詢(xún)指令,其中,所述查詢(xún)指令為查詢(xún)已存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù)中任意兩個(gè)行鍵值之間的行鍵值所對(duì)應(yīng)的切分?jǐn)?shù)據(jù)的指令;以及以添加預(yù)設(shè)標(biāo)識(shí)的方式在所述HBase數(shù)據(jù)庫(kù)中顯示查詢(xún)到的行鍵值所對(duì)應(yīng)的切分?jǐn)?shù)據(jù)。
根據(jù)本申請(qǐng)實(shí)施例的另一方面,還提供了一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序裝置,該裝置包括:切分單元,用于將待排序數(shù)據(jù)切分至所述HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn)中,其中,每個(gè)所述集群節(jié)點(diǎn)在得到切分?jǐn)?shù)據(jù)后,均執(zhí)行所述HBase數(shù)據(jù)庫(kù)的行鍵值排序方式;讀取單元,用于讀取每個(gè)所述集群節(jié)點(diǎn)的排序結(jié)果,得到多個(gè)所述排序結(jié)果,其中,每個(gè)所述集群節(jié)點(diǎn)執(zhí)行所述行鍵值排序方式對(duì)切分?jǐn)?shù)據(jù)進(jìn)行排序后,均得到一個(gè)所述排序結(jié)果;以及確定單元,用于確定多個(gè)所述排序結(jié)果的集合為所述待排序數(shù)據(jù)的排序結(jié)果。
進(jìn)一步地,所述讀取單元包括:排序子單元,用于集群節(jié)點(diǎn)Ai執(zhí)行所述行鍵值排序方式對(duì)切分至所述集群節(jié)點(diǎn)Ai的切分?jǐn)?shù)據(jù)Di進(jìn)行排序,得到排序結(jié)果Ri,其中,i依次取1至n,n為所述HBase數(shù)據(jù)庫(kù)中集群節(jié)點(diǎn)的數(shù)量,集群節(jié)點(diǎn)A1至集群節(jié)點(diǎn)An構(gòu)成所述HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn),切分?jǐn)?shù)據(jù)D1至切分?jǐn)?shù)據(jù)Dn構(gòu)成所述待排序數(shù)據(jù),所述確定單元包括:存儲(chǔ)子單元,用于所述集群節(jié)點(diǎn)Ai將所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù),得到所述待排序數(shù)據(jù)的排序結(jié)果,其中,所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)為所述切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí)和所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量組成的鍵值對(duì)。
進(jìn)一步地,所述存儲(chǔ)子單元包括:查詢(xún)模塊,用于查詢(xún)所述HBase數(shù)據(jù)庫(kù)是否已存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di的行鍵值,其中,所述切分?jǐn)?shù)據(jù)Di的行鍵值為所述切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量的負(fù)數(shù);第一存儲(chǔ)模塊,用于在所述HBase數(shù)據(jù)庫(kù)內(nèi)已存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,將所述切分?jǐn)?shù)據(jù)Di存儲(chǔ)至第一目標(biāo)列,其中,所述第一目標(biāo)列為所述切分?jǐn)?shù)據(jù)Di的行鍵值所在行的所屬列族中對(duì)的任意一列;以及第二存儲(chǔ)模塊,用于在所述HBase數(shù)據(jù)庫(kù)內(nèi)未存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,根據(jù)所述HBase數(shù)據(jù)庫(kù)已存儲(chǔ)的行鍵值存儲(chǔ)所述切分?jǐn)?shù)據(jù)Di鍵值對(duì)。
進(jìn)一步地,所述第二存儲(chǔ)模塊包括:比較子模塊,用于依次比較所述切分?jǐn)?shù)據(jù)Di的行鍵值與已存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù)中的行鍵值的大?。徊迦胱幽K,用于將所述切分?jǐn)?shù)據(jù)Di的行鍵值插入至所述HBase數(shù)據(jù)庫(kù)中的目標(biāo)行,其中,所述目標(biāo)行為第一行鍵值所在行的下一行或第二行鍵值所在行的上一行,所述第一行鍵值和第二行鍵值均為所述HBase數(shù)據(jù)庫(kù)中已存儲(chǔ)的行鍵值,所述第一行鍵值為大于所述切分?jǐn)?shù)據(jù)Di 的行鍵值,并且與所述切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值,所述第二行鍵值為小于所述切分?jǐn)?shù)據(jù)Di的行鍵值,并且與所述切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值;存儲(chǔ)子模塊,用于將所述切分?jǐn)?shù)據(jù)Di存儲(chǔ)至與所述目標(biāo)行對(duì)應(yīng)的第二目標(biāo)列,其中,所述第二目標(biāo)列為所述目標(biāo)行的所屬列族中的任意一列;以及更新子模塊,用于更新已存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù)中的行鍵值。
進(jìn)一步地,所述裝置還包括:接收單元,用于通過(guò)所述HBase數(shù)據(jù)庫(kù)中的查詢(xún)接口接收來(lái)自用戶(hù)的查詢(xún)指令,其中,所述查詢(xún)指令為查詢(xún)已存儲(chǔ)至所述HBase數(shù)據(jù)庫(kù)中任意兩個(gè)行鍵值之間的行鍵值所對(duì)應(yīng)的切分?jǐn)?shù)據(jù)的指令;以及顯示單元,用于以添加預(yù)設(shè)標(biāo)識(shí)的方式在所述HBase數(shù)據(jù)庫(kù)中顯示查詢(xún)到的行鍵值所對(duì)應(yīng)的切分?jǐn)?shù)據(jù)。
在本申請(qǐng)實(shí)施例中,采用將待排序數(shù)據(jù)切分至所述HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn)中,其中,每個(gè)所述集群節(jié)點(diǎn)在得到切分?jǐn)?shù)據(jù)后,均執(zhí)行所述HBase數(shù)據(jù)庫(kù)的行鍵值排序方式;讀取每個(gè)所述集群節(jié)點(diǎn)的排序結(jié)果,得到多個(gè)所述排序結(jié)果,其中,每個(gè)所述集群節(jié)點(diǎn)執(zhí)行所述行鍵值排序方式對(duì)切分?jǐn)?shù)據(jù)進(jìn)行排序后,均得到一個(gè)所述排序結(jié)果;以及確定多個(gè)所述排序結(jié)果的集合為所述待排序數(shù)據(jù)的排序結(jié)果的方式,通過(guò)將待排序數(shù)據(jù)切分至HBase數(shù)據(jù)庫(kù)所在的多個(gè)集群節(jié)點(diǎn)中,由于HBase數(shù)據(jù)庫(kù)具有能夠自動(dòng)排序的行鍵值排序方式,因此待排序數(shù)據(jù)切分至多個(gè)集群節(jié)點(diǎn)之后,可實(shí)現(xiàn)自動(dòng)的排序;然后讀取多個(gè)集群節(jié)點(diǎn)中的排序結(jié)果,將每個(gè)集群節(jié)點(diǎn)中已排序完成的切分?jǐn)?shù)據(jù)按照行鍵值排序方式再進(jìn)行整體排序,得到多個(gè)排序結(jié)果,其中,多個(gè)排序結(jié)果的集合即為待排序數(shù)據(jù)的排序結(jié)果,本申請(qǐng)采用HBase數(shù)據(jù)庫(kù)行鍵值的排序方式省略了現(xiàn)有技術(shù)中需要將各個(gè)集群節(jié)點(diǎn)中的待排序數(shù)據(jù)合并之后才能對(duì)待排序數(shù)據(jù)進(jìn)行排序的環(huán)節(jié),達(dá)到了縮短數(shù)據(jù)排序時(shí)間的目的,從而實(shí)現(xiàn)了不需要對(duì)各數(shù)據(jù)庫(kù)中的待排序數(shù)據(jù)進(jìn)行合并就能實(shí)現(xiàn)數(shù)據(jù)排序的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中數(shù)據(jù)排序效率低的技術(shù)問(wèn)題,提高了數(shù)據(jù)排序的性能。
附圖說(shuō)明
此處所說(shuō)明的附圖用來(lái)提供對(duì)本申請(qǐng)的進(jìn)一步理解,構(gòu)成本申請(qǐng)的一部分,本申請(qǐng)的示意性實(shí)施例及其說(shuō)明用于解釋本申請(qǐng),并不構(gòu)成對(duì)本申請(qǐng)的不當(dāng)限定。在附圖中:
圖1是根據(jù)本申請(qǐng)實(shí)施例的一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序方法的流程圖;以及
圖2是根據(jù)本申請(qǐng)實(shí)施例的一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序裝置的示意圖。
具體實(shí)施方式
為了使本技術(shù)領(lǐng)域的人員更好地理解本申請(qǐng)方案,下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分的實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都應(yīng)當(dāng)屬于本申請(qǐng)保護(hù)的范圍。
需要說(shuō)明的是,本申請(qǐng)的說(shuō)明書(shū)和權(quán)利要求書(shū)及上述附圖中的術(shù)語(yǔ)“第一”、“第二”等是用于區(qū)別類(lèi)似的對(duì)象,而不必用于描述特定的順序或先后次序。應(yīng)該理解這樣使用的數(shù)據(jù)在適當(dāng)情況下可以互換,以便這里描述的本申請(qǐng)的實(shí)施例能夠以除了在這里圖示或描述的那些以外的順序?qū)嵤4送?,術(shù)語(yǔ)“包括”和“具有”以及他們的任何變形,意圖在于覆蓋不排他的包含,例如,包含了一系列步驟或單元的過(guò)程、方法、系統(tǒng)、產(chǎn)品或設(shè)備不必限于清楚地列出的那些步驟或單元,而是可包括沒(méi)有清楚地列出的或?qū)τ谶@些過(guò)程、方法、產(chǎn)品或設(shè)備固有的其它步驟或單元。
首先,對(duì)本實(shí)施例涉及的技術(shù)術(shù)語(yǔ)作如下解釋?zhuān)?/p>
HBase是一個(gè)分布式的、面向列的開(kāi)源數(shù)據(jù)庫(kù),一個(gè)結(jié)構(gòu)化數(shù)據(jù)的分布式存儲(chǔ)系統(tǒng)。HBase不同于一般的關(guān)系數(shù)據(jù)庫(kù),它是一個(gè)適合于非結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)的數(shù)據(jù)庫(kù)。另一個(gè)不同的是HBase基于列的而不是基于行的模式。
rowkey是HBase的數(shù)據(jù)唯一標(biāo)識(shí)。HBase保存數(shù)據(jù)依照rowkey排序,HBase查詢(xún)數(shù)據(jù)也是基于rowkey,或者直接獲取指定單一rowkey的整條數(shù)據(jù),或者掃描開(kāi)始rowkey到結(jié)束rowkey的整個(gè)數(shù)據(jù)區(qū)間。
family是HBase在物理上分隔數(shù)據(jù)的標(biāo)志,需要在建表的時(shí)候預(yù)定義,大部分時(shí)候只使用單一的family,即對(duì)于同一行數(shù)據(jù)在物理上并不進(jìn)行隔離,方便查詢(xún)。
column是HBase的列名,HBase是非結(jié)構(gòu)化數(shù)據(jù)庫(kù),也就是在創(chuàng)建HBase表時(shí)不需要預(yù)先定義column,可以隨時(shí)使用隨時(shí)添加。
value是HBase最終保存的數(shù)據(jù)值,通過(guò)rowkey+family+column的可以找到保存的值。
根據(jù)本申請(qǐng)實(shí)施例,提供了一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序方法的方法實(shí)施例,需要說(shuō)明的是,在附圖的流程圖示出的步驟可以在諸如一組計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)系統(tǒng)中執(zhí)行,并且,雖然在流程圖中示出了邏輯順序,但是在某些情況下,可以以不同于此處的順序執(zhí)行所示出或描述的步驟。
圖1是根據(jù)本申請(qǐng)實(shí)施例的一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序方法的流程圖,如圖1所示,該方法包括如下步驟S102至步驟S106:
步驟S102,將待排序數(shù)據(jù)切分至HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn)中,其中,每個(gè)集群節(jié)點(diǎn)在得到切分?jǐn)?shù)據(jù)后,均執(zhí)行HBase數(shù)據(jù)庫(kù)的行鍵值排序方式。
具體地,待排序數(shù)據(jù)可以為某網(wǎng)站在某一時(shí)段的訪問(wèn)量,例如www.baidu.com的訪問(wèn)量,www.google.comde的訪問(wèn)量等,還可以為某關(guān)鍵詞在某一時(shí)段的搜索量,例如“抗戰(zhàn)閱兵直播”在2015年9月3號(hào)的搜索量,“北京限行”在2015年9月3號(hào)的搜索量。需要說(shuō)明的是,待排序數(shù)據(jù)不僅僅為上述的網(wǎng)站訪問(wèn)量和關(guān)鍵詞的搜索量,還包括任意需要排序的數(shù)據(jù)。
由于HBase數(shù)據(jù)庫(kù)所具有的行鍵值(rowkey)排序方式,當(dāng)切分待排序數(shù)據(jù)至HBase數(shù)據(jù)庫(kù)中的多個(gè)集群節(jié)點(diǎn)時(shí),切分到每個(gè)集群節(jié)點(diǎn)中的切分?jǐn)?shù)據(jù)均按照該行鍵值排序方式進(jìn)行排序。
步驟S104,讀取每個(gè)集群節(jié)點(diǎn)的排序結(jié)果,得到多個(gè)排序結(jié)果,其中,每個(gè)集群節(jié)點(diǎn)執(zhí)行行鍵值排序方式對(duì)切分?jǐn)?shù)據(jù)進(jìn)行排序后,均得到一個(gè)排序結(jié)果。
具體地,每個(gè)集群節(jié)點(diǎn)中的切分?jǐn)?shù)據(jù)按照行鍵值的排序方式進(jìn)行排序之后,均得到一個(gè)排序結(jié)果,依次讀取每一個(gè)集群節(jié)點(diǎn)中的排序結(jié)果,到多個(gè)排序結(jié)果。需要說(shuō)明的是,多個(gè)排序結(jié)果存儲(chǔ)于HBase數(shù)據(jù)庫(kù)中的多個(gè)集群節(jié)點(diǎn)中,例如,當(dāng)切分?jǐn)?shù)據(jù)為某網(wǎng)站的訪問(wèn)量時(shí),集群節(jié)點(diǎn)a中可以為訪問(wèn)量為10000至訪問(wèn)量為1000的網(wǎng)頁(yè)的排序結(jié)果,集群節(jié)點(diǎn)b中可以為訪問(wèn)量為999至訪問(wèn)量為100的網(wǎng)頁(yè)的排序結(jié)果,集群節(jié)點(diǎn)c中可以為訪問(wèn)量為99至訪問(wèn)量為0的網(wǎng)頁(yè)的排序結(jié)果。其中,對(duì)切分?jǐn)?shù)據(jù)進(jìn)行整體排序之后,得到的多個(gè)排序結(jié)果的數(shù)量可根據(jù)用戶(hù)的實(shí)際需要來(lái)進(jìn)行選取。
步驟S106,確定多個(gè)排序結(jié)果的集合為待排序數(shù)據(jù)的排序結(jié)果。分布于多個(gè)集群節(jié)點(diǎn)中的多個(gè)排序結(jié)果的集合組成待排序數(shù)據(jù)的排序結(jié)果。
在本申請(qǐng)實(shí)施例中,通過(guò)將待排序數(shù)據(jù)切分至HBase數(shù)據(jù)庫(kù)所在的多個(gè)集群節(jié)點(diǎn)中,由于HBase數(shù)據(jù)庫(kù)具有能夠自動(dòng)排序的行鍵值排序方式,因此待排序數(shù)據(jù)切分至多個(gè)集群節(jié)點(diǎn)之后,可實(shí)現(xiàn)自動(dòng)的排序;然后讀取多個(gè)集群節(jié)點(diǎn)中的排序結(jié)果,將每個(gè)集群節(jié)點(diǎn)中已排序完成的切分?jǐn)?shù)據(jù)按照行鍵值排序方式再進(jìn)行整體排序,得到多個(gè)排序結(jié)果,其中,多個(gè)排序結(jié)果的集合即為待排序數(shù)據(jù)的排序結(jié)果,本申請(qǐng)采用HBase數(shù)據(jù)庫(kù)行鍵值的排序方式省略了現(xiàn)有技術(shù)中需要將各個(gè)集群節(jié)點(diǎn)中的待排序數(shù)據(jù)合并之后才能對(duì)待排序數(shù)據(jù)進(jìn)行排序的環(huán)節(jié),達(dá)到了縮短數(shù)據(jù)排序時(shí)間的目的,從而實(shí)現(xiàn)了不需要對(duì)各數(shù)據(jù)庫(kù)中的待排序數(shù)據(jù)進(jìn)行合并就能實(shí)現(xiàn)數(shù)據(jù)排序的技術(shù)效果,進(jìn)而解 決了現(xiàn)有技術(shù)中數(shù)據(jù)排序效率低的技術(shù)問(wèn)題,提高了數(shù)據(jù)排序的性能。
可選地,每個(gè)集群節(jié)點(diǎn)執(zhí)行行鍵值排序方式對(duì)切分?jǐn)?shù)據(jù)進(jìn)行排序后,均得到一個(gè)排序結(jié)果包括如下步驟S1041:
步驟S1041,集群節(jié)點(diǎn)Ai執(zhí)行行鍵值排序方式對(duì)切分至集群節(jié)點(diǎn)Ai的切分?jǐn)?shù)據(jù)Di進(jìn)行排序,得到排序結(jié)果Ri,其中,i依次取1至n,n為HBase數(shù)據(jù)庫(kù)中集群節(jié)點(diǎn)的數(shù)量,集群節(jié)點(diǎn)A1至集群節(jié)點(diǎn)An構(gòu)成HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn),切分?jǐn)?shù)據(jù)D1至切分?jǐn)?shù)據(jù)Dn構(gòu)成待排序數(shù)據(jù)。
具體地,當(dāng)切分待排序數(shù)據(jù)到HBase數(shù)據(jù)庫(kù)中集群節(jié)點(diǎn)A1至集群節(jié)點(diǎn)An時(shí),切分?jǐn)?shù)據(jù)Di以數(shù)據(jù)鍵值對(duì)的形式無(wú)序的存儲(chǔ)于各個(gè)集群節(jié)點(diǎn)中。然后將切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì),按照行鍵值排序方式進(jìn)行排序,每一個(gè)集群節(jié)點(diǎn)按照行鍵值排序方式之后,均得到一個(gè)排序結(jié)果Ri。假設(shè),切分?jǐn)?shù)據(jù)Di可以為某一時(shí)段內(nèi)多個(gè)網(wǎng)站的訪問(wèn)量,若域名為www.baidu.com的網(wǎng)站的訪問(wèn)量為10000,則該網(wǎng)站的域名www.baidu.com和訪問(wèn)量10000組成數(shù)據(jù)鍵值對(duì),該數(shù)據(jù)鍵值對(duì)表示為(www.baidu.com 10000);同樣地,若域名為www.google.com的網(wǎng)站的訪問(wèn)量為1000,則該網(wǎng)站的域名www.google.com和訪問(wèn)量1000組成數(shù)據(jù)鍵值對(duì),表示為(www.google.com 1000)。
需要說(shuō)明的是,在上述待排序數(shù)據(jù)切分的過(guò)程中,用戶(hù)可根據(jù)各個(gè)集群節(jié)點(diǎn)的剩余存儲(chǔ)空間來(lái)決定切分到各個(gè)集群節(jié)點(diǎn)中的切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)量。
確定多個(gè)排序結(jié)果的集合為待排序數(shù)據(jù)的排序結(jié)果包括步驟S1061,集群節(jié)點(diǎn)Ai將切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至HBase數(shù)據(jù)庫(kù),得到待排序數(shù)據(jù)的排序結(jié)果,其中,切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)為切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí)和切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量組成的鍵值對(duì)。
具體地,分別讀取排序結(jié)果Ri中的切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì),并按照固定的格式將切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中。需要說(shuō)明的是,在上述步驟中舉例說(shuō)明了當(dāng)切分?jǐn)?shù)據(jù)Di為網(wǎng)站在某一時(shí)段的訪問(wèn)量時(shí),數(shù)據(jù)鍵值對(duì)可以為該網(wǎng)站的域名(即切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí))和該網(wǎng)站在某一時(shí)段的訪問(wèn)量(即切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量)組成。同樣地,若切分?jǐn)?shù)據(jù)為某一關(guān)鍵詞的搜索量時(shí),則該數(shù)據(jù)鍵值對(duì)還可以為關(guān)鍵詞(即切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí))和該關(guān)鍵詞在某一時(shí)段的搜索量即切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量)組成。綜上描述,切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)由切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí)和該切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量組成。
當(dāng)切分?jǐn)?shù)據(jù)Di為某網(wǎng)站在某一時(shí)段內(nèi)的訪問(wèn)量時(shí),對(duì)集群節(jié)點(diǎn)Ai中的切分?jǐn)?shù)據(jù)Di進(jìn)行整體排序時(shí),需將經(jīng)過(guò)整體排序之后的切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)有序的存儲(chǔ) 至HBase數(shù)據(jù)庫(kù)中的多個(gè)集群節(jié)點(diǎn)中,多個(gè)集群節(jié)點(diǎn)組成的排序結(jié)果即為待排序數(shù)據(jù)的排序結(jié)果。其中,假設(shè)有4個(gè)集群節(jié)點(diǎn),集群節(jié)點(diǎn)1中可以存儲(chǔ)訪問(wèn)量為100000~10000的切分?jǐn)?shù)據(jù),集群節(jié)點(diǎn)2中可以存儲(chǔ)訪問(wèn)量為9999~1000的切分?jǐn)?shù)據(jù),集群節(jié)點(diǎn)3可以存儲(chǔ)訪問(wèn)量為999~100的切分?jǐn)?shù)據(jù),集群節(jié)點(diǎn)4可存儲(chǔ)訪問(wèn)量為99~0的切分?jǐn)?shù)據(jù)。集群節(jié)點(diǎn)1至集群節(jié)點(diǎn)4均為HBase數(shù)據(jù)庫(kù)中的集群節(jié)點(diǎn),其中,集群節(jié)點(diǎn)的數(shù)量可根據(jù)用戶(hù)實(shí)際需要來(lái)選取。
可選地,步驟S1061中集群節(jié)點(diǎn)Ai將切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至HBase數(shù)據(jù)庫(kù)包括如下步驟S1至步驟S5:
步驟S1,查詢(xún)HBase數(shù)據(jù)庫(kù)是否已存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值,其中,切分?jǐn)?shù)據(jù)Di的行鍵值為切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量的負(fù)數(shù)。
步驟S3,在HBase數(shù)據(jù)庫(kù)內(nèi)已存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,將切分?jǐn)?shù)據(jù)Di存儲(chǔ)至第一目標(biāo)列,其中,第一目標(biāo)列為切分?jǐn)?shù)據(jù)Di的行鍵值所在行的所屬列族中對(duì)的任意一列。
步驟S5,在HBase數(shù)據(jù)庫(kù)內(nèi)未存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,根據(jù)HBase數(shù)據(jù)庫(kù)已存儲(chǔ)的行鍵值存儲(chǔ)切分?jǐn)?shù)據(jù)Di鍵值對(duì)。
具體地,在本申請(qǐng)實(shí)施例,采用行鍵值排序方式對(duì)集群節(jié)點(diǎn)Ai中的切分?jǐn)?shù)據(jù)Di進(jìn)行排序,因此,在將集群節(jié)點(diǎn)Ai中的切分?jǐn)?shù)據(jù)Di進(jìn)行整體排序時(shí),先獲取切分?jǐn)?shù)據(jù)Di的行鍵值rowkey,并在HBase數(shù)據(jù)庫(kù)中查詢(xún)是否已存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值rowkey,其中,行鍵值rowkey為該切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)中數(shù)據(jù)總量的負(fù)數(shù)。
假設(shè),切分?jǐn)?shù)據(jù)Di中某一切分?jǐn)?shù)據(jù)的數(shù)據(jù)鍵值對(duì)為(www.baidu.com 10000),則該切分?jǐn)?shù)據(jù)的行鍵值即為-10000。若在HBase數(shù)據(jù)庫(kù)中查詢(xún)到該行鍵值-10000,則將數(shù)據(jù)鍵值對(duì)(www.baidu.com 10000)中的域名“www.baidu.com”存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中即可,具體存儲(chǔ)的位置為行鍵值-10000所在行的所屬列族中的任意一族。若在HBase數(shù)據(jù)庫(kù)中未查詢(xún)到該行鍵值-10000,則通過(guò)比較該行鍵值-10000與已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中的行鍵值的大小來(lái)將該行鍵值-10000插入至HBase數(shù)據(jù)庫(kù)中的指定集群節(jié)點(diǎn)中。
對(duì)于已存儲(chǔ)至數(shù)據(jù)庫(kù)中的切分?jǐn)?shù)據(jù)Di存儲(chǔ)形式為rowkey:-10000,family:f column:www.baidu.com value:1,其中,family是HBase在物理上分隔數(shù)據(jù)的標(biāo)志,value是HBase的列名,當(dāng)rowkey:-10000存儲(chǔ)至某一行時(shí),family:f,column:www.baidu.com和value:1均存儲(chǔ)至行鍵值-10000所在行的所屬列族中的任意一族,并且family:f,column:www.baidu.com和value:1存儲(chǔ)于同一列中。
進(jìn)一步地,步驟S5中,在HBase數(shù)據(jù)庫(kù)內(nèi)未存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,根據(jù)HBase數(shù)據(jù)庫(kù)已存儲(chǔ)的行鍵值存儲(chǔ)切分?jǐn)?shù)據(jù)Di鍵值對(duì)包括如下步驟S51至步驟S57:
步驟S51,依次比較切分?jǐn)?shù)據(jù)Di的行鍵值與已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中的行鍵值的大小。
步驟S53,將切分?jǐn)?shù)據(jù)Di的行鍵值插入至HBase數(shù)據(jù)庫(kù)中的目標(biāo)行,其中,目標(biāo)行為第一行鍵值所在行的下一行或第二行鍵值所在行的上一行,第一行鍵值和第二行鍵值均為HBase數(shù)據(jù)庫(kù)中已存儲(chǔ)的行鍵值,第一行鍵值為小于切分?jǐn)?shù)據(jù)Di的行鍵值,并且與切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值,第二行鍵值為大于切分?jǐn)?shù)據(jù)Di的行鍵值,并且與切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值。
步驟S55,將切分?jǐn)?shù)據(jù)Di存儲(chǔ)至與目標(biāo)行對(duì)應(yīng)的第二目標(biāo)列,其中,第二目標(biāo)列為目標(biāo)行的所屬列族中的任意一列。
步驟S57,更新已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中的行鍵值。
其中,每次更新已存儲(chǔ)的行鍵值后,在下次根據(jù)HBase數(shù)據(jù)庫(kù)中已存儲(chǔ)的行鍵值存儲(chǔ)未存儲(chǔ)切分?jǐn)?shù)據(jù)Di鍵值對(duì)時(shí),會(huì)重新確認(rèn)相應(yīng)的第一行鍵值和第二行鍵值。對(duì)于一個(gè)切分?jǐn)?shù)據(jù)Di的鍵值對(duì),如果它的第一行鍵值和第二行鍵值都存在,那么第一行鍵值小于第二行鍵值。
具體地,若HBase數(shù)據(jù)庫(kù)中存儲(chǔ)的行鍵值為-100000,-50000和-40000,并未存儲(chǔ)數(shù)值為-10000的行鍵值,此時(shí)將數(shù)值為-10000的行鍵值分別與數(shù)值為-100000,-50000和-40000的行鍵值進(jìn)行比較。
當(dāng)切分?jǐn)?shù)據(jù)Di為網(wǎng)站的訪問(wèn)量或者為某關(guān)鍵詞的搜索量時(shí),用戶(hù)實(shí)際更希望查看訪問(wèn)量為前幾位的網(wǎng)站,或者查看搜索量為前幾位的關(guān)鍵詞,此時(shí),在HBase數(shù)據(jù)庫(kù)中以負(fù)數(shù)的形式來(lái)保存行鍵值,以便按照從小到大的順序排列行鍵值,即按照由大到小的順序排列訪問(wèn)量。
例如,將數(shù)值為-10000的行鍵值分別與數(shù)值為-100000,-50000和-40000的行鍵值進(jìn)行比較,通過(guò)比較可知,-100000,-50000和-40000均小于-10000,并且-40000與-10000的差值最小,因此將-10000插入至行鍵值-40000所在行的下一行中,其中,行鍵值-40000也即為第一行鍵值。在上述步驟S1061中的描述可知,若集群節(jié)點(diǎn)1中存儲(chǔ)訪問(wèn)量為100000~10000的切分?jǐn)?shù)據(jù),行鍵值-40000和-10000均應(yīng)該存儲(chǔ)在集群節(jié)點(diǎn)1中,因此,將數(shù)值為-10000的行鍵值插入至數(shù)值為-40000的行鍵值所在行的下一行中,并將數(shù)值為-10000的行鍵值的切分?jǐn)?shù)據(jù)Di存儲(chǔ)至數(shù)值為-10000的行鍵值所 在目標(biāo)行的所屬列族中的任意一列,其中,數(shù)值為-40000的行鍵值即為第一行鍵值。通過(guò)上述排序方法,即可完成對(duì)網(wǎng)站的訪問(wèn)量進(jìn)行由大到小的排序。
又例如,若HBase數(shù)據(jù)庫(kù)中存儲(chǔ)的行鍵值為-5000,-4000和-1000,并未存儲(chǔ)數(shù)值為-10000的行鍵值,通過(guò)比較可知,-5000,-4000和-1000均大于-10000,并且-10000與-5000的差值最小,因此將-10000應(yīng)插入至行鍵值-5000所在行的上一行(即,目標(biāo)行)中,其中,行鍵值-5000也即為第二行鍵值。但是,在上述步驟S1061中的描述可知,若集群節(jié)點(diǎn)2中存儲(chǔ)訪問(wèn)量為9999~1000的切分?jǐn)?shù)據(jù),此時(shí)將數(shù)值為-10000的行鍵值和數(shù)值為-5000的行鍵值并未存儲(chǔ)于同一集群節(jié)點(diǎn)中。因此,數(shù)值為-10000的行鍵值應(yīng)存儲(chǔ)于集群節(jié)點(diǎn)1中,由于數(shù)值為-10000的行鍵值為節(jié)點(diǎn)1中所有行鍵值中的最大行鍵值,因此將數(shù)值為-10000的行鍵值存儲(chǔ)至集群節(jié)點(diǎn)1中最后一行(即,目標(biāo)行)即可。
又例如,通過(guò)比較可知,HBase數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)值為-5000,-4000、-1000和-500的行鍵值,此時(shí),需要插入數(shù)值為-2000的行鍵值,通過(guò)將-2000分別與-5000,-4000和-1000進(jìn)行比較可知,-2000大于-4000和-5000,并且與-4000的差值最小,因此,將數(shù)值為-2000的行鍵值應(yīng)插入至數(shù)值為-4000的行鍵值所在行的下一行(即,目標(biāo)行)中;又或者,-2000小于-1000和-500,并且與-1000的差值最小,因此將數(shù)值為-2000的行鍵值插入至-1000所在行的上一行(即,目標(biāo)行)中,并將行鍵值為-2000的切分?jǐn)?shù)據(jù)Di存儲(chǔ)至數(shù)值為-2000的行鍵值所在目標(biāo)行的所屬列族中的任意一列,其中,數(shù)值為-4000的行鍵值即為第一行鍵值,數(shù)值為-1000的行鍵值即為第二行鍵值。
通過(guò)上述排序方法對(duì)集群節(jié)點(diǎn)Ai中的切分?jǐn)?shù)據(jù)Di進(jìn)行排序,不需要再將集群節(jié)點(diǎn)Ai中的每個(gè)集群節(jié)點(diǎn)中的切分?jǐn)?shù)據(jù)Di進(jìn)行整合,通過(guò)讀取切分?jǐn)?shù)據(jù)Di的行鍵值即可實(shí)現(xiàn)切分?jǐn)?shù)據(jù)Di的快速排序。例如,本申請(qǐng)實(shí)施例中,將www.baidu.com的域名作為列名保存到行鍵值為-10000的行中,若有其他網(wǎng)站的訪問(wèn)量同樣為10000,則可以將其保存到行鍵值為-10000的所在行的所屬列族中的任意一空閑列中,與www.baidu.com這一列不發(fā)生任何沖突。在本申請(qǐng)實(shí)施例中,將訪問(wèn)量的負(fù)數(shù)作為行鍵值保存至HBase數(shù)據(jù)庫(kù)是為了將訪問(wèn)量大的數(shù)據(jù)排在HBase中的前面,方便查詢(xún)。并且,本申請(qǐng)實(shí)施例提供的排序方法,對(duì)于數(shù)據(jù)量較大的待排序數(shù)據(jù),可實(shí)現(xiàn)快速對(duì)待排序數(shù)據(jù)進(jìn)行排序的效果。
可選地,本申請(qǐng)?zhí)峁┑呐判蚍椒ㄟ€包括如下步驟S7至步驟S9:
步驟S7,通過(guò)HBase數(shù)據(jù)庫(kù)中的查詢(xún)接口接收來(lái)自用戶(hù)的查詢(xún)指令,其中,查詢(xún)指令為查詢(xún)已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中任意兩個(gè)行鍵值之間的所對(duì)應(yīng)的切分?jǐn)?shù)據(jù)的指令。
步驟S9,以添加預(yù)設(shè)標(biāo)識(shí)的方式在HBase數(shù)據(jù)庫(kù)中顯示查詢(xún)到的切分?jǐn)?shù)據(jù)。
HBase作為數(shù)據(jù)庫(kù)提供了相當(dāng)方便的查詢(xún)接口,通過(guò)查詢(xún)接口可以查詢(xún)指定任意行鍵值區(qū)間內(nèi)的切分?jǐn)?shù)據(jù)。比如可以很快速的查詢(xún)到行鍵值為-1000到行鍵值為-900之間的網(wǎng)站域名有哪些,并且能夠以預(yù)設(shè)標(biāo)識(shí)的形式顯示出來(lái),預(yù)設(shè)標(biāo)識(shí)為添加背景色、字體的修改,以及懸浮氣泡等形式。
若在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)數(shù)值在-1000到-900之間的行鍵值,而存儲(chǔ)了數(shù)值為-1000的行鍵值和數(shù)值為-900的行鍵值時(shí),查詢(xún)行鍵值為-1000時(shí),網(wǎng)站的域名有哪些,并查詢(xún)行鍵值為-900時(shí),網(wǎng)站的域名有哪些。
又若在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)數(shù)值在-1000到-900之間的行鍵值,也未存儲(chǔ)數(shù)值為-1000的行鍵值和數(shù)值為-900的行鍵值時(shí),則可以彈出提示信息,以提示用戶(hù)“查詢(xún)的數(shù)據(jù)不存在”,還可以顯示空數(shù)據(jù),以表明在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)該行鍵值。
又若在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)數(shù)值為-1000行鍵值和數(shù)值為-900的行鍵值,而存儲(chǔ)了數(shù)值在-1000和-900之間的行鍵值時(shí),例如存儲(chǔ)的行鍵值為-950的行鍵值,則查詢(xún)行鍵值為-950時(shí),網(wǎng)站的域名有哪些。
本申請(qǐng)實(shí)施例還提供了一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序裝置,該數(shù)據(jù)排序裝置主要用于執(zhí)行本申請(qǐng)實(shí)施例上述內(nèi)容所提供的基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序方法,以下對(duì)本申請(qǐng)實(shí)施例所提供的基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序裝置做具體介紹。
圖2是根據(jù)本申請(qǐng)實(shí)施例的一種基于HBase數(shù)據(jù)庫(kù)的數(shù)據(jù)排序裝置的示意圖。如圖2所示,該數(shù)據(jù)排序裝置包括:切分單元10、讀取單元20和確定單元30,其中:
切分單元10,用于將待排序數(shù)據(jù)切分至HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn)中,其中,每個(gè)集群節(jié)點(diǎn)在得到切分?jǐn)?shù)據(jù)后,均執(zhí)行HBase數(shù)據(jù)庫(kù)的行鍵值排序方式。
具體地,待排序數(shù)據(jù)可以為某網(wǎng)站在某一時(shí)段的訪問(wèn)量,例如www.baidu.com的訪問(wèn)量,www.google.comde的訪問(wèn)量等,還可以為某關(guān)鍵詞在某一時(shí)段的搜索量,例如“抗戰(zhàn)閱兵直播”在2015年9月3號(hào)的搜索量,“北京限行”在2015年9月3號(hào)的搜索量。需要說(shuō)明的是,待排序數(shù)據(jù)不僅僅為上述的網(wǎng)站訪問(wèn)量和關(guān)鍵詞的搜索量,還包括任意需要排序的數(shù)據(jù)。
由于HBase數(shù)據(jù)庫(kù)所具有的行鍵值(rowkey)排序方式,當(dāng)切分待排序數(shù)據(jù)至HBase數(shù)據(jù)庫(kù)中的多個(gè)集群節(jié)點(diǎn)時(shí),切分到每個(gè)集群節(jié)點(diǎn)中的切分?jǐn)?shù)據(jù)均按照該行鍵值排序方式進(jìn)行排序。
讀取單元20,用于讀取每個(gè)集群節(jié)點(diǎn)的排序結(jié)果,得到多個(gè)排序結(jié)果,其中,每 個(gè)集群節(jié)點(diǎn)執(zhí)行行鍵值排序方式對(duì)切分?jǐn)?shù)據(jù)進(jìn)行排序后,均得到一個(gè)排序結(jié)果。
具體地,每個(gè)集群節(jié)點(diǎn)中的切分?jǐn)?shù)據(jù)按照行鍵值的排序方式進(jìn)行排序之后,均得到一個(gè)排序結(jié)果,依次讀取每一個(gè)集群節(jié)點(diǎn)中的排序結(jié)果,得到多個(gè)排序結(jié)果。需要說(shuō)明的是,多個(gè)排序結(jié)果存儲(chǔ)于HBase數(shù)據(jù)庫(kù)中的多個(gè)集群節(jié)點(diǎn)中,例如,當(dāng)切分?jǐn)?shù)據(jù)為某網(wǎng)站的訪問(wèn)量時(shí),集群節(jié)點(diǎn)a中可以為訪問(wèn)量為10000至為訪問(wèn)量1000的網(wǎng)頁(yè)的排序結(jié)果,集群節(jié)點(diǎn)b中可以為訪問(wèn)量為999至為訪問(wèn)量100的網(wǎng)頁(yè)的排序結(jié)果,集群節(jié)點(diǎn)c中可以為訪問(wèn)量為99至訪問(wèn)量為0的網(wǎng)頁(yè)的排序結(jié)果。其中,對(duì)切分?jǐn)?shù)據(jù)進(jìn)行整體排序之后,得到的多個(gè)排序結(jié)果的數(shù)量可根據(jù)用戶(hù)的實(shí)際需要來(lái)進(jìn)行選取。
確定單元30,用于確定多個(gè)排序結(jié)果的集合為待排序數(shù)據(jù)的排序結(jié)果。
在本申請(qǐng)實(shí)施例中,通過(guò)將待排序數(shù)據(jù)切分至HBase數(shù)據(jù)庫(kù)所在的多個(gè)集群節(jié)點(diǎn)中,由于HBase數(shù)據(jù)庫(kù)具有能夠自動(dòng)排序的行鍵值排序方式,因此待排序數(shù)據(jù)切分至多個(gè)集群節(jié)點(diǎn)之后,可實(shí)現(xiàn)自動(dòng)的排序;然后讀取多個(gè)集群節(jié)點(diǎn)中的排序結(jié)果,將每個(gè)集群節(jié)點(diǎn)中已排序完成的切分?jǐn)?shù)據(jù)按照行鍵值排序方式再進(jìn)行整體排序,得到多個(gè)排序結(jié)果,其中,多個(gè)排序結(jié)果的集合即為待排序數(shù)據(jù)的排序結(jié)果,本申請(qǐng)采用HBase數(shù)據(jù)庫(kù)行鍵值的排序方式省略了現(xiàn)有技術(shù)中需要將各個(gè)集群節(jié)點(diǎn)中的待排序數(shù)據(jù)合并之后才能對(duì)待排序數(shù)據(jù)進(jìn)行排序的環(huán)節(jié),達(dá)到了縮短數(shù)據(jù)排序時(shí)間的目的,從而實(shí)現(xiàn)了不需要對(duì)各數(shù)據(jù)庫(kù)中的待排序數(shù)據(jù)進(jìn)行合并就能實(shí)現(xiàn)數(shù)據(jù)排序的技術(shù)效果,進(jìn)而解決了現(xiàn)有技術(shù)中數(shù)據(jù)排序效率低的技術(shù)問(wèn)題,提高了數(shù)據(jù)排序的性能。
可選地,讀取單元20包括排序子單元,其中:
排序子單元,用于集群節(jié)點(diǎn)Ai執(zhí)行行鍵值排序方式對(duì)切分至集群節(jié)點(diǎn)Ai的切分?jǐn)?shù)據(jù)Di進(jìn)行排序,得到排序結(jié)果Ri,其中,i依次取1至n,n為HBase數(shù)據(jù)庫(kù)中集群節(jié)點(diǎn)的數(shù)量,集群節(jié)點(diǎn)A1至集群節(jié)點(diǎn)An構(gòu)成HBase數(shù)據(jù)庫(kù)的多個(gè)集群節(jié)點(diǎn),切分?jǐn)?shù)據(jù)D1至切分?jǐn)?shù)據(jù)Dn構(gòu)成待排序數(shù)據(jù)。
確定單元30包括存儲(chǔ)子單元,其中,存儲(chǔ)子單元用于集群節(jié)點(diǎn)Ai將切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至HBase數(shù)據(jù)庫(kù),得到待排序數(shù)據(jù)的排序結(jié)果,其中,切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)為切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí)和切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量組成的鍵值對(duì)。
具體地,當(dāng)切分待排序數(shù)據(jù)到HBase數(shù)據(jù)庫(kù)中集群節(jié)點(diǎn)A1至集群節(jié)點(diǎn)An時(shí),切分?jǐn)?shù)據(jù)Di以數(shù)據(jù)鍵值對(duì)的形式無(wú)序的存儲(chǔ)于各個(gè)集群節(jié)點(diǎn)中。然后將切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì),按照行鍵值排序方式進(jìn)行排序,每一個(gè)集群節(jié)點(diǎn)按照行鍵值排序方式之后,均得到一個(gè)排序結(jié)果Ri。假設(shè),切分?jǐn)?shù)據(jù)Di可以為某一時(shí)段內(nèi)多個(gè)網(wǎng)站的訪問(wèn)量,若域名為www.baidu.com的網(wǎng)站的訪問(wèn)量為10000,則該網(wǎng)站的域名www.baidu.com 和訪問(wèn)量10000組成數(shù)據(jù)鍵值對(duì),該數(shù)據(jù)鍵值對(duì)表示為(www.baidu.com 10000);同樣地,若域名為www.google.com的網(wǎng)站的訪問(wèn)量為1000,則該網(wǎng)站的域名www.google.com和訪問(wèn)量1000組成數(shù)據(jù)鍵值對(duì),表示為(www.google.com 1000)。
需要說(shuō)明的是,在上述待排序數(shù)據(jù)切分的過(guò)程中,用戶(hù)可根據(jù)各個(gè)集群節(jié)點(diǎn)的剩余存儲(chǔ)空間來(lái)決定切分到各個(gè)集群節(jié)點(diǎn)中的切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)量。
分別讀取排序結(jié)果Ri中的切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì),并按照固定的格式將切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中。需要說(shuō)明的是,在上述描述中舉例說(shuō)明了當(dāng)切分?jǐn)?shù)據(jù)Di為網(wǎng)站在某一時(shí)段的訪問(wèn)量時(shí),數(shù)據(jù)鍵值對(duì)可以為該網(wǎng)站的域名(即切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí))和該網(wǎng)站在某一時(shí)段的訪問(wèn)量(即切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量)組成。同樣地,若切分?jǐn)?shù)據(jù)為某一關(guān)鍵詞的搜索量時(shí),則該數(shù)據(jù)鍵值對(duì)還可以為關(guān)鍵詞(即切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí))和該關(guān)鍵詞在某一時(shí)段的搜索量即切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量)組成。綜上描述,切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)由切分?jǐn)?shù)據(jù)Di的標(biāo)識(shí)和該切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量組成。
當(dāng)切分?jǐn)?shù)據(jù)Di為某網(wǎng)站在某一時(shí)段內(nèi)的訪問(wèn)量時(shí),對(duì)集群節(jié)點(diǎn)Ai中的切分?jǐn)?shù)據(jù)Di進(jìn)行整體排序時(shí),需將經(jīng)過(guò)整體排序之后的切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)有序的存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中的多個(gè)集群節(jié)點(diǎn)中,多個(gè)集群節(jié)點(diǎn)組成的排序結(jié)果即為待排序數(shù)據(jù)的排序結(jié)果。其中,假設(shè)有4個(gè)集群節(jié)點(diǎn),集群節(jié)點(diǎn)1中可以存儲(chǔ)訪問(wèn)量為100000~10000的切分?jǐn)?shù)據(jù),集群節(jié)點(diǎn)2中可以存儲(chǔ)訪問(wèn)量為9999~1000的切分?jǐn)?shù)據(jù),集群節(jié)點(diǎn)3可以存儲(chǔ)訪問(wèn)量為999~100的切分?jǐn)?shù)據(jù),集群節(jié)點(diǎn)4可存儲(chǔ)訪問(wèn)量為99~0的切分?jǐn)?shù)據(jù)。集群節(jié)點(diǎn)1至集群節(jié)點(diǎn)4均為HBase數(shù)據(jù)庫(kù)中的集群節(jié)點(diǎn),其中,集群節(jié)點(diǎn)的數(shù)量可根據(jù)用戶(hù)實(shí)際需要來(lái)選取。
可選地,存儲(chǔ)子單元包括查詢(xún)模塊、第一存儲(chǔ)模塊和第二存儲(chǔ)模塊,其中:
查詢(xún)模塊,用于查詢(xún)HBase數(shù)據(jù)庫(kù)是否已存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值,其中,行鍵值為切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)總量的負(fù)數(shù);第一存儲(chǔ)模塊,用于在HBase數(shù)據(jù)庫(kù)內(nèi)已存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,將切分?jǐn)?shù)據(jù)Di存儲(chǔ)至第一目標(biāo)列,其中,第一目標(biāo)列為切分?jǐn)?shù)據(jù)Di的行鍵值所在行的所屬列族中對(duì)的任意一列;第二存儲(chǔ)模塊,用于在HBase數(shù)據(jù)庫(kù)內(nèi)未存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值的情況下,根據(jù)HBase數(shù)據(jù)庫(kù)已存儲(chǔ)的行鍵值存儲(chǔ)切分?jǐn)?shù)據(jù)Di鍵值對(duì)。
具體地,在本申請(qǐng)實(shí)施例,采用行鍵值排序方式對(duì)集群節(jié)點(diǎn)Ai中的切分?jǐn)?shù)據(jù)Di進(jìn)行排序,因此,在將集群節(jié)點(diǎn)Ai中的切分?jǐn)?shù)據(jù)Di進(jìn)行整體排序時(shí),先獲取切分?jǐn)?shù)據(jù)Di的行鍵值rowkey,并在HBase數(shù)據(jù)庫(kù)中查詢(xún)是否已存儲(chǔ)切分?jǐn)?shù)據(jù)Di的行鍵值 rowkey,其中,行鍵值rowkey為該切分?jǐn)?shù)據(jù)Di的數(shù)據(jù)鍵值對(duì)中數(shù)據(jù)總量的負(fù)數(shù)。
假設(shè),切分?jǐn)?shù)據(jù)Di中某一切分?jǐn)?shù)據(jù)的數(shù)據(jù)鍵值對(duì)為(www.baidu.com 10000),則該切分?jǐn)?shù)據(jù)的行鍵值即為-10000。若在HBase數(shù)據(jù)庫(kù)中查詢(xún)到該行鍵值-10000,則將數(shù)據(jù)鍵值對(duì)(www.baidu.com 10000)中的域名“www.baidu.com”存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中即可,具體存儲(chǔ)的位置為行鍵值-10000所在行的所屬列族中的任意一族。若在HBase數(shù)據(jù)庫(kù)中未查詢(xún)到該行鍵值-10000,則通過(guò)比較該行鍵值-10000與已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中的行鍵值的大小來(lái)將該行鍵值-10000插入至HBase數(shù)據(jù)庫(kù)中的指定集群節(jié)點(diǎn)中。
對(duì)于已存儲(chǔ)至數(shù)據(jù)庫(kù)中的切分?jǐn)?shù)據(jù)Di存儲(chǔ)形式為rowkey:-10000,family:f column:www.baidu.com value:1,其中,family是HBase在物理上分隔數(shù)據(jù)的標(biāo)志,value是HBase的列名,當(dāng)rowkey:-10000存儲(chǔ)至某一行時(shí),family:f,column:www.baidu.com和value:1均存儲(chǔ)至行鍵值-10000所在行的所屬列族中的任意一族,并且family:f,column:www.baidu.com和value:1存儲(chǔ)于同一列中。
可選地,第二存儲(chǔ)模塊包括比較子模塊、插入子模塊、存儲(chǔ)子模塊和更新子模塊,其中:
比較子模塊,用于依次比較切分?jǐn)?shù)據(jù)Di的行鍵值與已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中的行鍵值的大??;插入子模塊,用于將切分?jǐn)?shù)據(jù)Di的行鍵值插入至HBase數(shù)據(jù)庫(kù)中的目標(biāo)行,其中,目標(biāo)行為第一行鍵值所在行的下一行或第二行鍵值所在行的上一行,第一行鍵值和第二行鍵值均為HBase數(shù)據(jù)庫(kù)中已存儲(chǔ)的行鍵值,第一行鍵值為大于切分?jǐn)?shù)據(jù)Di的行鍵值,并且與切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值,第二行鍵值為小于切分?jǐn)?shù)據(jù)Di的行鍵值,并且與切分?jǐn)?shù)據(jù)Di的行鍵值差值最小的行鍵值;存儲(chǔ)子模塊,用于將切分?jǐn)?shù)據(jù)Di存儲(chǔ)至與目標(biāo)行對(duì)應(yīng)的第二目標(biāo)列,其中,第二目標(biāo)列為目標(biāo)行的所屬列族中的任意一列;更新子模塊,用于更新已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中的行鍵值。
具體地,若HBase數(shù)據(jù)庫(kù)中存儲(chǔ)的行鍵值為-100000,-50000和-40000,并未存儲(chǔ)數(shù)值為-10000的行鍵值,此時(shí)將數(shù)值為-10000的行鍵值分別與數(shù)值為-100000,-50000和-40000的行鍵值進(jìn)行比較。
當(dāng)切分?jǐn)?shù)據(jù)Di為網(wǎng)站的訪問(wèn)量或者為某關(guān)鍵詞的搜索量時(shí),用戶(hù)實(shí)際更希望查看訪問(wèn)量為前幾位的網(wǎng)站,或者查看搜索量為前幾位的關(guān)鍵詞,此時(shí),在HBase數(shù)據(jù)庫(kù)中以負(fù)數(shù)的形式來(lái)保存行鍵值,以便按照從小到大的順序排列行鍵值,即按照由大到小的順序排列訪問(wèn)量。
例如,將數(shù)值為-10000的行鍵值分別與數(shù)值為-100000,-50000和-40000的行鍵 值進(jìn)行比較,通過(guò)比較可知,-100000,-50000和-40000均小于-10000,并且-40000與-10000的差值最小,因此將-10000插入至行鍵值-40000所在行的下一行中,其中,行鍵值-40000也即為第一行鍵值。上述描述可知,若集群節(jié)點(diǎn)1中存儲(chǔ)訪問(wèn)量為100000~10000的切分?jǐn)?shù)據(jù),行鍵值-40000和-10000均應(yīng)該存儲(chǔ)在集群節(jié)點(diǎn)1中,因此,將數(shù)值為-10000的行鍵值插入至數(shù)值為-40000的行鍵值所在行的下一行中,并將數(shù)值為-10000的行鍵值的切分?jǐn)?shù)據(jù)Di存儲(chǔ)至數(shù)值為-10000的行鍵值所在目標(biāo)行的所屬列族中的任意一列,其中,數(shù)值為-40000的行鍵值即為第一行鍵值。通過(guò)上述排序方法,即可完成對(duì)網(wǎng)站的訪問(wèn)量進(jìn)行由大到小的排序。
又例如,若HBase數(shù)據(jù)庫(kù)中存儲(chǔ)的行鍵值為-5000,-4000和-1000,并未存儲(chǔ)數(shù)值為-10000的行鍵值,通過(guò)比較可知,-5000,-4000和-1000均大于-10000,并且-10000與-5000的差值最小,因此將-10000應(yīng)插入至行鍵值-5000所在行的上一行中,其中,行鍵值-5000也即為第二行鍵值。但是,上述描述可知,若集群節(jié)點(diǎn)2中存儲(chǔ)訪問(wèn)量為9999~1000的切分?jǐn)?shù)據(jù),此時(shí)將數(shù)值為-10000的行鍵值和數(shù)值為-5000的行鍵值并未存儲(chǔ)于同一集群節(jié)點(diǎn)中。因此,數(shù)值為-10000的行鍵值應(yīng)存儲(chǔ)于集群節(jié)點(diǎn)1中,由于數(shù)值為-10000的行鍵值為節(jié)點(diǎn)1中所有行鍵值中的最大行鍵值,因此將數(shù)值為-10000的行鍵值存儲(chǔ)至集群節(jié)點(diǎn)1中最后一行即可。
又例如,通過(guò)比較可知,HBase數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)值為-5000,-4000、-1000和-500的行鍵值,此時(shí),需要插入數(shù)值為-2000的行鍵值,通過(guò)將-2000分別與-5000,-4000和-1000進(jìn)行比較可知,-2000大于-4000和-5000,并且與-4000的差值最小,因此,將數(shù)值為-2000的行鍵值應(yīng)插入至數(shù)值為-4000的行鍵值所在行的下一行中;又或者,-2000小于-1000和-500,并且與-1000的差值最小,因此將數(shù)值為-2000的行鍵值插入至-1000所在行的上一行中,并將行鍵值為-2000的切分?jǐn)?shù)據(jù)Di存儲(chǔ)至數(shù)值為-2000的行鍵值所在目標(biāo)行的所屬列族中的任意一列,其中,數(shù)值為-4000的行鍵值即為第一行鍵值,數(shù)值為-1000的行鍵值即為第二行鍵值。
可選地,本申請(qǐng)?zhí)峁┑幕贖Base數(shù)據(jù)庫(kù)的數(shù)據(jù)排序裝置還包括接收單元和顯示單元,其中:
接收單元,用于通過(guò)HBase數(shù)據(jù)庫(kù)中的查詢(xún)接口接收來(lái)自用戶(hù)的查詢(xún)指令,其中,查詢(xún)指令為查詢(xún)已存儲(chǔ)至HBase數(shù)據(jù)庫(kù)中任意兩個(gè)行鍵值之間的行鍵值所對(duì)應(yīng)的切分?jǐn)?shù)據(jù)的指令;顯示單元,用于以添加預(yù)設(shè)標(biāo)識(shí)的方式在HBase數(shù)據(jù)庫(kù)中顯示查詢(xún)到的行鍵值所對(duì)應(yīng)的切分?jǐn)?shù)據(jù)。
HBase作為數(shù)據(jù)庫(kù)提供了相當(dāng)方便的查詢(xún)接口,通過(guò)查詢(xún)接口可以查詢(xún)指定任意行鍵值區(qū)間內(nèi)的切分?jǐn)?shù)據(jù)。比如可以很快速的查詢(xún)到行鍵值為-1000到行鍵值為-900 之間的網(wǎng)站域名有哪些,并且能夠以預(yù)設(shè)標(biāo)識(shí)的形式顯示出來(lái),預(yù)設(shè)標(biāo)識(shí)為添加背景色、字體的修改,以及懸浮氣泡等形式。
若在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)數(shù)值在-1000到-900之間的行鍵值,而存儲(chǔ)了數(shù)值為-1000的行鍵值和數(shù)值為-900的行鍵值時(shí),查詢(xún)行鍵值為-1000時(shí),網(wǎng)站的域名有哪些,并查詢(xún)行鍵值為-900時(shí),網(wǎng)站的域名有哪些。
又若在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)數(shù)值在-1000到-900之間的行鍵值,也未存儲(chǔ)數(shù)值為-1000的行鍵值和數(shù)值為-900的行鍵值時(shí),則可以彈出提示信息,以提示用戶(hù)“查詢(xún)的數(shù)據(jù)不存在”,還可以顯示空數(shù)據(jù),以表明在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)該行鍵值。
又若在HBase數(shù)據(jù)庫(kù)中并未存儲(chǔ)數(shù)值為-1000行鍵值和數(shù)值為-900的行鍵值,而存儲(chǔ)了數(shù)值在-1000和-900之間的行鍵值時(shí),例如存儲(chǔ)的行鍵值為-950的行鍵值,則查詢(xún)行鍵值為-950時(shí),網(wǎng)站的域名有哪些。
上述本申請(qǐng)實(shí)施例序號(hào)僅僅為了描述,不代表實(shí)施例的優(yōu)劣。
在本申請(qǐng)的上述實(shí)施例中,對(duì)各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒(méi)有詳述的部分,可以參見(jiàn)其他實(shí)施例的相關(guān)描述。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的技術(shù)內(nèi)容,可通過(guò)其它的方式實(shí)現(xiàn)。其中,以上所描述的裝置實(shí)施例僅僅是示意性的,例如所述單元的劃分,可以為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些接口,單元或模塊的間接耦合或通信連接,可以是電性或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)單元上。可以根據(jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。
另外,在本申請(qǐng)各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以?xún)蓚€(gè)或兩個(gè)以上單元集成在一個(gè)單元中。上述集成的單元既可以采用硬件的形式實(shí)現(xiàn),也可以采用軟件功能單元的形式實(shí)現(xiàn)。
所述集成的單元如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷(xiāo)售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。基于這樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分或者該技術(shù)方案的全部或部分可以以軟件產(chǎn)品的 形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品存儲(chǔ)在一個(gè)存儲(chǔ)介質(zhì)中,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可為個(gè)人計(jì)算機(jī)、服務(wù)器或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、移動(dòng)硬盤(pán)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
以上所述僅是本申請(qǐng)的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來(lái)說(shuō),在不脫離本申請(qǐng)?jiān)淼那疤嵯?,還可以做出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本申請(qǐng)的保護(hù)范圍。