本發(fā)明涉及數(shù)據(jù)查詢技術(shù)領(lǐng)域,尤其涉及一種分區(qū)系統(tǒng)、分區(qū)方法及裝置。
背景技術(shù):
HBase是一種分布式數(shù)據(jù)庫(kù),數(shù)據(jù)庫(kù)中的每張表被劃分為多個(gè)區(qū),每個(gè)區(qū)可以設(shè)置大小,當(dāng)超過(guò)規(guī)定的大小時(shí),一個(gè)區(qū)會(huì)被分為兩個(gè)區(qū),表中區(qū)的劃分策略可以使用系統(tǒng)提供的劃分策略,也可以自定義劃分策略。在HBase的區(qū)需要?jiǎng)澐謺r(shí),使用的劃分策略實(shí)現(xiàn)類會(huì)調(diào)用getSplitPoint方法,得到該區(qū)劃分時(shí)的分界點(diǎn)。
Hbase的區(qū)分布到不同的區(qū)服務(wù)器上,客戶端進(jìn)行數(shù)據(jù)庫(kù)操作時(shí),由相應(yīng)的區(qū)服務(wù)器提供服務(wù)。其中,客戶端進(jìn)行查詢操作時(shí),如果需要查詢的數(shù)據(jù)跨越了多個(gè)區(qū),則會(huì)順序的在每一個(gè)區(qū)上進(jìn)行查詢,每個(gè)區(qū)上的查詢操作是各自獨(dú)立的,即客戶端不會(huì)保留上一個(gè)區(qū)上查詢的相關(guān)狀態(tài)。跳躍查找是軟件設(shè)計(jì)中的一種常用操作,例如數(shù)據(jù)全集有1000條記錄,跳躍查找可以跳過(guò)前500條,返回10條記錄,即返回第501條到510條記錄,該操作廣泛用于分頁(yè)查詢等功能。
數(shù)據(jù)庫(kù)中可以用二元組記錄一個(gè)對(duì)應(yīng)關(guān)系,例如,有群組g1、g2和g3,用戶u1、u2和u3,可以在數(shù)據(jù)庫(kù)中用(g1,u1)、(g2,u1)、(g2,u2)、(g2,u3)、(g2,u4)和(g3,u3)表示u1屬于g1,u1,u2、u3和u4屬于g2,u3屬于g3。在利用hbase存儲(chǔ)上述二元組記錄時(shí),由于其分布式特性,可能存在區(qū)A上存儲(chǔ)(g1,u1)、(g2,u1)、(g2,u2)和(g2,u3),區(qū)B上存儲(chǔ)(g2,u4)和(g3,u3)的情況,此時(shí)假設(shè)要對(duì)g2進(jìn)行跳躍查找,例如查詢g2群組里的第3個(gè)到第4個(gè)用戶,即跳過(guò)用戶u1和u2后,取得用戶u3和u4,由于Hbase客戶端在查詢跨越區(qū)時(shí)不保留狀態(tài),因此,在查詢區(qū)B時(shí)無(wú)法獲知在查詢區(qū)A的過(guò)程中已經(jīng)跳過(guò)的用戶數(shù)和已經(jīng)取得的用戶數(shù),所以Hbase客戶端只能將前4個(gè)用戶(g2,u1)、(g2,u2)、(g2,u3)和(g2,u4)都取回,舍棄前兩個(gè)用戶(g2,u1)、(g2,u2)后,取得所需的用戶(g2,u3)和(g2,u4),此時(shí),被舍棄的兩個(gè)用戶造成了冗余的網(wǎng)絡(luò)傳輸。
技術(shù)實(shí)現(xiàn)要素:
有鑒于此,本發(fā)明提供了一種分區(qū)系統(tǒng)、分區(qū)方法及裝置,用以解決現(xiàn)有的分區(qū)方式會(huì)導(dǎo)致在數(shù)據(jù)庫(kù)中查詢數(shù)據(jù)時(shí),除了會(huì)獲取到需要的數(shù)據(jù)外還會(huì)獲取到一些不需要的數(shù)據(jù),這些不需要的數(shù)據(jù)會(huì)造成冗余的網(wǎng)絡(luò)傳輸?shù)膯?wèn)題,其技術(shù)方案如下:
一種分區(qū)系統(tǒng),包括:客戶端和數(shù)據(jù)庫(kù)服務(wù)器;
所述客戶端,用于確定散列值取值范圍,并將每個(gè)待存儲(chǔ)的二元組和與所述每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至所述數(shù)據(jù)庫(kù)服務(wù)器中目標(biāo)數(shù)據(jù)表的一目標(biāo)區(qū)中;
所述數(shù)據(jù)庫(kù)服務(wù)器,用于在所述目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí)計(jì)算分界點(diǎn),并將所述分界點(diǎn)發(fā)送至所述客戶端;
所述客戶端,還用于從所述分界點(diǎn)中解析出目標(biāo)二元組以及所述目標(biāo)二元組對(duì)應(yīng)的散列值,并基于所述目標(biāo)二元組、所述目標(biāo)二元組對(duì)應(yīng)的散列值和所述散列值取值范圍確定分界點(diǎn)參考值,并將所述分界點(diǎn)參考值發(fā)送至所述數(shù)據(jù)庫(kù)服務(wù)器;
所述數(shù)據(jù)庫(kù)服務(wù)器,還用于基于所述分界點(diǎn)參考值對(duì)所述目標(biāo)區(qū)進(jìn)行分區(qū)。
其中,所述客戶端,具體用于從所述散列值取值范圍的最大值和最小值中,確定出與所述目標(biāo)二元組對(duì)應(yīng)的散列值最接近的值作為目標(biāo)散列值,將所述目標(biāo)二元組中的第一數(shù)據(jù)元素與所述目標(biāo)散列值按所述預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)記錄作為所述分界點(diǎn)參考值。
其中,所述數(shù)據(jù)庫(kù)服務(wù)器,具體用于基于所述分界點(diǎn)參考值重新確定所述目標(biāo)區(qū)的分界點(diǎn),并按重新確定的分界點(diǎn)對(duì)所述目標(biāo)區(qū)進(jìn)行分區(qū)。
其中,所述客戶端,具體用于基于預(yù)先設(shè)定的散列函數(shù)確定所述散列值取值范圍;以及,對(duì)于所述每個(gè)待存儲(chǔ)的二元組,利用所述預(yù)先設(shè)定的散列函數(shù)計(jì)算該二元組對(duì)應(yīng)的散列值,將該二元組中的第一數(shù)據(jù)元素轉(zhuǎn)換為第一預(yù)設(shè)字節(jié)的數(shù)據(jù),第二數(shù)據(jù)元素轉(zhuǎn)換為第二預(yù)設(shè)字節(jié)的數(shù)據(jù),將該二元組對(duì)應(yīng)的散列值轉(zhuǎn)換為第三預(yù)設(shè)字節(jié)的數(shù)據(jù),并將所述第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、所述第二預(yù)設(shè)字節(jié)的數(shù)據(jù)和所述第三預(yù)設(shè)字節(jié)的數(shù)據(jù)按預(yù)設(shè)順序進(jìn)行拼接,獲得一條數(shù)據(jù)記錄。
一種分區(qū)方法,包括:
確定散列值取值范圍,并將每個(gè)待存儲(chǔ)的二元組和與所述每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至數(shù)據(jù)庫(kù)服務(wù)器中目標(biāo)數(shù)據(jù)表的一目標(biāo)區(qū)中;
獲取所述數(shù)據(jù)庫(kù)服務(wù)器在所述目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí)計(jì)算得到的分界點(diǎn),并從所述分界點(diǎn)中解析出目標(biāo)二元組以及所述目標(biāo)二元組對(duì)應(yīng)的散列值;
基于所述目標(biāo)二元組、所述目標(biāo)二元組對(duì)應(yīng)的散列值和所述散列值取值范圍確定分界點(diǎn)參考值,并將所述分界點(diǎn)參考值發(fā)送至所述數(shù)據(jù)庫(kù)服務(wù)器,以使所述數(shù)據(jù)庫(kù)服務(wù)器基于所述分界點(diǎn)參考值對(duì)所述目標(biāo)區(qū)進(jìn)行分區(qū)。
其中,所述基于所述目標(biāo)二元組、所述目標(biāo)二元組對(duì)應(yīng)的散列值和所述散列值取值范圍確定分界點(diǎn)參考值,包括:
從所述散列值取值范圍的最大值和最小值中,確定出與所述目標(biāo)二元組對(duì)應(yīng)的散列值最接近的值作為目標(biāo)散列值;
將所述目標(biāo)二元組中的第一數(shù)據(jù)元素與所述目標(biāo)散列值按所述預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)記錄作為所述分界點(diǎn)參考值。
其中,所述確定散列值取值范圍,包括:
基于預(yù)先設(shè)定的散列函數(shù)確定所述散列值取值范圍;
所述將每個(gè)待存儲(chǔ)的二元組和與所述每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄,包括:
對(duì)于所述每個(gè)待存儲(chǔ)的二元組,利用所述預(yù)先設(shè)定的散列函數(shù)計(jì)算該二元組對(duì)應(yīng)的散列值,將該二元組中的第一數(shù)據(jù)元素轉(zhuǎn)換為第一預(yù)設(shè)字節(jié)的數(shù)據(jù),第二數(shù)據(jù)元素轉(zhuǎn)換為第二預(yù)設(shè)字節(jié)的數(shù)據(jù),將該二元組對(duì)應(yīng)的散列值轉(zhuǎn)換為第三預(yù)設(shè)字節(jié)的數(shù)據(jù),并將所述第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、所述第二預(yù)設(shè)字節(jié)的數(shù)據(jù)和所述第三預(yù)設(shè)字節(jié)的數(shù)據(jù)按預(yù)設(shè)順序進(jìn)行拼接,獲得一條數(shù)據(jù)記錄。
一種分區(qū)裝置,所述分區(qū)裝置包括:第一確定模塊、處理模塊、存儲(chǔ)模塊、獲取模塊、解析模塊、第二確定模塊和發(fā)送模塊;
所述第一確定模塊,用于確定散列值取值范圍;
所述處理模塊,用于將每個(gè)待存儲(chǔ)的二元組和與所述每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄;
所述存儲(chǔ)模塊,用于將所述處理模塊處理得到數(shù)據(jù)記錄存儲(chǔ)至目標(biāo)數(shù)據(jù)表中的一目標(biāo)區(qū)中;
所述獲取模塊,用于獲取所述數(shù)據(jù)庫(kù)服務(wù)器在所述目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí)計(jì)算得到的分界點(diǎn);
所述解析模塊,用于從所述獲取模塊獲取的所述分界點(diǎn)中解析出目標(biāo)二元組以及所述目標(biāo)二元組對(duì)應(yīng)的散列值;
所述第二確定模塊,用于基于所述解析模塊解析出的所述目標(biāo)二元組、所述目標(biāo)二元組對(duì)應(yīng)的散列值和所述第一確定模塊確定出的所述散列值取值范圍確定分界點(diǎn)參考值;
所述發(fā)送模塊,用于將所述第二確定模塊確定出的所述分界點(diǎn)參考值發(fā)送至所述數(shù)據(jù)庫(kù)服務(wù)器,以使所述數(shù)據(jù)庫(kù)服務(wù)器基于所述分界點(diǎn)參考值對(duì)所述目標(biāo)區(qū)進(jìn)行分區(qū)。
其中,所述第二確定模塊包括:
確定子模塊和處理子模塊;
所述確定子模塊,用于從所述散列值取值范圍的最大值和最小值中,確定出與所述目標(biāo)二元組對(duì)應(yīng)的散列值最接近的值作為目標(biāo)散列值;
所述處理子模塊,用于將所述目標(biāo)二元組中的第一數(shù)據(jù)元素與所述目標(biāo)散列值按所述預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)記錄作為所述分界點(diǎn)參考值。
其中,所述第一確定模塊,具體用于基于預(yù)先設(shè)定的散列函數(shù)確定所述散列值取值范圍;
所述處理模塊,包括:散列值計(jì)算子模塊、數(shù)據(jù)轉(zhuǎn)換子模塊和數(shù)據(jù)拼接子模塊;
所述散列值計(jì)算子模塊,用于對(duì)于所述每個(gè)待存儲(chǔ)的二元組,利用預(yù)先設(shè)定的散列函數(shù)計(jì)算該二元組對(duì)應(yīng)的散列值;
所述數(shù)據(jù)轉(zhuǎn)換模塊,用于將所述每個(gè)待存儲(chǔ)的二元組中的第一數(shù)據(jù)元素轉(zhuǎn)換為第一預(yù)設(shè)字節(jié)的數(shù)據(jù),第二數(shù)據(jù)元素轉(zhuǎn)換為第二預(yù)設(shè)字節(jié)的數(shù)據(jù),將該二元組對(duì)應(yīng)的散列值轉(zhuǎn)換為第三預(yù)設(shè)字節(jié)的數(shù)據(jù);
所述數(shù)據(jù)拼接子模塊,用于將所述第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、所述第二預(yù)設(shè)字節(jié)的數(shù)據(jù)和所述第三預(yù)設(shè)字節(jié)的數(shù)據(jù)按預(yù)設(shè)順序進(jìn)行拼接,獲得一條數(shù)據(jù)記錄。
上述技術(shù)方案具有如下有益效果:
本發(fā)明提供的分區(qū)系統(tǒng)、分區(qū)方法及裝置,能夠確定散列值取值范圍,并能夠?qū)⒚總€(gè)待存儲(chǔ)的二元組和與每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至數(shù)據(jù)庫(kù)服務(wù)器中目標(biāo)數(shù)據(jù)表的一目標(biāo)區(qū)中,當(dāng)目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí),即目標(biāo)區(qū)需要進(jìn)行分區(qū)時(shí),獲取數(shù)據(jù)庫(kù)服務(wù)器計(jì)算的分界點(diǎn),從分界點(diǎn)中解析出目標(biāo)二元組以及目標(biāo)二元組對(duì)應(yīng)的散列值,基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定分界點(diǎn)參考值,并將分界點(diǎn)參考值發(fā)送至數(shù)據(jù)庫(kù)服務(wù)器,以使數(shù)據(jù)庫(kù)服務(wù)器基于分界點(diǎn)參考值對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)。由此可見(jiàn),本發(fā)明提供的分區(qū)系統(tǒng)、分區(qū)方法及裝置,并不直接利用數(shù)據(jù)庫(kù)服務(wù)器計(jì)算出的分界點(diǎn)進(jìn)行分區(qū)(因?yàn)樵摲纸琰c(diǎn)可能會(huì)將屬于同一群組的數(shù)據(jù)劃分到兩個(gè)分區(qū)中),而是利用基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定的分界點(diǎn)參考值對(duì)目標(biāo)區(qū)進(jìn)行分區(qū),這使得屬于同一群組的數(shù)據(jù)能夠劃分到同一區(qū)中,進(jìn)而使得在查詢同一群組的數(shù)據(jù)時(shí),不會(huì)出現(xiàn)跨區(qū)查詢的情況,相應(yīng)的也就不會(huì)獲得不需要的數(shù)據(jù),從而避免了冗余的網(wǎng)絡(luò)傳輸。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本發(fā)明的實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)提供的附圖獲得其他的附圖。
圖1為本發(fā)明實(shí)施例提供的分區(qū)系統(tǒng)的結(jié)構(gòu)示意圖;
圖2為本發(fā)明實(shí)施例提供的分區(qū)系統(tǒng)中,數(shù)據(jù)庫(kù)服務(wù)器基于客戶端確定的分界點(diǎn)參考值在數(shù)據(jù)庫(kù)中進(jìn)行匹配獲得目標(biāo)區(qū)的分界點(diǎn)的一具體實(shí)例的示意圖;
圖3為本發(fā)明實(shí)施例提供的分區(qū)系統(tǒng)中,數(shù)據(jù)庫(kù)服務(wù)器基于客戶端確定的分界點(diǎn)參考值在數(shù)據(jù)庫(kù)中進(jìn)行匹配獲得目標(biāo)區(qū)的分界點(diǎn)的另一具體實(shí)例的示意圖;
圖4為本發(fā)明實(shí)施例提供的分區(qū)方法的流程示意圖;
圖5為本發(fā)明實(shí)施例提供的分區(qū)裝置的一結(jié)構(gòu)示意圖。
具體實(shí)施方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例提供了一種分區(qū)系統(tǒng),該分區(qū)系統(tǒng)可以包括:客戶端101和數(shù)據(jù)庫(kù)服務(wù)器102。
客戶端101,用于確定散列值取值范圍,并將每個(gè)待存儲(chǔ)的二元組和與每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至數(shù)據(jù)庫(kù)服務(wù)器102中目標(biāo)數(shù)據(jù)表的一目標(biāo)區(qū)中。
數(shù)據(jù)庫(kù)服務(wù)器102,用于在目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí)計(jì)算目標(biāo)區(qū)的分界點(diǎn),并將目標(biāo)區(qū)的分界點(diǎn)發(fā)送至客戶端101。
客戶端101,還用于從接收的分界點(diǎn)中解析出目標(biāo)二元組以及目標(biāo)二元組對(duì)應(yīng)的散列值,并基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值以及散列值取值范圍確定分界點(diǎn)參考值,并將分界點(diǎn)參考值發(fā)送至數(shù)據(jù)庫(kù)服務(wù)器。
數(shù)據(jù)庫(kù)服務(wù)器102,還用于基于分界點(diǎn)參考值對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)。
本發(fā)明提供的分區(qū)系統(tǒng)中,客戶端能夠確定散列值取值范圍,并能夠?qū)⒚總€(gè)待存儲(chǔ)的二元組和與每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至目標(biāo)區(qū)中,數(shù)據(jù)庫(kù)服務(wù)器在目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí),即目標(biāo)區(qū)需要進(jìn)行分區(qū)時(shí),計(jì)算目標(biāo)區(qū)的分界點(diǎn),客戶端從該分界點(diǎn)中解析出目標(biāo)二元組以及目標(biāo)二元組對(duì)應(yīng)的散列值,基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定分界點(diǎn)參考值,數(shù)據(jù)庫(kù)服務(wù)器基于該分界點(diǎn)參考值對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)。由此可見(jiàn),本發(fā)明實(shí)施例提供的分區(qū)系統(tǒng)中,數(shù)據(jù)庫(kù)服務(wù)器并不直接利用計(jì)算出的分界點(diǎn)進(jìn)行分區(qū)(因?yàn)樵摲纸琰c(diǎn)可能會(huì)將屬于同一群組的數(shù)據(jù)劃分到兩個(gè)分區(qū)中),而是基于客戶端確定的分界點(diǎn)參考值對(duì)目標(biāo)區(qū)進(jìn)行分區(qū),使得屬于同一群組的數(shù)據(jù)能夠劃分到同一區(qū)中,進(jìn)而使得在查詢同一群組的數(shù)據(jù)時(shí),不會(huì)出現(xiàn)跨區(qū)查詢的情況,相應(yīng)的也就不會(huì)獲得不需要的數(shù)據(jù),從而避免了冗余的網(wǎng)絡(luò)傳輸。
上述實(shí)施例提供的分區(qū)系統(tǒng)中,客戶端基于預(yù)先設(shè)定的散列函數(shù)確定散列值取值范圍。
在一種可能的實(shí)現(xiàn)方式中,可將直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定的取值范圍作為本實(shí)施例中的散列值取值范圍,示例性的,直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定的取值范圍為a~z,a~z即為本實(shí)施例中散列值取值范圍;在另一種可能的實(shí)現(xiàn)方式中,可首先直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定第一取值范圍,然后基于第一取值范圍確定散列值取值范圍,散列值取值范圍中的最小值可以為小于第一取值范圍中的最小值,且與第一取值范圍中的最小值相鄰的值,散列值取值范圍中的最大值可以為大于第一取值范圍中的最大值,且與第一取值范圍中的最大值相鄰的值,示例性的,直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定的取值范圍為a~z,假設(shè)小于a且與a相鄰的值為α,大于z且與z相鄰的值為β,則將α~β確定為本實(shí)施例中的散列值取值范圍。需要說(shuō)明的是,在后文的描述中所提及的a~z均是按第一種實(shí)現(xiàn)方式確定的散列值取值范圍,而所提及的α~β均是按第二種實(shí)現(xiàn)方式確定的散列值取值范圍。
客戶端將每個(gè)待存儲(chǔ)的二元組和與每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至目標(biāo)數(shù)據(jù)表中的一目標(biāo)區(qū)的過(guò)程可以包括:對(duì)于每個(gè)待存儲(chǔ)的二元組,利用預(yù)先設(shè)定的散列函數(shù)計(jì)算該二元組對(duì)應(yīng)的散列值,將該二元組中的第一數(shù)據(jù)元素轉(zhuǎn)換為第一預(yù)設(shè)字節(jié)的數(shù)據(jù),第二數(shù)據(jù)元素轉(zhuǎn)換為第二預(yù)設(shè)字節(jié)的數(shù)據(jù),將該二元組對(duì)應(yīng)的散列值轉(zhuǎn)換為第三預(yù)設(shè)字節(jié)的數(shù)據(jù),并將第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、第二預(yù)設(shè)字節(jié)的數(shù)據(jù)和第三預(yù)設(shè)字節(jié)的數(shù)據(jù)按預(yù)設(shè)順序進(jìn)行拼接,獲得一條數(shù)據(jù)記錄。其中,二元組對(duì)應(yīng)的散列值具體為二元組中第二數(shù)據(jù)元素的散列值。
示例性的,存儲(chǔ)數(shù)據(jù)表的數(shù)據(jù)庫(kù)為Hbase,待存儲(chǔ)的一二元組為(g,u),(g,u)表示數(shù)據(jù)u屬于群組g,首先利用預(yù)先設(shè)定的散列函數(shù)計(jì)算該二元組為(g,u)對(duì)應(yīng)的散列值,即計(jì)算(g,u)中u的散列值。假設(shè)二元組(g,u)對(duì)應(yīng)的散列值為v,然后構(gòu)造rowkey(g,v,u),構(gòu)造rowkey(g,v,u)的過(guò)程為:將二元組(g,u)中的第一數(shù)據(jù)元素g轉(zhuǎn)換為第一預(yù)設(shè)字節(jié)的數(shù)據(jù),將二元組(g,u)中的第二數(shù)據(jù)元素u轉(zhuǎn)換為第二預(yù)設(shè)字節(jié)的數(shù)據(jù),將二元組(g,u)對(duì)應(yīng)的散列值v轉(zhuǎn)換為第三預(yù)設(shè)字節(jié)的數(shù)據(jù),然后將第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、第三預(yù)設(shè)字節(jié)的數(shù)據(jù)和第二預(yù)設(shè)字節(jié)的數(shù)據(jù)拼接成一字節(jié)數(shù)據(jù)串,將字節(jié)數(shù)據(jù)串作為一條數(shù)據(jù)記錄存儲(chǔ)到目標(biāo)數(shù)據(jù)表中的目標(biāo)區(qū)中。
以數(shù)據(jù)庫(kù)服務(wù)器為Hbase數(shù)據(jù)庫(kù)服務(wù)器為例,計(jì)算目標(biāo)區(qū)的分界點(diǎn)的實(shí)現(xiàn)過(guò)程為:向Hbase注冊(cè)自定義的region split實(shí)現(xiàn)類,該實(shí)現(xiàn)類繼承任意其它region split策略實(shí)現(xiàn)類,并重寫(xiě)getSplitPoint方法,在重寫(xiě)的方法中,當(dāng)目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí),首先調(diào)用super.getSplitPoint,得到由其它策略實(shí)現(xiàn)類計(jì)算得到的分界點(diǎn)。
在上述實(shí)施例提供的分區(qū)系統(tǒng)中,客戶端基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定分界點(diǎn)參考值的過(guò)程為:從散列值取值范圍的最大值和最小值中,確定出與目標(biāo)二元組對(duì)應(yīng)的散列值最接近的值作為目標(biāo)散列值,將目標(biāo)二元組中的第一數(shù)據(jù)元素與目標(biāo)散列值按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)記錄作為分界點(diǎn)參考值。
示例性的,確定出的目標(biāo)二元組為(g,u),(g,u)對(duì)應(yīng)的散列值為v,散列值的取值范圍為α~β,取值范圍的最小值為α,取值范圍的最大值為β,由于α和β中與v最接近的為β,因此,將β作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,β)中的第一數(shù)據(jù)元素g和目標(biāo)散列值β按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值。在此,為了便于描述,將此時(shí)的分界點(diǎn)參考值記為<gβ>,即客戶端反饋給數(shù)據(jù)庫(kù)服務(wù)器的分界點(diǎn)參考值為<gβ>。同樣的,如果(g,u)對(duì)應(yīng)的散列值為b,由于α和β中與b最接近的為α,則將α作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,α)中的第一數(shù)據(jù)元素g和目標(biāo)散列值α按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值,即客戶端反饋給數(shù)據(jù)庫(kù)服務(wù)器的分界點(diǎn)參考值為<gα>。
示例性的,確定出的目標(biāo)二元組為(g,u),(g,u)對(duì)應(yīng)的散列值為v,散列值的取值范圍為a~z,取值范圍的最小值為a,取值范圍的最大值為z,由于a和z中與v最接近的為z,因此,將z作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,u)中的第一數(shù)據(jù)元素g、目標(biāo)散列值z(mì)以及x按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值,其中,x的取值可以為屬于群組g的所有u中最大的u(即umax),或者為大于umax的任意值。在此,為了便于描述,將此時(shí)的分界點(diǎn)參考值記為<g z x>,即客戶端反饋給數(shù)據(jù)庫(kù)服務(wù)器的分界點(diǎn)參考值為<g z x>。同樣的,如果(g,u)對(duì)應(yīng)的散列值為b,則由于a和z中與v最接近的為a,因此,將a作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,u)中的第一數(shù)據(jù)元素g、目標(biāo)散列值a以及x按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值,此時(shí),x的取值可以為屬于群組g的所有u中最小的u(即umin),或者為小于umin的任意值,客戶端反饋給數(shù)據(jù)庫(kù)服務(wù)器的分界點(diǎn)參考值為<g a x>。
客戶端在確定出分界點(diǎn)參考值之后,將分界點(diǎn)參考值發(fā)送給數(shù)據(jù)庫(kù)服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器基于分界點(diǎn)參考值重新確定目標(biāo)區(qū)的分界點(diǎn),并按重新確定的分界點(diǎn)對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)。數(shù)據(jù)庫(kù)基于分界點(diǎn)參考值重新確定目標(biāo)區(qū)的分界點(diǎn)的過(guò)程即基于分界點(diǎn)參考值在數(shù)據(jù)庫(kù)中進(jìn)行匹配的過(guò)程。
具體的,在一種可能的實(shí)現(xiàn)方式中,分界點(diǎn)參考值包括第一目標(biāo)數(shù)據(jù)和第二目標(biāo)數(shù)據(jù),第一目標(biāo)數(shù)據(jù)與目標(biāo)二元組中的第一數(shù)據(jù)元素對(duì)應(yīng),第二目標(biāo)數(shù)據(jù)與目標(biāo)散列值對(duì)應(yīng),則匹配過(guò)程為:在目標(biāo)區(qū)中查詢與分界點(diǎn)參考值最接近的數(shù)據(jù)記錄,將查詢到的與分界點(diǎn)參考值最接近的數(shù)據(jù)記錄確定為目標(biāo)區(qū)的分界點(diǎn)。
在另一種可能的實(shí)現(xiàn)方式中,分界點(diǎn)參考值包括第一目標(biāo)數(shù)據(jù)、第二目標(biāo)數(shù)據(jù)和第三目標(biāo)數(shù)據(jù),第一目標(biāo)數(shù)據(jù)與目標(biāo)二元組中的第一數(shù)據(jù)元素對(duì)應(yīng),第二目標(biāo)數(shù)據(jù)與目標(biāo)散列值對(duì)應(yīng),第三目標(biāo)數(shù)據(jù)與目標(biāo)值x(當(dāng)目標(biāo)散列值為取值范圍的最大值時(shí),目標(biāo)值x為包含第一數(shù)據(jù)元素的二元組中第二數(shù)據(jù)元素的最大值,或者為大于該最大值的任意值,當(dāng)目標(biāo)散列值為取值范圍的最小值時(shí),目標(biāo)值x為包含第一數(shù)據(jù)元素的二元組中第二數(shù)據(jù)元素的最小值,或者為小于該最小值的任意值)對(duì)應(yīng),則匹配過(guò)程為:首先在目標(biāo)區(qū)中查詢與分界點(diǎn)參考值相同的數(shù)據(jù)記錄,如果查詢到,則將與分界點(diǎn)參考值相同的數(shù)據(jù)記錄確定為目標(biāo)區(qū)的分界點(diǎn),如果未查詢到,則進(jìn)一步查詢與分界點(diǎn)參考值最接近的數(shù)據(jù)記錄,將查詢到的與分界點(diǎn)參考值最接近的數(shù)據(jù)記錄確定為目標(biāo)區(qū)的分界點(diǎn)。
下面通過(guò)一具體實(shí)例對(duì)上述數(shù)據(jù)庫(kù)服務(wù)器基于分界點(diǎn)參考值在Hbase數(shù)據(jù)庫(kù)中進(jìn)行匹配獲得目標(biāo)區(qū)的分界點(diǎn)的過(guò)程進(jìn)行說(shuō)明:
請(qǐng)參閱圖2(a),示出了目標(biāo)區(qū)中存儲(chǔ)的數(shù)據(jù),數(shù)據(jù)庫(kù)服務(wù)器計(jì)算得到的分界點(diǎn)為<g v uu4>(為了便于描述,在此將目標(biāo)區(qū)中存儲(chǔ)的數(shù)據(jù)記錄表示成<g v uu4>),客戶端解析該分界點(diǎn)得到目標(biāo)二元組(g,uu4)和與該目標(biāo)二元組(g,uu4)對(duì)應(yīng)的散列值v:
在第一種可能的實(shí)現(xiàn)方式中,假設(shè)散列值取值范圍為α~β(直接通過(guò)散列值函數(shù)確定的取值范圍為a~z),即散列值取值范圍的最小值為α,最大值為β,由于α和β中與目標(biāo)二元組(g,uu4)對(duì)應(yīng)的散列值v最接近的散列值為β,因此,將β作為目標(biāo)散列值,然后將目標(biāo)二元組中的第一數(shù)據(jù)元素g和目標(biāo)散列值β按預(yù)設(shè)的處理規(guī)則處理成<gβ>,然后將<gβ>作為分界點(diǎn)參考值發(fā)送給數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行匹配。
具體的,由于在存儲(chǔ)二元組,利用散列函數(shù)計(jì)算的散列值的最大值為z,而β大于z,因此,數(shù)據(jù)庫(kù)服務(wù)器中不會(huì)存在與β相同的散列值,在匹配時(shí),直接在目標(biāo)區(qū)中查找與<gβ>最接近的數(shù)據(jù)記錄,將與<gβ>最接近的數(shù)據(jù)記錄確定為目標(biāo)區(qū)的分界點(diǎn)。由于2(a)中與<gβ>最接近的數(shù)據(jù)記錄為<g w uu5>,因此將<g w uu5>作為最終用于進(jìn)行分區(qū)的分界點(diǎn)。如圖2(b)示出了基于重新確定的分界點(diǎn)<g w uu5>對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)的示意圖,由圖2(b)可以看出所有屬于群組g的數(shù)據(jù)被劃分到了一個(gè)分區(qū)中。
在第二種可能的實(shí)現(xiàn)方式中,假設(shè)散列值取值范圍為a~z,即散列值取值范圍的最小值為a,最大值為z,由于a和z中與目標(biāo)二元組(g,uu4)對(duì)應(yīng)的散列值v最接近的散列值為z,因此,將z作為目標(biāo)散列值,然后將目標(biāo)二元組中的第一數(shù)據(jù)元素g、目標(biāo)散列值z(mì)和x按預(yù)設(shè)的處理規(guī)則處理成<g z x>(x可以為uu5,或者大于uu5的任意值),然后將<g z x>作為分界點(diǎn)參考值發(fā)送給數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行匹配。具體的,首先在圖2(a)示出的目標(biāo)區(qū)中查詢與<g z x>相同的數(shù)據(jù)記錄,經(jīng)查詢,目標(biāo)區(qū)中沒(méi)有與<g z x>相同的數(shù)據(jù)記錄,則進(jìn)一步查詢與<g z x>最接近的數(shù)據(jù)記錄,經(jīng)查詢,與<g z x>最接近的數(shù)據(jù)記錄為<g w uu5>,因此,將<g w uu5>作為最終用于進(jìn)行分區(qū)的分界點(diǎn)。
需要說(shuō)明的是,在第二種可能的實(shí)現(xiàn)方式中,之所以向數(shù)據(jù)庫(kù)服務(wù)器返回<g z x>而不返回<g z>,是因?yàn)?lt;g z>為包含g和z的數(shù)據(jù)中最小的,示例性的,數(shù)據(jù)庫(kù)中包含數(shù)據(jù)<g z 1>、<g z 2>、<g z 3>和<g z 4>,由于<g z 1>、<g z 2>、<g z 3>和<g z 4>均大于<g z>,因此,如果查詢與<g z>接近的數(shù)據(jù)記錄作為分界點(diǎn),會(huì)獲得<g z 1>,而利用<g z 1>分區(qū)會(huì)導(dǎo)致屬于同一群組g的數(shù)據(jù)分到兩個(gè)分區(qū),所以在獲得g和z之后,需要將g和z處理成<g z x>,例如,將x設(shè)置為4,則<g z x>為<g z 4>,則在數(shù)據(jù)庫(kù)中進(jìn)行匹配時(shí),可匹配得到<g z 4>作為分界點(diǎn),或者,將x設(shè)置為大于4的任值,例如8,即<g z x>為<g z 8>,則在數(shù)據(jù)庫(kù)中進(jìn)行匹配時(shí),可匹配到與<g z 8>最接近的<g z 4>。
上述過(guò)程給出了基于散列值取值范圍中的最大值重新確定分界點(diǎn)的過(guò)程,下面再通過(guò)一具體實(shí)例給出基于散列值取值范圍中的最小值重新確定分界點(diǎn)的過(guò)程:
請(qǐng)參閱圖3(a),示出了目標(biāo)區(qū)中存儲(chǔ)的數(shù)據(jù),假設(shè)數(shù)據(jù)庫(kù)服務(wù)器計(jì)算得到的分界點(diǎn)為<g f uu2>(為了便于描述,在此將目標(biāo)區(qū)中存儲(chǔ)的數(shù)據(jù)記錄表示成<g f uu2>),客戶端解析該分界點(diǎn)得到目標(biāo)二元組(g,uu2)和與該目標(biāo)二元組(g,uu2)對(duì)應(yīng)的散列值f:
在第一種可能的實(shí)現(xiàn)方式中:假設(shè)散列值取值范圍為α~β(直接通過(guò)散列值函數(shù)確定的取值范圍為a~z),即散列值取值范圍的最小值為α,最大值為β,由于α和β中與目標(biāo)二元組(g,uu2)對(duì)應(yīng)的散列值f最接近的散列值為α,因此,將α作為目標(biāo)散列值,然后將目標(biāo)二元組中的第一數(shù)據(jù)元素g和目標(biāo)散列值α按預(yù)設(shè)的處理規(guī)則處理成<gα>,然后將<gα>作為分界點(diǎn)參考值發(fā)送給數(shù)據(jù)庫(kù)服務(wù)器進(jìn)行匹配。
具體的,由于在存儲(chǔ)二元組,利用散列函數(shù)計(jì)算的散列值的最小值為a,而α小于a,因此,數(shù)據(jù)庫(kù)服務(wù)器中不會(huì)存在與α相同的散列值,在匹配時(shí),直接在目標(biāo)區(qū)中查找與<gα>最接近的數(shù)據(jù)記錄,將與<gα>最接近的數(shù)據(jù)記錄確定為目標(biāo)區(qū)的分界點(diǎn)。由于目標(biāo)區(qū)中與<gα>最接近的數(shù)據(jù)記錄為<g b uu1>,因此,將<g b uu1>作為與<gα>匹配的數(shù)據(jù)記錄,即,將<g b uu1>作為最終用于進(jìn)行分區(qū)的分界點(diǎn)。如圖3(b)示出了基于重新確定的分界點(diǎn)<g b uu1>對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)的示意圖,由圖3(b)可以看出所有屬于群組g的數(shù)據(jù)被劃分到了一個(gè)分區(qū)中。
在第二種可能的實(shí)現(xiàn)方式中:假設(shè)散列值取值范圍為a~z,即散列值取值范圍的最小值為a,最大值為z,由于a和z中與目標(biāo)二元組(g,uu2)對(duì)應(yīng)的散列值f最接近的散列值為a,因此,將a作為目標(biāo)散列值,然后將目標(biāo)二元組中的第一數(shù)據(jù)元素g、目標(biāo)散列值和x按預(yù)設(shè)的處理規(guī)則處理成<g a x>(x可以為uu1,或者比uu1小的任意值)),然后將<g a x>作為分界點(diǎn)參考值與目標(biāo)區(qū)中的數(shù)據(jù)記錄進(jìn)行匹配。
具體的,首先在圖3(a)示出的目標(biāo)區(qū)中查詢與<g a x>相同的數(shù)據(jù)記錄,經(jīng)查詢,數(shù)據(jù)庫(kù)中不存在與<g a x>相同的數(shù)據(jù)記錄,則進(jìn)一步查詢與<g a x>最接近的數(shù)據(jù)記錄,經(jīng)查詢,與<g a x>最接近的數(shù)據(jù)記錄為<g b uu1>,因此,將<g b uu1>作為與<g a x>匹配的數(shù)據(jù)記錄,即,將<g b uu1>作為最終用于進(jìn)行分區(qū)的分界點(diǎn)。
由圖2(b)和圖3(b)可以看出,基于重新確定的分界點(diǎn)對(duì)目標(biāo)區(qū)進(jìn)行分區(qū),使得屬于同一群組的數(shù)據(jù)能夠劃分到同一個(gè)區(qū)中,進(jìn)而使得當(dāng)應(yīng)用跳躍查找方式進(jìn)行查找時(shí),更加方便和高效。
本發(fā)明實(shí)施例提供了一種分區(qū)方法,請(qǐng)參閱圖4,示出了該分區(qū)方法的流程示意圖,可以包括:
步驟S401:確定散列值取值范圍,并將每個(gè)待存儲(chǔ)的二元組和與每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至數(shù)據(jù)庫(kù)服務(wù)器中目標(biāo)數(shù)據(jù)表的一目標(biāo)區(qū)中。
步驟S402:獲取數(shù)據(jù)庫(kù)服務(wù)器在目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí)計(jì)算得到的分界點(diǎn),并從分界點(diǎn)中解析出目標(biāo)二元組以及目標(biāo)二元組對(duì)應(yīng)的散列值。
需要說(shuō)明的是,當(dāng)目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值,表明需要對(duì)目標(biāo)區(qū)進(jìn)行分區(qū),此時(shí),數(shù)據(jù)庫(kù)服務(wù)器需要計(jì)算目標(biāo)區(qū)的分界點(diǎn),其中,目標(biāo)區(qū)的分界點(diǎn)為目標(biāo)區(qū)中的一條數(shù)據(jù)記錄。
需要說(shuō)明的是,由于分界點(diǎn)為目標(biāo)區(qū)中的一條數(shù)據(jù)記錄,而該數(shù)據(jù)記錄由一二元組和該二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理得到,為了后續(xù)步驟的實(shí)現(xiàn),本步驟需要將該條數(shù)據(jù)記錄轉(zhuǎn)換回二元組和該二元組對(duì)應(yīng)的散列值。
步驟S403:基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定分界點(diǎn)參考值,并將分界點(diǎn)參考值發(fā)送至數(shù)據(jù)庫(kù)服務(wù)器,以使數(shù)據(jù)庫(kù)服務(wù)器基于分界點(diǎn)參考值對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)。
需要說(shuō)明的是,本實(shí)施例并不限定確定散列值取值范圍這一步驟的執(zhí)行順序,只要該步驟在步驟S403中基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定分界點(diǎn)參考值這一步驟之前執(zhí)行即可。
本發(fā)明實(shí)施例提供的分區(qū)方法,使得數(shù)據(jù)庫(kù)服務(wù)器并不直接利用計(jì)算出的分界點(diǎn)進(jìn)行分區(qū)(因?yàn)樵摲纸琰c(diǎn)可能會(huì)將屬于同一群組的數(shù)據(jù)劃分到兩個(gè)分區(qū)中),而是利用基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定的分界點(diǎn)參考值在數(shù)據(jù)庫(kù)中匹配,獲得新的分界點(diǎn),基于該新的分界點(diǎn)對(duì)目標(biāo)區(qū)進(jìn)行分區(qū),這使得屬于同一群組的數(shù)據(jù)能夠劃分到同一區(qū)中,進(jìn)而使得在查詢同一群組的數(shù)據(jù)時(shí),不會(huì)出現(xiàn)跨區(qū)查詢的情況,相應(yīng)的也就不會(huì)獲得不需要的數(shù)據(jù),從而避免了冗余的網(wǎng)絡(luò)傳輸。
在上述實(shí)施例提供的分區(qū)方法中,散列值取值范圍基于預(yù)先設(shè)定的散列函數(shù)確定。
在一種可能的實(shí)現(xiàn)方式中,可將直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定的取值范圍作為本實(shí)施例中的散列值取值范圍,示例性的,直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定的取值范圍為a~z,a~z即為本實(shí)施例中散列值取值范圍;在另一種可能的實(shí)現(xiàn)方式中,可首先直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定第一取值范圍,然后基于第一取值范圍確定散列值取值范圍,散列值取值范圍中的最小值可以為小于第一取值范圍中的最小值,且與第一取值范圍中的最小值相鄰的值,散列值取值范圍中的最大值可以為大于第一取值范圍中的最大值,且與第一取值范圍中的最大值相鄰的值,示例性的,直接通過(guò)預(yù)先設(shè)定的散列函數(shù)的特性確定的取值范圍為a~z,假設(shè)小于a且與a相鄰的值為α,大于z且與z相鄰的值為β,則將α~β確定為本實(shí)施例中的散列值取值范圍。
將每個(gè)待存儲(chǔ)的二元組和與每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄存儲(chǔ)至目標(biāo)數(shù)據(jù)表中的一目標(biāo)區(qū)中的實(shí)現(xiàn)過(guò)程可以包括:對(duì)于每個(gè)待存儲(chǔ)的二元組,利用預(yù)先設(shè)定的散列函數(shù)計(jì)算該二元組對(duì)應(yīng)的散列值,將該二元組中的第一數(shù)據(jù)元素轉(zhuǎn)換為第一預(yù)設(shè)字節(jié)的數(shù)據(jù),第二數(shù)據(jù)元素轉(zhuǎn)換為第二預(yù)設(shè)字節(jié)的數(shù)據(jù),將該二元組對(duì)應(yīng)的散列值轉(zhuǎn)換為第三預(yù)設(shè)字節(jié)的數(shù)據(jù),并將第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、第二預(yù)設(shè)字節(jié)的數(shù)據(jù)和第三預(yù)設(shè)字節(jié)的數(shù)據(jù)按預(yù)設(shè)順序進(jìn)行拼接,獲得一條數(shù)據(jù)記錄(可按如下順序拼接:第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、第三預(yù)設(shè)字節(jié)的數(shù)據(jù)、第二預(yù)設(shè)字節(jié)的數(shù)據(jù))。其中,二元組對(duì)應(yīng)的散列值具體為二元組中第二數(shù)據(jù)元素的散列值。
在上述實(shí)施例提供的分區(qū)方法中,基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定分界點(diǎn)參考值,包括:從散列值取值范圍的最大值和最小值中,確定出與目標(biāo)二元組對(duì)應(yīng)的散列值最接近的值作為目標(biāo)散列值;將目標(biāo)二元組中的第一數(shù)據(jù)元素與目標(biāo)散列值按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)記錄作為分界點(diǎn)參考值。
示例性的,確定出的目標(biāo)二元組為(g,u),(g,u)對(duì)應(yīng)的散列值為v,散列值的取值范圍為α~β,取值范圍的最小值為α,取值范圍的最大值為β,由于α和β中與v最接近的為β,因此,將β作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,β)中的第一數(shù)據(jù)元素g和目標(biāo)散列值β按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值。在此,為了便于描述,將此時(shí)的分界點(diǎn)參考值記為<ggβ>。同樣的,如果(g,u)對(duì)應(yīng)的散列值為b,由于α和β中與b最接近的為α,則將α作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,α)中的第一數(shù)據(jù)元素g和目標(biāo)散列值α按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值,即分界點(diǎn)參考值記為<gα>。
示例性的,確定出的目標(biāo)二元組為(g,u),(g,u)對(duì)應(yīng)的散列值為v,散列值的取值范圍為a~z,取值范圍的最小值為a,取值范圍的最大值為z,由于a和z中與v最接近的為z,因此,將z作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,u)中的第一數(shù)據(jù)元素g、目標(biāo)散列值z(mì)以及x按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值,其中,x的取值可以為屬于群組g的所有u中最大的u(即umax),或者為大于umax的任意值。在此,為了便于描述,將此時(shí)的分界點(diǎn)參考值記為<g z x>。同樣的,如果(g,u)對(duì)應(yīng)的散列值為b,則由于a和z中與v最接近的為a,因此,將a作為目標(biāo)散列值,然后,將目標(biāo)二元組為(g,u)中的第一數(shù)據(jù)元素g、目標(biāo)散列值a以及x按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)作為分界點(diǎn)參考值,此時(shí),x的取值可以為屬于群組g的所有u中最小的u(即umin),或者為小于umin的任意值,分界點(diǎn)參考值為<g a x>。
在確定出分界點(diǎn)參考值之后,將分界點(diǎn)參考值發(fā)送給數(shù)據(jù)庫(kù)服務(wù)器,數(shù)據(jù)庫(kù)服務(wù)器基于分界點(diǎn)參考值在數(shù)據(jù)庫(kù)中進(jìn)行匹配,獲得最終用于對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)的分界點(diǎn),并用獲得的分界點(diǎn)對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)。
與上述方法相對(duì)應(yīng),本發(fā)明實(shí)施例還提供了一種分區(qū)裝置,請(qǐng)參閱圖4,示出了該分區(qū)裝置的結(jié)構(gòu)示意圖,該裝置可以包括:第一確定模塊501、處理模塊502、存儲(chǔ)模塊503、獲取模塊504、解析模塊505、第二確定模塊506和發(fā)送模塊507。
第一確定模塊501,用于確定散列值取值范圍。
處理模塊502,用于將每個(gè)待存儲(chǔ)的二元組和與每個(gè)待存儲(chǔ)的二元組對(duì)應(yīng)的散列值按預(yù)設(shè)的處理規(guī)則處理成一條數(shù)據(jù)記錄。
存儲(chǔ)模塊503,用于將處理模塊502處理得到數(shù)據(jù)記錄存儲(chǔ)至數(shù)據(jù)庫(kù)服務(wù)器中目標(biāo)數(shù)據(jù)表的一目標(biāo)區(qū)中。
獲取模塊504,用于獲取數(shù)據(jù)庫(kù)服務(wù)器在目標(biāo)區(qū)中數(shù)據(jù)記錄的條數(shù)大于預(yù)設(shè)值時(shí)計(jì)算得到的分界點(diǎn)。
解析模塊505,用于從獲取模塊504獲取的分界點(diǎn)中解析出目標(biāo)二元組以及目標(biāo)二元組對(duì)應(yīng)的散列值。
第二確定模塊506,用于基于解析模塊505解析得到的目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和第一確定模塊401確定的散列值取值范圍確定分界點(diǎn)參考值。
發(fā)送模塊507,用于將第二確定模塊506確定出的分界點(diǎn)參考值發(fā)送至數(shù)據(jù)庫(kù)服務(wù)器,以使數(shù)據(jù)庫(kù)服務(wù)器基于分界點(diǎn)參考值對(duì)目標(biāo)區(qū)進(jìn)行分區(qū)。
本發(fā)明提供的分區(qū)裝置,使得數(shù)據(jù)庫(kù)服務(wù)器并不直接利用計(jì)算出的分界點(diǎn)進(jìn)行分區(qū)(因?yàn)樵摲纸琰c(diǎn)可能會(huì)將屬于同一群組的數(shù)據(jù)劃分到兩個(gè)分區(qū)中),而是利用基于目標(biāo)二元組、目標(biāo)二元組對(duì)應(yīng)的散列值和散列值取值范圍確定的分界點(diǎn)參考值在數(shù)據(jù)庫(kù)中匹配,獲得新的分界點(diǎn),基于該新的分界點(diǎn)對(duì)目標(biāo)區(qū)進(jìn)行分區(qū),這使得屬于同一群組的數(shù)據(jù)能夠劃分到同一區(qū)中,進(jìn)而使得在查詢同一群組的數(shù)據(jù)時(shí),不會(huì)出現(xiàn)跨區(qū)查詢的情況,相應(yīng)的也就不會(huì)獲得不需要的數(shù)據(jù),從而避免了冗余的網(wǎng)絡(luò)傳輸。
在上述實(shí)施例提供的分區(qū)裝置中,第二確定模塊包括:確定子模塊和處理子模塊。
確定子模塊,用于從散列值取值范圍的最大值和最小值中,確定出與目標(biāo)二元組對(duì)應(yīng)的散列值最接近的值作為目標(biāo)散列值。
處理子模塊,用于將目標(biāo)二元組中的第一數(shù)據(jù)元素與確定子模塊確定的目標(biāo)散列值按預(yù)設(shè)的處理規(guī)則處理成一條目標(biāo)數(shù)據(jù)記錄作為分界點(diǎn)參考值。
在上述實(shí)施例提供的分區(qū)裝置中,第一確定模塊,具體用于基于預(yù)先設(shè)定的散列函數(shù)確定散列值取值范圍。
在上述實(shí)施例提供的分區(qū)裝置中,處理模塊包括:散列值計(jì)算子模塊、數(shù)據(jù)轉(zhuǎn)換子模塊和數(shù)據(jù)拼接子模塊。
散列值計(jì)算子模塊,用于對(duì)于每個(gè)待存儲(chǔ)的二元組,利用預(yù)先設(shè)定的散列函數(shù)計(jì)算該二元組對(duì)應(yīng)的散列值。其中,二元組對(duì)應(yīng)的散列值具體為二元組中第二數(shù)據(jù)元素的散列值。
數(shù)據(jù)轉(zhuǎn)換模塊,用于將每個(gè)待存儲(chǔ)的二元組中的第一數(shù)據(jù)元素轉(zhuǎn)換為第一預(yù)設(shè)字節(jié)的數(shù)據(jù),第二數(shù)據(jù)元素轉(zhuǎn)換為第二預(yù)設(shè)字節(jié)的數(shù)據(jù),將該二元組對(duì)應(yīng)的散列值轉(zhuǎn)換為第三預(yù)設(shè)字節(jié)的數(shù)據(jù)。
數(shù)據(jù)拼接子模塊,用于將第一預(yù)設(shè)字節(jié)的數(shù)據(jù)、第二預(yù)設(shè)字節(jié)的數(shù)據(jù)和第三預(yù)設(shè)字節(jié)的數(shù)據(jù)按預(yù)設(shè)順序進(jìn)行拼接,獲得一條數(shù)據(jù)記錄。
本說(shuō)明書(shū)中各個(gè)實(shí)施例采用遞進(jìn)的方式描述,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處,各個(gè)實(shí)施例之間相同相似部分互相參見(jiàn)即可。
在本申請(qǐng)所提供的幾個(gè)實(shí)施例中,應(yīng)該理解到,所揭露的方法、裝置和設(shè)備,可以通過(guò)其它的方式實(shí)現(xiàn)。例如,以上所描述的裝置實(shí)施例僅僅是示意性的,例如,所述單元的劃分,僅僅為一種邏輯功能劃分,實(shí)際實(shí)現(xiàn)時(shí)可以有另外的劃分方式,例如多個(gè)單元或組件可以結(jié)合或者可以集成到另一個(gè)系統(tǒng),或一些特征可以忽略,或不執(zhí)行。另一點(diǎn),所顯示或討論的相互之間的耦合或直接耦合或通信連接可以是通過(guò)一些通信接口,裝置或單元的間接耦合或通信連接,可以是電性,機(jī)械或其它的形式。
所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部單元來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。另外,在本發(fā)明各個(gè)實(shí)施例中的各功能單元可以集成在一個(gè)處理單元中,也可以是各個(gè)單元單獨(dú)物理存在,也可以兩個(gè)或兩個(gè)以上單元集成在一個(gè)單元中。
所述功能如果以軟件功能單元的形式實(shí)現(xiàn)并作為獨(dú)立的產(chǎn)品銷售或使用時(shí),可以存儲(chǔ)在一個(gè)計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(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í)行本發(fā)明各個(gè)實(shí)施例所述方法的全部或部分步驟。而前述的存儲(chǔ)介質(zhì)包括:U盤(pán)、移動(dòng)硬盤(pán)、只讀存儲(chǔ)器(ROM,Read-Only Memory)、隨機(jī)存取存儲(chǔ)器(RAM,Random Access Memory)、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
對(duì)所公開(kāi)的實(shí)施例的上述說(shuō)明,使本領(lǐng)域?qū)I(yè)技術(shù)人員能夠?qū)崿F(xiàn)或使用本發(fā)明。對(duì)這些實(shí)施例的多種修改對(duì)本領(lǐng)域的專業(yè)技術(shù)人員來(lái)說(shuō)將是顯而易見(jiàn)的,本文中所定義的一般原理可以在不脫離本發(fā)明的精神或范圍的情況下,在其它實(shí)施例中實(shí)現(xiàn)。因此,本發(fā)明將不會(huì)被限制于本文所示的這些實(shí)施例,而是要符合與本文所公開(kāi)的原理和新穎特點(diǎn)相一致的最寬的范圍。