索引構(gòu)建方法、查詢方法及裝置的制造方法【專(zhuān)利說(shuō)明】索引構(gòu)建方法、查詢方法及裝置【
技術(shù)領(lǐng)域:
】[0001]本發(fā)明涉及數(shù)據(jù)庫(kù)
技術(shù)領(lǐng)域:
,尤其涉及一種索引構(gòu)建方法、查詢方法及裝置。【【
背景技術(shù):
】】[0002]在現(xiàn)有存儲(chǔ)系統(tǒng)中,一種加快數(shù)據(jù)查詢速度的常用而有效的方法是利用數(shù)據(jù)訪問(wèn)的局部性(DataLocality)來(lái)為常用的數(shù)據(jù)區(qū)間建立索引。然而,現(xiàn)有建立索引的方法都需要先驗(yàn)知識(shí),即知道那些屬性的數(shù)據(jù)訪問(wèn)頻率高才能建立。同時(shí),索引一旦建立完成,對(duì)索引進(jìn)行更新也是一項(xiàng)異常繁重的工作;同時(shí)還伴隨著索引與數(shù)據(jù)、索引與索引之間的一致性等問(wèn)題。這些問(wèn)題進(jìn)一步制約了索引加速數(shù)據(jù)訪問(wèn)的靈活性和可擴(kuò)展性,也提高了索引的使用成本。[0003]針對(duì)上述問(wèn)題,出現(xiàn)了自適應(yīng)索引技術(shù)(AdaptiveIndexing)。一種自適應(yīng)索引技術(shù)具體為:根據(jù)用戶的查詢序列,將數(shù)據(jù)分裂成不同的數(shù)據(jù)片,并通過(guò)交換排序來(lái)逐步形成分片有序(即索引),進(jìn)而為后續(xù)用戶的查詢提供加速條件。另一種自適應(yīng)索引技術(shù)具體為:將每個(gè)記錄數(shù)據(jù)視為孤立的數(shù)據(jù)點(diǎn),隨著用戶查詢請(qǐng)求的不斷到來(lái),符合用戶查詢需求的數(shù)據(jù)點(diǎn)自動(dòng)聚合(Merging)在一起,逐步形成分片有序(即索引),進(jìn)而為后續(xù)用戶的查詢提供加速條件。[0004]在上述自適應(yīng)索引技術(shù)中,均需要挪動(dòng)數(shù)據(jù)的物理位置。而在百TB級(jí)到PB級(jí)別的大型存儲(chǔ)系統(tǒng)中,數(shù)據(jù)被切成多個(gè)數(shù)據(jù)塊(DataBlock),分布在不同的存儲(chǔ)節(jié)點(diǎn)上;而且,為了容錯(cuò),每個(gè)數(shù)據(jù)塊都多個(gè)副本。在這樣的場(chǎng)景下移動(dòng)數(shù)據(jù)需要跨越分布在不同網(wǎng)絡(luò)區(qū)域的存儲(chǔ)節(jié)點(diǎn)才能完成,而且需要同時(shí)修改多個(gè)副本,實(shí)現(xiàn)代價(jià)極高,可行性較差?!尽?br/>發(fā)明內(nèi)容】】[0005]本發(fā)明的多個(gè)方面提供一種索引構(gòu)建方法、查詢方法及裝置,用以為大數(shù)據(jù)存儲(chǔ)系統(tǒng)創(chuàng)建索引,提高查詢效率。[0006]本發(fā)明的一方面,提供一種索引構(gòu)建方法,包括:[0007]獲取用于查詢第一數(shù)據(jù)文件的查詢請(qǐng)求;[0008]從所述查詢請(qǐng)求的查詢條件中提取至少一個(gè)查詢項(xiàng);[0009]獲取各查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息,所述數(shù)據(jù)行指示信息用于指示滿足所述數(shù)據(jù)行指示信息對(duì)應(yīng)查詢項(xiàng)的數(shù)據(jù)所在的數(shù)據(jù)行;[0010]將所述各查詢項(xiàng)以及所述各查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息對(duì)應(yīng)存儲(chǔ)在所述第一數(shù)據(jù)文件的索引文件。[0011]本發(fā)明的另一方面,提供一種查詢方法,包括:[0012]接收當(dāng)前用于查詢第一數(shù)據(jù)文件的查詢請(qǐng)求;[0013]從所述查詢請(qǐng)求的查詢條件中提取至少一個(gè)查詢項(xiàng);[0014]根據(jù)所述第一數(shù)據(jù)文件的索引文件中存儲(chǔ)的已有查詢項(xiàng)和所述已有查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息,對(duì)所述至少一個(gè)查詢項(xiàng)中能夠被改寫(xiě)的查詢項(xiàng)進(jìn)行改寫(xiě);所述數(shù)據(jù)行指示信息用于指示滿足所述已有查詢項(xiàng)的數(shù)據(jù)所在的數(shù)據(jù)行;[0015]根據(jù)所述至少一個(gè)查詢項(xiàng)中被改寫(xiě)的查詢項(xiàng)和未被改寫(xiě)的查詢項(xiàng),在所述第一數(shù)據(jù)文件中進(jìn)行查詢,以獲取待查詢的數(shù)據(jù)。[0016]本發(fā)明的又一方面,提供一種搜索構(gòu)建裝置,包括:[0017]請(qǐng)求獲取模塊,用于獲取用于查詢第一數(shù)據(jù)文件的查詢請(qǐng)求;[0018]提取模塊,用于從所述查詢請(qǐng)求的查詢條件中提取至少一個(gè)查詢項(xiàng);[0019]信息獲取模塊,用于獲取各查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息,所述數(shù)據(jù)行指示信息用于指示滿足所述數(shù)據(jù)行指示信息對(duì)應(yīng)查詢項(xiàng)的數(shù)據(jù)所在的數(shù)據(jù)行;[0020]索引構(gòu)建模塊,用于將所述各查詢項(xiàng)以及所述各查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息對(duì)應(yīng)存儲(chǔ)在所述第一數(shù)據(jù)文件的索引文件。[0021]本發(fā)明的又一方面,提供一種查詢裝置,包括:[0022]接收模塊,用于接收當(dāng)前用于查詢第一數(shù)據(jù)文件的查詢請(qǐng)求;[0023]提取模塊,用于從所述查詢請(qǐng)求的查詢條件中提取至少一個(gè)查詢項(xiàng);[0024]改寫(xiě)模塊,用于根據(jù)所述第一數(shù)據(jù)文件的索引文件中存儲(chǔ)的已有查詢項(xiàng)和所述已有查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息,對(duì)所述至少一個(gè)查詢項(xiàng)中能夠被改寫(xiě)的查詢項(xiàng)進(jìn)行改寫(xiě);所述數(shù)據(jù)行指示信息用于指示滿足所述已有查詢項(xiàng)的數(shù)據(jù)所在的數(shù)據(jù)行;[0025]查詢模塊,用于根據(jù)所述至少一個(gè)查詢項(xiàng)中被改寫(xiě)的查詢項(xiàng)和未被改寫(xiě)的查詢項(xiàng),在所述第一數(shù)據(jù)文件中進(jìn)行查詢,以獲取待查詢的數(shù)據(jù)。[0026]由上述技術(shù)方案可知,本發(fā)明從查詢請(qǐng)求的查詢條件中提取查詢項(xiàng),獲取用于指示滿足查詢項(xiàng)的數(shù)據(jù)所在數(shù)據(jù)行的數(shù)據(jù)行指示信息,進(jìn)而將查詢項(xiàng)及查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息作為該數(shù)據(jù)文件的索引存儲(chǔ)到索引文件中,該索引構(gòu)建過(guò)程不依賴(lài)于數(shù)據(jù)文件中的數(shù)據(jù)布局,因此不會(huì)破壞現(xiàn)有的數(shù)據(jù)布局,實(shí)現(xiàn)相對(duì)簡(jiǎn)單。另外,本發(fā)明在使用索引文件進(jìn)行數(shù)據(jù)查詢過(guò)程中,根據(jù)索引文件中存儲(chǔ)的已有查詢項(xiàng)和已有查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息,對(duì)當(dāng)前查詢條件中能夠被改寫(xiě)的查詢項(xiàng)進(jìn)行改寫(xiě),使得改寫(xiě)后的查詢條件變得相對(duì)簡(jiǎn)單,可以減少I(mǎi)O次數(shù),有利于提高查詢效率?!尽靖綀D說(shuō)明】】[0027]為了更清楚地說(shuō)明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。[0028]圖1為本發(fā)明一實(shí)施例提供的索引構(gòu)建方法的流程示意圖;[0029]圖2為本發(fā)明另一實(shí)施例提供的查詢方法的流程示意圖;[0030]圖3為本發(fā)明又一實(shí)施例提供的本發(fā)明與現(xiàn)有查詢方法的效果對(duì)比示意圖;[0031]圖4為本發(fā)明又一實(shí)施例提供的本發(fā)明與業(yè)務(wù)同類(lèi)系統(tǒng)的效果對(duì)比示意圖;[0032]圖5為本發(fā)明又一實(shí)施例提供的索引構(gòu)建裝置的結(jié)構(gòu)示意圖;[0033]圖6為本發(fā)明又一實(shí)施例提供的查詢裝置的結(jié)構(gòu)示意圖;[0034]圖7為本發(fā)明又一實(shí)施例提供的查詢裝置的結(jié)構(gòu)示意圖。【【具體實(shí)施方式】】[0035]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。[0036]圖1為本發(fā)明一實(shí)施例提供的索引構(gòu)建方法的流程示意圖。如圖1所示,該方法包括:[0037]101、獲取用于查詢第一數(shù)據(jù)文件的查詢請(qǐng)求。[0038]102、從查詢請(qǐng)求的查詢條件中提取至少一個(gè)查詢項(xiàng)。[0039]103、獲取各查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息,該數(shù)據(jù)行指示信息用于指示滿足該數(shù)據(jù)行指示信息對(duì)應(yīng)的查詢項(xiàng)的數(shù)據(jù)所在的數(shù)據(jù)行。[0040]104、將上述各查詢項(xiàng)以及各查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息對(duì)應(yīng)存儲(chǔ)在第一數(shù)據(jù)文件的索引文件中。[0041]本實(shí)施例提供的索引構(gòu)建方法可用于為任意數(shù)據(jù)文件構(gòu)建索引,為便于描述,本實(shí)施例將需要構(gòu)建索引的數(shù)據(jù)文件稱(chēng)為第一數(shù)據(jù)文件,這里的"第一"既沒(méi)有先后順序的概念,也沒(méi)有數(shù)量的概念。優(yōu)選的,第一數(shù)據(jù)文件為以列為單位的列式存儲(chǔ)文件。[0042]為加快對(duì)第一數(shù)據(jù)文件的查詢速度,本實(shí)施例提供一種為第一數(shù)據(jù)文件構(gòu)建索引的方法。為了在為第一數(shù)據(jù)文件構(gòu)建索引的過(guò)程中不影響第一數(shù)據(jù)文件中數(shù)據(jù)的布局,例如不移動(dòng)數(shù)據(jù)的物理位置,降低構(gòu)建索引的代價(jià),本實(shí)施例在構(gòu)建索引過(guò)程中不依賴(lài)于第一數(shù)據(jù)文件的數(shù)據(jù)布局,而是通過(guò)從查詢請(qǐng)求的查詢條件中提取查詢項(xiàng),獲取用于指示滿足查詢項(xiàng)的數(shù)據(jù)所在數(shù)據(jù)行的數(shù)據(jù)行指示信息,將查詢項(xiàng)和查詢項(xiàng)對(duì)應(yīng)的數(shù)據(jù)行指示信息作為索引形成第一數(shù)據(jù)文件的索引文件,使得索引構(gòu)建過(guò)程不依賴(lài)于第一數(shù)據(jù)文件的數(shù)據(jù)布局,克服現(xiàn)有自適應(yīng)索引技術(shù)存在的缺陷,降低索引構(gòu)建的代價(jià)。[0043]具體的,本實(shí)施例根據(jù)用戶行為特征與習(xí)慣,基于用戶的查詢請(qǐng)求構(gòu)建索引,因此,首先需要獲取用于查詢第一數(shù)據(jù)文件的查詢請(qǐng)求。[0044]索引構(gòu)建的目的是為了滿足用戶快速查詢數(shù)據(jù)的需求。不同需求層次的用戶,其對(duì)查詢速度的要求有所不同,這意味著,可以為不同需求層次的用戶構(gòu)建與其需求相適應(yīng)的索引。例如,如果一個(gè)用戶需要關(guān)注近期的數(shù)據(jù),而所構(gòu)建的索引未及時(shí)更新,則用戶將無(wú)法快速查詢到所需數(shù)據(jù)。構(gòu)建不同層次的索引,所需的作為原材料的查詢請(qǐng)求在時(shí)效性、規(guī)模上也有所不同。[0045]在一可選實(shí)施方式中,可以預(yù)先設(shè)定一時(shí)間段,記為第一指定時(shí)間段,例如可以是一個(gè)月、三個(gè)月甚至更長(zhǎng)時(shí)間??梢垣@取第一指定時(shí)間段內(nèi)不同用戶請(qǐng)求查詢第一數(shù)據(jù)文件的查詢請(qǐng)求,這些查詢請(qǐng)求可構(gòu)成以查詢序列。在該查詢序列中,包括歷史查詢請(qǐng)求,也包括當(dāng)前查詢請(qǐng)求。根據(jù)這些查詢請(qǐng)求可以采用離線方式進(jìn)行索引構(gòu)建,這種方式更加適用于查詢次數(shù)較少,對(duì)時(shí)效性和查詢速度要求均不是很高的應(yīng)用場(chǎng)景。[0046]在一可選實(shí)施方式中,可以預(yù)先設(shè)定一時(shí)間段,記為第二指定時(shí)間段,例如可以是一個(gè)周、三天或五天等較短時(shí)間??梢垣@取第二指定時(shí)間段內(nèi)不同用戶請(qǐng)求查詢第一數(shù)據(jù)文件的查詢請(qǐng)求,這些查詢請(qǐng)求可構(gòu)成以查詢序列。在該查詢序列中,包括歷史查詢請(qǐng)求,也包括當(dāng)前查詢請(qǐng)求。根據(jù)這些查詢請(qǐng)求可以采用離線方式進(jìn)行索引構(gòu)建,這種方式更加適用于查詢次數(shù)相對(duì)較多,對(duì)時(shí)效性和查詢速度要求較高的應(yīng)用場(chǎng)景。[0047]在一可選實(shí)施方式中,可以獲取當(dāng)前用戶請(qǐng)求查詢第一數(shù)據(jù)文件的查詢請(qǐng)求,根據(jù)這些查詢請(qǐng)求可以采用在線方式實(shí)時(shí)進(jìn)行索引構(gòu)建,這種方式更加適用于需要實(shí)時(shí)查詢數(shù)據(jù)的應(yīng)用場(chǎng)景。[0048]另外,根據(jù)第一數(shù)據(jù)文件面向用戶的不同,上述查詢請(qǐng)求可以來(lái)自不同用戶,也可以來(lái)自同一用戶。[0049]無(wú)論是哪種需求層次,在獲取查詢請(qǐng)求之后,可以從查詢請(qǐng)求的查詢條件中提取至少一個(gè)查詢項(xiàng)。在本實(shí)施例中,查詢請(qǐng)求一般是由各種數(shù)據(jù)庫(kù)語(yǔ)言編寫(xiě)的數(shù)據(jù)庫(kù)語(yǔ)句,以SQL為例,一種查詢請(qǐng)求可以是類(lèi)似select….fromtablewhere···.的結(jié)構(gòu)。其中,select后面的"......"表示待查詢數(shù)據(jù),而where后面的"......"表示查詢條件。例如,select···.fromtablewhereC2>0這一查詢請(qǐng)求中的查詢條件為C2>0,表示需要獲取第二列數(shù)據(jù)大于0的數(shù)據(jù)。[0050]-般情況下,查詢條件會(huì)由邏輯運(yùn)算符連接多個(gè)簡(jiǎn)單的條件構(gòu)成。常見(jiàn)的邏輯運(yùn)算符包括:and(邏輯與)、or(邏輯或)、not(邏輯非)等。例如,假設(shè)一查詢請(qǐng)求為:selectcount(*)asresultfromtablewhereClcontains'A'andC2>0,其中,查詢條件為:C1contains'A'andC2>0,邏輯運(yùn)算符為"and"。[0051]基于上述,一種提取查詢項(xiàng)的方式可以是:將查詢條件中的邏輯運(yùn)算符作為分隔符,提取查詢條件中被分隔符分割出的各部分作為查詢項(xiàng)。例如,以上述查詢條件為例,則可以將"and"作為當(dāng)前第1頁(yè)1 2 3 4 5