本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別是指一種面向商品篩選應(yīng)用的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)及查詢方法。
背景技術(shù):
目前隨著電子商務(wù)的飛速發(fā)展,商品數(shù)量越來越多,數(shù)據(jù)量呈爆炸性增長(zhǎng)。因此海量數(shù)據(jù)需要進(jìn)行高效存儲(chǔ)與計(jì)算才能跟上日益增長(zhǎng)的數(shù)據(jù)?,F(xiàn)有的商品數(shù)據(jù)處理通常采用基于Hadoop的海量數(shù)據(jù)處理模型來處理數(shù)據(jù),在Hadoop處理模型中采用HDFS(Hadoop分布式文件系統(tǒng))來存儲(chǔ)數(shù)據(jù)和MapReduce算法來進(jìn)行分布式計(jì)算。當(dāng)現(xiàn)有Hadoop模型對(duì)海量商品信息進(jìn)行分布式存儲(chǔ)時(shí),數(shù)據(jù)會(huì)隨機(jī)存儲(chǔ)在所有存儲(chǔ)節(jié)點(diǎn)中,數(shù)據(jù)存儲(chǔ)無規(guī)律。當(dāng)進(jìn)行分布式計(jì)算時(shí),現(xiàn)有模型需要分布式系統(tǒng)中各個(gè)節(jié)點(diǎn)全部并行工作,再將每個(gè)節(jié)點(diǎn)結(jié)果整合得到最終結(jié)果。這種算法中由于數(shù)據(jù)是隨機(jī)存儲(chǔ)的,因此必須所有節(jié)點(diǎn)都參與工作,這樣導(dǎo)致很多并未存儲(chǔ)相關(guān)數(shù)據(jù)的節(jié)點(diǎn)也都要參與工作。由于有些節(jié)點(diǎn)不含有結(jié)果信息,導(dǎo)致在查詢時(shí)數(shù)據(jù)節(jié)點(diǎn)會(huì)產(chǎn)生很多無效查詢,就增加了系統(tǒng)總體查詢次數(shù),降低系統(tǒng)吞吐率。
技術(shù)實(shí)現(xiàn)要素:
針對(duì)現(xiàn)有技術(shù)中存在的問題,本發(fā)明要解決的技術(shù)問題是提供一種能夠降低查詢次數(shù)并提高系統(tǒng)吞吐率的面向商品篩選應(yīng)用的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)及查詢方法。
為了解決上述問題,本發(fā)明實(shí)施例提出了一種面向商品篩選應(yīng)用的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)及查詢方法,包括:
步驟1、根據(jù)對(duì)數(shù)據(jù)表的歷史查詢數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,確定數(shù)據(jù)表的關(guān)鍵列集合,所述數(shù)據(jù)表的關(guān)鍵列集合包括N個(gè)高頻或核心字段,其中N>1;根據(jù)關(guān)鍵列的數(shù)據(jù)相關(guān)性將關(guān)鍵列的取值劃分為M個(gè)取值區(qū)間,其中M>1,同時(shí)將存儲(chǔ)節(jié)點(diǎn)也劃分成M個(gè)區(qū)域,并將M個(gè)關(guān)鍵列的取值區(qū)間劃分到上述的M個(gè)區(qū)域內(nèi),上述區(qū)域內(nèi)包括至少一個(gè)存儲(chǔ)節(jié)點(diǎn);;
步驟2、將所述數(shù)據(jù)表中的數(shù)據(jù)根據(jù)其關(guān)鍵列及取值劃分到對(duì)應(yīng)的存儲(chǔ)區(qū)域,并將該數(shù)據(jù)存儲(chǔ)到對(duì)應(yīng)的存儲(chǔ)區(qū)域;
步驟3、在系統(tǒng)處理查詢請(qǐng)求時(shí)接收到查詢條件時(shí),根據(jù)查詢條件中已有的關(guān)鍵列信息,經(jīng)過預(yù)處理階段,商品的屬性關(guān)鍵詞,可只針對(duì)部分存儲(chǔ)節(jié)點(diǎn)生成查詢?nèi)蝿?wù),減少無效查詢,提高向系統(tǒng)吞吐率。在預(yù)設(shè)的存儲(chǔ)區(qū)域中進(jìn)行查詢。
其中,所述步驟1中的將每個(gè)關(guān)鍵列的取值劃分為M個(gè)取值區(qū)間具體包括:基于取值范圍的數(shù)據(jù)劃分策略,基于哈希算法的數(shù)據(jù)劃分策略;
其中所述基于取值范圍的數(shù)據(jù)劃分策略主要適用于每個(gè)關(guān)鍵列為連續(xù)的取值。當(dāng)關(guān)鍵列的數(shù)據(jù)均為連續(xù)的值時(shí),該策略將每個(gè)關(guān)鍵列的取值劃分成不同范圍,并分配到M個(gè)存儲(chǔ)區(qū)域內(nèi)。
其中所述基于哈希算法的數(shù)據(jù)劃分策略主要適用于關(guān)鍵列為離散的取值,并且取值沒有一定的規(guī)律性。當(dāng)關(guān)鍵列的數(shù)據(jù)為不連續(xù)或不具有一定范圍的值時(shí),該策略根據(jù)哈希算法將關(guān)鍵列的值分配到各存儲(chǔ)區(qū)域內(nèi)。
其中,所述步驟2具體為:
步驟21、對(duì)于數(shù)據(jù)表中的任意記錄,獲取該條記錄中所有關(guān)鍵列的K(x,y)。K(x,y)表示某條數(shù)據(jù)記錄中第x關(guān)鍵列的取值所屬第y區(qū)域。并統(tǒng)計(jì)每個(gè)存儲(chǔ)區(qū)域內(nèi)y的數(shù)量;
步驟22、判斷是否在某個(gè)取值區(qū)間具有唯一最大值個(gè)y時(shí),如果是則直接將該記錄存儲(chǔ)到該存儲(chǔ)區(qū)域中;如果y不存在唯一最大值,則根據(jù)存儲(chǔ)負(fù)載均衡,將該記錄存儲(chǔ)到數(shù)據(jù)量較少的存儲(chǔ)區(qū)域中。
其中,所述步驟22中對(duì)于某條記錄,y值不存在唯一最大值時(shí),根據(jù)存儲(chǔ)負(fù)載均衡原則將該記錄存儲(chǔ)在數(shù)據(jù)量最小的存儲(chǔ)區(qū)域內(nèi)。
其中,所述步驟3具體包括:
步驟31、獲取查詢條件中所有關(guān)鍵列的K(x,y),并統(tǒng)計(jì)每個(gè)存儲(chǔ)區(qū)域內(nèi)y的數(shù)量;
步驟32、當(dāng)關(guān)鍵列總數(shù)N為偶數(shù)時(shí),在各存儲(chǔ)區(qū)域內(nèi)判斷,假如某存儲(chǔ)區(qū)域內(nèi)y的數(shù)量大于N/2,則直接查詢?cè)搮^(qū)域,否則查詢所有區(qū)域;當(dāng)關(guān)鍵列總數(shù)N為奇數(shù)時(shí),在各存儲(chǔ)區(qū)域內(nèi)判斷,假如某存儲(chǔ)區(qū)域內(nèi)y的數(shù)量大于(N-1)/2,則直接查詢?cè)搮^(qū)域,否則查詢所有區(qū)域。
本發(fā)明的上述技術(shù)方案的有益效果如下:本發(fā)明實(shí)施例能夠在數(shù)據(jù)存儲(chǔ)階段將數(shù)據(jù)進(jìn)行分區(qū)存儲(chǔ),而且在查詢階段可只針對(duì)部分節(jié)點(diǎn)生成有效查詢?nèi)蝿?wù)。這樣在不帶來額外存儲(chǔ)開銷的情況下,減少了系統(tǒng)中無效查詢次數(shù),有效提高系統(tǒng)吞吐率。
附圖說明
圖1為本發(fā)明實(shí)施例的分類存儲(chǔ)的原理圖;
圖2為現(xiàn)有數(shù)據(jù)查詢方法與本發(fā)明實(shí)施例的基于關(guān)鍵列的數(shù)據(jù)查詢方法的對(duì)比圖;
圖3為基于關(guān)鍵列的數(shù)據(jù)存儲(chǔ)原理圖;
圖4為基于關(guān)鍵列的數(shù)據(jù)存儲(chǔ)策略原理圖;
圖5為基于關(guān)鍵列的數(shù)據(jù)查詢策略原理圖。
具體實(shí)施方式
為使本發(fā)明要解決的技術(shù)問題、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合附圖及具體實(shí)施例進(jìn)行詳細(xì)描述。
本發(fā)明實(shí)施例提出了一種面向商品篩選應(yīng)用的分布式結(jié)構(gòu)化數(shù)據(jù)存儲(chǔ)及查詢方法,包括:
步驟1、根據(jù)對(duì)數(shù)據(jù)表的歷史查詢數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,確定數(shù)據(jù)表的關(guān)鍵列集合,所述數(shù)據(jù)表的關(guān)鍵列集合包括N個(gè)高頻或核心字段,其中N>1;根據(jù)關(guān)鍵列的數(shù)據(jù)相關(guān)性將關(guān)鍵列的取值劃分為M個(gè)取值區(qū)間,其中M>1,同時(shí)將存儲(chǔ)節(jié)點(diǎn)也劃分成M個(gè)區(qū)域,并將M個(gè)關(guān)鍵列的取值區(qū)間劃分到上述的M個(gè)區(qū)域內(nèi),上述區(qū)域內(nèi)包括至少一個(gè)存儲(chǔ)節(jié)點(diǎn);
步驟2、將所述數(shù)據(jù)表中的數(shù)據(jù)根據(jù)其關(guān)鍵列及取值劃分到對(duì)應(yīng)的存儲(chǔ)區(qū)域,并將該數(shù)據(jù)存儲(chǔ)到對(duì)應(yīng)的存儲(chǔ)區(qū)域;
步驟3、在系統(tǒng)處理查詢請(qǐng)求時(shí)接收到查詢條件時(shí),根據(jù)查詢條件中已有的關(guān)鍵列信息,經(jīng)過預(yù)處理階段,商品的屬性關(guān)鍵詞,可只針對(duì)部分存儲(chǔ)節(jié)點(diǎn)生成查詢?nèi)蝿?wù),減少無效查詢,提高向系統(tǒng)吞吐率。在預(yù)設(shè)的存儲(chǔ)區(qū)域中進(jìn)行查詢。
其中,所述步驟1中的將每個(gè)關(guān)鍵列的取值劃分為M個(gè)取值區(qū)間具體包括:基于取值范圍的數(shù)據(jù)劃分策略,基于哈希算法的數(shù)據(jù)劃分策略;
其中所述基于取值范圍的數(shù)據(jù)劃分策略主要適用于每個(gè)關(guān)鍵列為連續(xù)的取值。當(dāng)關(guān)鍵列的數(shù)據(jù)均為連續(xù)的值時(shí),該策略將每個(gè)關(guān)鍵列的取值劃分成不同范圍,并分配到M個(gè)存儲(chǔ)區(qū)域內(nèi)。
其中所述基于哈希算法的數(shù)據(jù)劃分策略主要適用于關(guān)鍵列為離散的取值,并且取值沒有一定的規(guī)律性。當(dāng)關(guān)鍵列的數(shù)據(jù)為不連續(xù)或不具有一定范圍的值時(shí),該策略根據(jù)哈希算法將關(guān)鍵列的值分配到各存儲(chǔ)區(qū)域內(nèi)。
其中,所述步驟2具體為:
步驟21、對(duì)于數(shù)據(jù)表中的任意記錄,獲取該條記錄中所有關(guān)鍵列的K(x,y)。K(x,y)表示某條數(shù)據(jù)記錄中第x關(guān)鍵列的取值所屬第y區(qū)域。并統(tǒng)計(jì)每個(gè)存儲(chǔ)區(qū)域內(nèi)y的數(shù)量;
步驟22、判斷是否在某個(gè)取值區(qū)間具有唯一最大值個(gè)y時(shí),如果是則直接將該記錄存儲(chǔ)到該存儲(chǔ)區(qū)域中;如果y不存在唯一最大值,則根據(jù)存儲(chǔ)負(fù)載均衡,將該記錄存儲(chǔ)到數(shù)據(jù)量較少的存儲(chǔ)區(qū)域中。
其中,所述步驟22中對(duì)于某條記錄,y值不存在唯一最大值時(shí),根據(jù)存儲(chǔ)負(fù)載均衡原則將該記錄存儲(chǔ)在數(shù)據(jù)量最小的存儲(chǔ)區(qū)域內(nèi)。
下面以一個(gè)具體的實(shí)例對(duì)本發(fā)明實(shí)施例進(jìn)行進(jìn)一步說明:
以筆記本電腦為例,經(jīng)過對(duì)歷史查詢記錄進(jìn)行分析可以確定,用戶針對(duì)筆記本電腦的查詢關(guān)鍵詞排名前三的為品牌、價(jià)格、尺寸;因此可以確定該商品數(shù)據(jù)表的關(guān)鍵列為品牌、價(jià)格、尺寸,即N=3,那么品牌為第一關(guān)鍵列,價(jià)格為第二關(guān)鍵列,尺寸為第三關(guān)鍵列。同時(shí),確定每個(gè)關(guān)鍵列的取值范圍:品牌的取值范圍為A品牌、B品牌、C品牌、D品牌;價(jià)格的取值范圍為[0,499],[500,999],[1000,1999],[2000,2999];尺寸的取值范圍為[9寸,11寸],[13寸,14寸],[15寸,17寸],[18寸,21寸]。當(dāng)然,取N=3、M=4只是一個(gè)舉例說明,且品牌、價(jià)格、尺寸這三個(gè)屬性關(guān)鍵詞也都是舉例說明,在實(shí)際使用時(shí)可以根據(jù)情況進(jìn)行調(diào)整。這樣就生成了M個(gè)存儲(chǔ)區(qū)域,即4個(gè)存儲(chǔ)區(qū)域。
如下表所示的:
當(dāng)然,這種列表的方式只是實(shí)現(xiàn)上述技術(shù)的一種方式,本發(fā)明實(shí)施例還可以采用其他方式,例如利用公式進(jìn)行統(tǒng)計(jì)的方式,在此不再贅述。
然后針對(duì)筆記本電腦商品數(shù)據(jù)表中所有商品數(shù)據(jù),對(duì)比上述各存儲(chǔ)區(qū)域的關(guān)鍵列取值范圍,根據(jù)該數(shù)據(jù)中的關(guān)鍵列取值來確定其存儲(chǔ)區(qū)域。確定原則是:對(duì)于所有商品數(shù)據(jù),提取出每個(gè)商品數(shù)據(jù)的所有關(guān)鍵列以及關(guān)鍵列對(duì)應(yīng)的取值范圍,表示為該條數(shù)據(jù)的K(x,y),即該商品數(shù)據(jù)的第x個(gè)關(guān)鍵列屬于第y個(gè)存儲(chǔ)區(qū)域;如果在某個(gè)取值區(qū)間具有y的唯一最大值時(shí),則直接將該商品存儲(chǔ)到該取值區(qū)域?qū)?yīng)的存儲(chǔ)區(qū)域中;如果不存在唯一最大值,則將該商品存儲(chǔ)到數(shù)據(jù)量最少的存儲(chǔ)區(qū)域中。
例如,一件筆記本電腦的屬性關(guān)鍵詞的取值分別為:A品牌、800元、13寸,則可知其對(duì)應(yīng)的K(x,y)分別為:K(1,1)、K(2,2)、K(3,2);即第一關(guān)鍵列的取值在存儲(chǔ)區(qū)域1、第二關(guān)鍵列的取值在存儲(chǔ)區(qū)域2、第三關(guān)鍵列的取值在存儲(chǔ)區(qū)域2;這樣該商品在存儲(chǔ)區(qū)域2對(duì)應(yīng)的y為最大值,因此該商品應(yīng)該存儲(chǔ)在存儲(chǔ)區(qū)域2對(duì)應(yīng)的存儲(chǔ)區(qū)域內(nèi)。
如果一個(gè)商品的的屬性關(guān)鍵詞的取值分別為:A品牌、800元、18寸,則可知其對(duì)應(yīng)的K(x,y)分別為:K(1,1)、K(2,2)、K(3,4);在第一關(guān)鍵列的取值在存儲(chǔ)區(qū)域1、第二關(guān)鍵列的取值在存儲(chǔ)區(qū)域2、第三關(guān)鍵列的取值屬于存儲(chǔ)區(qū)域4;這樣該商品在每一存儲(chǔ)區(qū)域都不具有唯一最大值的y時(shí),則該商品存儲(chǔ)在數(shù)據(jù)量最少的存儲(chǔ)區(qū)域中。又比如,在有2N個(gè)關(guān)鍵列時(shí),其中數(shù)據(jù)表中某條記錄有N個(gè)關(guān)鍵列都屬于存儲(chǔ)區(qū)域2內(nèi),另外N個(gè)關(guān)鍵列都屬于存儲(chǔ)區(qū)域3內(nèi),這樣也y不具有唯一最大值,則將該記錄存儲(chǔ)在根據(jù)存儲(chǔ)負(fù)載均衡存儲(chǔ)在所有存儲(chǔ)區(qū)域中數(shù)據(jù)量最少的一個(gè)存儲(chǔ)區(qū)域。
在進(jìn)行完數(shù)據(jù)存儲(chǔ)后,當(dāng)接收到用戶的查詢請(qǐng)求時(shí),查詢方法為:
假設(shè)關(guān)鍵列總數(shù)為N,存儲(chǔ)區(qū)域總數(shù)為M,某個(gè)查詢條件中含有n個(gè)屬性關(guān)鍵詞,n≤N。則基于屬性關(guān)鍵詞的數(shù)據(jù)查詢策略如下:
步驟31、獲取查詢條件中所有關(guān)鍵列的K(x,y),并統(tǒng)計(jì)每個(gè)存儲(chǔ)區(qū)域內(nèi)y的數(shù)量;
步驟32、當(dāng)關(guān)鍵列總數(shù)N為偶數(shù)時(shí),在各存儲(chǔ)區(qū)域內(nèi)判斷,假如某存儲(chǔ)區(qū)域內(nèi)y的數(shù)量大于N/2,則直接查詢?cè)搮^(qū)域,否則查詢所有區(qū)域;當(dāng)關(guān)鍵列總數(shù)N為奇數(shù)時(shí),在各存儲(chǔ)區(qū)域內(nèi)判斷,假如某存儲(chǔ)區(qū)域內(nèi)y的數(shù)量大于(N-1)/2,則直接查詢?cè)搮^(qū)域,否則查詢所有區(qū)域。
同樣以前面的例子來進(jìn)行說明,假如接收到的查詢條件為A品牌、800元、13寸,則可知其對(duì)應(yīng)的K(x,y)分別為:K(1,1)、K(2,2)、K(3,2);即第一關(guān)鍵列的取值在存儲(chǔ)區(qū)域1、第二關(guān)鍵列的取在存儲(chǔ)區(qū)域2、第三關(guān)鍵列的取值在存儲(chǔ)區(qū)域2;這樣該查詢請(qǐng)求中的關(guān)鍵列的y值在存儲(chǔ)區(qū)域2為唯一最大值,因此該查詢請(qǐng)求在存儲(chǔ)區(qū)域2對(duì)應(yīng)的存儲(chǔ)區(qū)域內(nèi)進(jìn)行查詢即可,不用查詢其他存儲(chǔ)區(qū)域。
而如果接收到的查詢條件為A品牌、800元、18寸,即第一關(guān)鍵列的取值在存儲(chǔ)區(qū)域1、第二關(guān)鍵列的取值在存儲(chǔ)區(qū)域2、第三關(guān)鍵列的取值在存儲(chǔ)區(qū)域4;這樣就說明該查詢請(qǐng)求中的關(guān)鍵列的y值在每一存儲(chǔ)區(qū)域都不具有唯一最大值,則該查詢請(qǐng)求在所有存儲(chǔ)區(qū)域中進(jìn)行查詢,即查詢所有存儲(chǔ)區(qū)域。
以下以一個(gè)具體實(shí)施例方式來舉例進(jìn)行說明:
該技術(shù)通過對(duì)表的歷史查詢進(jìn)行統(tǒng)計(jì),將數(shù)據(jù)表中的列按照查詢頻率降序排列,然后選取核心或者頻率較高的字段作為關(guān)鍵列。如圖1所示,在數(shù)據(jù)存儲(chǔ)階段,根據(jù)關(guān)鍵列的數(shù)據(jù)相關(guān)性將數(shù)據(jù)劃分到多個(gè)存儲(chǔ)區(qū)域內(nèi)。如圖2右側(cè)所示,在查詢處理階段,處理含有關(guān)鍵列的查詢時(shí),通過關(guān)鍵列預(yù)處理,可只針對(duì)部分節(jié)點(diǎn)生成查詢?nèi)蝿?wù),減少無效查詢。在數(shù)據(jù)存儲(chǔ)階段,根據(jù)具體應(yīng)用需求,該技術(shù)將全部數(shù)據(jù)節(jié)點(diǎn)劃分成多個(gè)存儲(chǔ)區(qū)域。如圖1所示,原數(shù)據(jù)經(jīng)過預(yù)處理,將具有相關(guān)屬性的數(shù)據(jù)存放在同一區(qū)域內(nèi)。舉例說明,在圖1中,假設(shè)關(guān)鍵列數(shù)量N為3,存儲(chǔ)區(qū)域數(shù)量M為3,原數(shù)據(jù)表共有9條記錄,經(jīng)過關(guān)鍵列預(yù)處理,將這9條記錄劃分到3個(gè)存儲(chǔ)區(qū)域內(nèi)。Area1是具有相同“形狀”的區(qū)域,Area2是具有相同“顏色”的區(qū)域,Area M是具有相同“底紋”的區(qū)域。在查詢處理階段,查詢請(qǐng)求通過關(guān)鍵列預(yù)處理可只對(duì)含有結(jié)果信息的區(qū)域產(chǎn)生查詢?nèi)蝿?wù)。圖2將現(xiàn)有模型查詢方式與關(guān)鍵列預(yù)處理查詢方式進(jìn)行了對(duì)比。當(dāng)現(xiàn)有模型處理查詢請(qǐng)求時(shí),所有節(jié)點(diǎn)進(jìn)行并行查詢,但是有的節(jié)點(diǎn)并不含有結(jié)果信息,從而會(huì)產(chǎn)生很多無效查詢?nèi)蝿?wù)。在基于關(guān)鍵列預(yù)處理模型中,當(dāng)處理含有關(guān)鍵列的查詢時(shí),經(jīng)過預(yù)處理階段,可只針對(duì)部分節(jié)點(diǎn)生成有效查詢?nèi)蝿?wù),減少了無效查詢。例如在圖2右側(cè)中,Area2存儲(chǔ)“顏色”數(shù)據(jù),當(dāng)進(jìn)行“灰度”數(shù)據(jù)查詢時(shí),現(xiàn)有模型會(huì)對(duì)所有節(jié)點(diǎn)進(jìn)行查詢,而查詢請(qǐng)求通過基于關(guān)鍵列的預(yù)處理,可只查詢Area2。
本發(fā)明創(chuàng)造的有益效果是,在不帶來額外存儲(chǔ)開銷的情況下,可減少分布式系統(tǒng)中各節(jié)點(diǎn)的總工作任務(wù)數(shù),有效提高系統(tǒng)吞吐率。
在該技術(shù)中,假設(shè)關(guān)鍵列數(shù)量為N,存儲(chǔ)區(qū)域數(shù)量為M,數(shù)據(jù)經(jīng)過關(guān)鍵列預(yù)處理后,再處理查詢請(qǐng)求時(shí),具有以下規(guī)律:
N為偶數(shù),查詢請(qǐng)求只要在任一存儲(chǔ)區(qū)域內(nèi)滿足大于N/2個(gè)關(guān)鍵列,則只需查詢一個(gè)存儲(chǔ)區(qū)域,否則查詢所有存儲(chǔ)區(qū)域;
N為奇數(shù),查詢請(qǐng)求只要在任一存儲(chǔ)區(qū)域內(nèi)滿足大于(N-1)/2個(gè)關(guān)鍵列,則只需查詢一個(gè)存儲(chǔ)區(qū)域,否則查詢所有存儲(chǔ)區(qū)域;
本技術(shù)假設(shè)在原數(shù)據(jù)表中,根據(jù)歷史查詢記錄的統(tǒng)計(jì),關(guān)鍵列數(shù)據(jù)為N,將數(shù)據(jù)節(jié)點(diǎn)劃分成M個(gè)存儲(chǔ)區(qū)域,其中N,M均不小于1。通過該設(shè)計(jì),數(shù)據(jù)表中任一記錄都將會(huì)分配到特定的區(qū)域。在圖3中,通過關(guān)鍵列預(yù)處理,將數(shù)據(jù)劃分到每個(gè)區(qū)域內(nèi)。每個(gè)區(qū)域內(nèi)數(shù)據(jù)都有N種可能性:滿足N個(gè)關(guān)鍵列的取值或取值范圍,滿足N-1個(gè)關(guān)鍵列的取值或取值范圍,滿足k個(gè)關(guān)鍵列的取值或取值范圍,滿足2個(gè)關(guān)鍵列的取值或取值范圍,滿足1個(gè)關(guān)鍵列的取值或取值范圍。
下面詳細(xì)介紹基于關(guān)鍵列預(yù)處理的數(shù)據(jù)存儲(chǔ)的實(shí)施方式。
首先,根據(jù)對(duì)數(shù)據(jù)表的歷史查詢進(jìn)行統(tǒng)計(jì)和具體應(yīng)用需求的分析,從而確定關(guān)鍵列及其數(shù)量N和存儲(chǔ)區(qū)域及其數(shù)量M,其中M、N均不小于1。例如對(duì)筆記本商品信息表進(jìn)行統(tǒng)計(jì)分析,該表經(jīng)常以品牌、價(jià)格和尺寸為查詢條件進(jìn)行查詢,那么關(guān)鍵列數(shù)量N為3,品牌為第1關(guān)鍵列,價(jià)格為第2關(guān)鍵列,尺寸為第3關(guān)鍵列。經(jīng)過調(diào)研發(fā)現(xiàn)商品價(jià)格需要分為3檔來進(jìn)行銷售,則存儲(chǔ)區(qū)域數(shù)M為3。
然后,將關(guān)鍵列的取值劃分到各存儲(chǔ)區(qū)域。根據(jù)不同的數(shù)據(jù)類型,具體劃分策略共有兩種:基于取值范圍的數(shù)據(jù)劃分策略和基于哈希算法的數(shù)據(jù)劃分策略。
基于取值范圍的數(shù)據(jù)劃分策略主要適用于關(guān)鍵列為連續(xù)的取值,并具有一定的取值范圍。當(dāng)關(guān)鍵列的數(shù)據(jù)均為連續(xù)的值時(shí),該策略將關(guān)鍵列的取值劃分成不同范圍,并分配到M個(gè)存儲(chǔ)區(qū)域內(nèi)。比如,數(shù)據(jù)表中價(jià)格是關(guān)鍵列,且價(jià)格的取值是連續(xù)的從0到999,存儲(chǔ)區(qū)域數(shù)M為2,那么價(jià)格在區(qū)域1的取值范圍是[0-499],在區(qū)域2的取值范圍是[500-999]。
基于哈希算法的數(shù)據(jù)劃分策略主要適用于關(guān)鍵列為離散的取值,并且取值沒有一定的規(guī)律性。當(dāng)關(guān)鍵列的數(shù)據(jù)為不連續(xù)或不具有一定范圍的值時(shí),該策略根據(jù)哈希算法將關(guān)鍵列的值分配到各存儲(chǔ)區(qū)域內(nèi)。比如,商品信息表中尺寸是關(guān)鍵列,且尺寸的取值為6、9、10、11、14和16,存儲(chǔ)區(qū)域數(shù)M為3,那么根據(jù)哈希算法,尺寸在區(qū)域1的取值范圍是[6,9],尺寸在區(qū)域2的取值范圍是[10,16],尺寸在區(qū)域3的取值范圍是[11,14]。
最后,將數(shù)據(jù)表中數(shù)據(jù)劃分到各個(gè)存儲(chǔ)區(qū)域內(nèi)。對(duì)于數(shù)據(jù)表中的任意記錄,判斷出所有關(guān)鍵列落點(diǎn)并將該記錄劃分至落點(diǎn)最多的區(qū)域,如圖4所示,具體策略如下:
(1)確定該條記錄中所有關(guān)鍵列的K(x,y)。K(x,y)表示某條數(shù)據(jù)記錄中第x關(guān)鍵列的取值所屬第y區(qū)域,例如某條記錄的K(1,2),那么表示該條記錄的第1關(guān)鍵列的取值屬于第2區(qū)域。
(2)統(tǒng)計(jì)每個(gè)區(qū)域內(nèi)y的數(shù)量,即統(tǒng)計(jì)出落在同一區(qū)域的關(guān)鍵列數(shù)量;
(3)若每個(gè)區(qū)域內(nèi)y的數(shù)量都不大于1,即表示該記錄中每個(gè)關(guān)鍵列都屬于不同區(qū)域,那么根據(jù)存儲(chǔ)負(fù)載均衡,將該條記錄存儲(chǔ)在數(shù)據(jù)量較少的存儲(chǔ)區(qū)域內(nèi);
(4)假如某個(gè)區(qū)域或某幾個(gè)區(qū)域內(nèi)y的數(shù)量大于1,即表示存在多個(gè)關(guān)鍵列屬于同一區(qū)域的情況。如果某區(qū)域內(nèi)y的數(shù)量存在唯一最大值即表示該區(qū)域內(nèi)關(guān)鍵列最多,那么該記錄就要?jiǎng)澐值皆搮^(qū)域;如果每個(gè)區(qū)域內(nèi)y的數(shù)量不存在唯一最大值,即表示多個(gè)區(qū)域內(nèi)y的數(shù)量相同且最多,那么根據(jù)存儲(chǔ)負(fù)載均衡,將該條記錄存儲(chǔ)在數(shù)據(jù)量較少的存儲(chǔ)區(qū)域。例如,關(guān)鍵列數(shù)量N=4,假設(shè)某個(gè)記錄的所有關(guān)鍵列K(x,y)取值為K(1,3),K(2,3),K(3,4),K(4,4),即第1、2關(guān)鍵列屬于區(qū)域3,第3、4關(guān)鍵列屬于區(qū)域4,區(qū)域3和區(qū)域4都有2個(gè)關(guān)鍵列,所有區(qū)域y的數(shù)量不存在唯一最大值,且區(qū)域3、4的關(guān)鍵列數(shù)量最多,那么根據(jù)存儲(chǔ)負(fù)載均衡,將該條記錄存儲(chǔ)在數(shù)據(jù)量較少的存儲(chǔ)區(qū)域內(nèi)。
在該實(shí)施方式中,如圖2右側(cè)所示,查詢請(qǐng)求經(jīng)過關(guān)鍵列預(yù)處理,可只對(duì)含有結(jié)果信息的存儲(chǔ)區(qū)域生成查詢?nèi)蝿?wù),減少無效查詢次數(shù),提高整體系統(tǒng)吞吐率。
假設(shè)關(guān)鍵列總數(shù)為N,存儲(chǔ)區(qū)域總數(shù)為M,某個(gè)查詢?nèi)蝿?wù)的查詢條件中含有n個(gè)關(guān)鍵列,n不大于N,如圖5所示,基于關(guān)鍵列的數(shù)據(jù)查詢策略如下:
假如N是偶數(shù),基于關(guān)鍵列的數(shù)據(jù)查詢策略如下:
(1)確定查詢條件中所有關(guān)鍵列的K(x,y);
(2)統(tǒng)計(jì)每個(gè)存儲(chǔ)區(qū)域內(nèi)y的數(shù)量,即統(tǒng)計(jì)出落在同一區(qū)域內(nèi)的關(guān)鍵列數(shù)量;
(3)在各存儲(chǔ)區(qū)域內(nèi)判斷,假如某存儲(chǔ)區(qū)域內(nèi)y的數(shù)量大于N/2,則直接查詢?cè)摯鎯?chǔ)區(qū)域,否則查詢所有存儲(chǔ)區(qū)域。
假如N是奇數(shù),基于關(guān)鍵列的數(shù)據(jù)查詢策略如下:
(1)確定查詢條件中所有關(guān)鍵列的K(x,y);
(2)統(tǒng)計(jì)每個(gè)區(qū)域內(nèi)y的數(shù)量,即統(tǒng)計(jì)出落在同一區(qū)域內(nèi)的關(guān)鍵列數(shù)量;
(3)在各存儲(chǔ)區(qū)域內(nèi)判斷,假如某存儲(chǔ)區(qū)域內(nèi)y的數(shù)量大于(N-1)/2,則直接查詢?cè)摯鎯?chǔ)區(qū)域,否則查詢所有存儲(chǔ)區(qū)域。
以上所述是本發(fā)明的優(yōu)選實(shí)施方式,應(yīng)當(dāng)指出,對(duì)于本技術(shù)領(lǐng)域的普通技術(shù)人員來說,在不脫離本發(fā)明所述原理的前提下,還可以作出若干改進(jìn)和潤(rùn)飾,這些改進(jìn)和潤(rùn)飾也應(yīng)視為本發(fā)明的保護(hù)范圍。