本申請涉及計算機(jī)領(lǐng)域,尤其涉及一種基于索引表的查詢的方法及設(shè)備。
背景技術(shù):
::隨著數(shù)據(jù)庫技術(shù)的發(fā)展和應(yīng)用,數(shù)據(jù)庫存儲的數(shù)據(jù)量與日俱增,同時快速、靈活地進(jìn)行大數(shù)據(jù)量的復(fù)雜查詢處理也成為新的需求。olap(on-lineanalyticalprocessing,聯(lián)機(jī)分析處理),專門用于支持復(fù)雜的分析操作,側(cè)重對決策人員和高層管理人員的決策支持。通常狀況下,olap用戶只需要查詢少數(shù)的幾個數(shù)據(jù)列,利用行式存儲會加載很多無用的數(shù)據(jù)列,導(dǎo)致查詢性能下降。分布式列式存儲的基本查詢方法首先從zookeeper中讀取元信息,進(jìn)而去集群中各個機(jī)器讀取所有的數(shù)據(jù)文件,進(jìn)而從每個數(shù)據(jù)文件中讀取滿足條件的記錄,此方式直接導(dǎo)致數(shù)據(jù)訪問量過大,影響了olap的查詢性能。申請內(nèi)容本申請的一個目的是提供一種基于索引表的查詢的方法及設(shè)備,解決現(xiàn)有技術(shù)中查詢數(shù)據(jù)時數(shù)據(jù)訪問量過大,影響聯(lián)機(jī)分析處理的查詢性能的問題。根據(jù)本申請的一個方面,提供了一種在主節(jié)點(diǎn)端基于索引表的查詢的方法,所述方法包括:根據(jù)用戶的查詢請求通過索引表的數(shù)據(jù)結(jié)構(gòu)查找所述索引表的索引列,并判斷所述索引列的值是否為確定值,得到判斷結(jié)果;根據(jù)所述判斷結(jié)果確定所述索引表的類型;通過所述索引表的類型確定所述索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn);根據(jù)所述索引表對應(yīng)的元信息將所確定的從節(jié)點(diǎn)上的索引文件的位置信息發(fā)送至所述從節(jié)點(diǎn),并根據(jù)所述數(shù)據(jù)表的元信息將所確定的從節(jié)點(diǎn)上的數(shù)據(jù)文件的位置信息發(fā)送至所述從節(jié)點(diǎn)。進(jìn)一步地,所述索引表的數(shù)據(jù)結(jié)構(gòu)中索引文件的結(jié)構(gòu)包括bplustree結(jié)構(gòu)。進(jìn)一步地,所述bplustree結(jié)構(gòu)包括葉子節(jié)點(diǎn)的鍵值和位置信息值,其中,所述鍵值根據(jù)所述索引表的索引列的值確定,所述位置信息值根據(jù)所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量確定。根據(jù)本申請另一個方面,提供了一種在從節(jié)點(diǎn)端基于索引表的查詢的方法,所述方法包括:根據(jù)主節(jié)點(diǎn)發(fā)送的索引文件的位置信息通過索引文件的數(shù)據(jù)結(jié)構(gòu)確定所述索引文件所在索引表中的索引列的值;根據(jù)所述索引列的值獲取所述索引表中所述索引文件的信息;根據(jù)所述主節(jié)點(diǎn)發(fā)送的數(shù)據(jù)表的元信息中數(shù)據(jù)文件的位置信息,判斷所述從節(jié)點(diǎn)中是否存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件,若是,則根據(jù)所述索引文件的信息獲取所述數(shù)據(jù)文件。進(jìn)一步地,所述索引文件的信息包括所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的鍵值及位置信息值時,根據(jù)所述索引列的值獲取所述索引表中所述索引文件的信息,包括:根據(jù)所述索引列的值確定所述索引文件的數(shù)據(jù)結(jié)構(gòu)中所述索引列的值對應(yīng)的鍵值;根據(jù)所述索引列的值對應(yīng)的鍵值獲取所述索引文件的數(shù)據(jù)結(jié)構(gòu)中位置信息值。進(jìn)一步地,所述索引表的數(shù)據(jù)結(jié)構(gòu)中的位置信息值,包括:所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量。根據(jù)本申請的又一方面,還提供了一種基于索引表的查詢的主節(jié)點(diǎn)設(shè)備,所述主節(jié)點(diǎn)設(shè)備包括:判斷裝置,用于根據(jù)用戶的查詢請求通過索引表的數(shù)據(jù)結(jié)構(gòu)查找所述索引表的索引列,并判斷所述索引列的值是否為確定值,得到判斷結(jié)果;確定類型裝置,用于根據(jù)所述判斷結(jié)果確定所述索引表的類型;定位裝置,用于通過所述索引表的類型確定所述索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn);發(fā)送裝置,用于根據(jù)所述索引表對應(yīng)的元信息將所確定的從節(jié)點(diǎn)上的索引文件的位置信息發(fā)送至所述從節(jié)點(diǎn),并根據(jù)所述數(shù)據(jù)表的元信息將所確定的從節(jié)點(diǎn)上的數(shù)據(jù)文件的位置信息發(fā)送至所述從節(jié)點(diǎn)。進(jìn)一步地,所述索引表的數(shù)據(jù)結(jié)構(gòu)中索引文件的結(jié)構(gòu)包括bplustree結(jié)構(gòu)。進(jìn)一步地,所述bplustree結(jié)構(gòu)包括葉子節(jié)點(diǎn)的鍵值和位置信息值,其中,所述鍵值根據(jù)所述索引表的索引列的值確定,所述位置信息值根據(jù)所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量確定。根據(jù)本申請再一個方面,還提供了一種基于索引表的查詢的從節(jié)點(diǎn)設(shè)備,所述從節(jié)點(diǎn)設(shè)備包括:確定裝置,用于根據(jù)主節(jié)點(diǎn)發(fā)送的索引文件的位置信息通過索引文件的數(shù)據(jù)結(jié)構(gòu)確定所述索引文件所在索引表中的索引列的值;獲取裝置,用于根據(jù)所述索引列的值獲取所述索引表中所述索引文件的信息;查詢裝置,用于根據(jù)所述主節(jié)點(diǎn)發(fā)送的數(shù)據(jù)表的元信息中數(shù)據(jù)文件的位置信息,判斷所述從節(jié)點(diǎn)中是否存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件,若是,則根據(jù)所述索引文件的信息獲取所述數(shù)據(jù)文件。進(jìn)一步地,所述索引文件的信息包括所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的鍵值及位置信息值時,所述獲取裝置用于:根據(jù)所述索引列的值確定所述索引文件的數(shù)據(jù)結(jié)構(gòu)中所述索引列的值對應(yīng)的鍵值;根據(jù)所述索引列的值對應(yīng)的鍵值獲取所述索引文件的數(shù)據(jù)結(jié)構(gòu)中位置信息值。進(jìn)一步地,所述索引表的數(shù)據(jù)結(jié)構(gòu)中的位置信息值,包括:所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量。與現(xiàn)有技術(shù)相比,本申請通過根據(jù)用戶的查詢請求通過索引表的數(shù)據(jù)結(jié)構(gòu)查找所述索引表的索引列,并判斷所述索引列的值是否為確定值,得到判斷結(jié)果;根據(jù)所述判斷結(jié)果確定所述索引表的類型;通過所述索引表的類型確定所述索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn);根據(jù)所述索引表對應(yīng)的元信息將所確定的從節(jié)點(diǎn)上的索引文件的位置信息發(fā)送至所述從節(jié)點(diǎn),并根據(jù)所述數(shù)據(jù)表的元信息將所確定的從節(jié)點(diǎn)上的數(shù)據(jù)文件的位置信息發(fā)送至所述從節(jié)點(diǎn)。在從節(jié)點(diǎn)端,根據(jù)主節(jié)點(diǎn)發(fā)送的索引文件的位置信息通過索引文件的數(shù)據(jù)結(jié)構(gòu)確定所述索引文件所在索引表中的索引列的值;根據(jù)所述索引列的值獲取所述索引表中所述索引文件的信息;根據(jù)所述主節(jié)點(diǎn)發(fā)送的數(shù)據(jù)表的元信息中數(shù)據(jù)文件的位置信息,判斷所述從節(jié)點(diǎn)中是否存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件,若是,則根據(jù)所述索引文件的信息獲取所述數(shù)據(jù)文件。從而通過根據(jù)查詢條件動態(tài)地選擇合適的全局索引表并快速確定索引文件位置,接著根據(jù)全局索引表的元信息將索引文件加載至內(nèi)存,結(jié)合過濾條件篩選出滿足條件的數(shù)據(jù)文件和偏移量。若數(shù)據(jù)文件存在于本地,則直接進(jìn)行后續(xù)的查詢處理,否則主節(jié)點(diǎn)將查詢?nèi)蝿?wù)和索引信息再次分配給數(shù)據(jù)文件所在的機(jī)器,最后,數(shù)據(jù)文件所在的機(jī)器將滿足條件的數(shù)據(jù)文件加載至內(nèi)存,根據(jù)偏移量從數(shù)據(jù)文件中讀取數(shù)據(jù),返回查詢結(jié)果。通過本申請的查詢方法,滿足用戶不同的篩選條件,有效地篩選出滿足條件的數(shù)據(jù)文件,大大減少了查詢時的數(shù)據(jù)讀取量,縮短查詢時間,較好地提高了olap的查詢效率。附圖說明通過閱讀參照以下附圖所作的對非限制性實(shí)施例所作的詳細(xì)描述,本申請的其它特征、目的和優(yōu)點(diǎn)將會變得更明顯:圖1示出根據(jù)本申請一個方面,提供了一種在主節(jié)點(diǎn)端基于索引表的查詢的方法流程示意圖;圖2示出本申請一實(shí)施例中的分布式系統(tǒng)框架圖;圖3示出本申請中的一實(shí)施例中數(shù)據(jù)源的查詢結(jié)構(gòu)化語句;圖4示出本申請中的一實(shí)施例的數(shù)據(jù)源;圖5示出本申請中的一實(shí)施例中創(chuàng)建索引表后索引文件的信息分配示意圖;圖6示出根據(jù)本申請另一個方面,提供了一種在從節(jié)點(diǎn)端基于索引表的查詢的方法流程示意圖;圖7示出根據(jù)本申請又一個方面,還提供了一種基于索引表的查詢的主節(jié)點(diǎn)設(shè)備的結(jié)構(gòu)示意圖;圖8示出根據(jù)本申請另一個方面,還提供了一種基于索引表的查詢的從節(jié)點(diǎn)設(shè)備的結(jié)構(gòu)示意圖。附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。具體實(shí)施方式下面結(jié)合附圖對本申請作進(jìn)一步詳細(xì)描述。在本申請一個典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個或多個處理器(cpu)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。內(nèi)存可能包括計算機(jī)可讀介質(zhì)中的非永久性存儲器,隨機(jī)存取存儲器(ram)和/或非易失性內(nèi)存等形式,如只讀存儲器(rom)或閃存(flashram)。內(nèi)存是計算機(jī)可讀介質(zhì)的示例。計算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動和非可移動媒體可以由任何方法或技術(shù)來實(shí)現(xiàn)信息存儲。信息可以是計算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計算機(jī)的存儲介質(zhì)的例子包括,但不限于相變內(nèi)存(pram)、靜態(tài)隨機(jī)存取存儲器(sram)、動態(tài)隨機(jī)存取存儲器(dram)、其他類型的隨機(jī)存取存儲器(ram)、只讀存儲器(rom)、電可擦除可編程只讀存儲器(eeprom)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲器(cd-rom)、數(shù)字多功能光盤(dvd)或其他光學(xué)存儲、磁盒式磁帶,磁帶磁盤存儲或其他磁性存儲設(shè)備或任何其他非傳輸介質(zhì),可用于存儲可以被計算設(shè)備訪問的信息。按照本文中的界定,計算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitorymedia),如調(diào)制的數(shù)據(jù)信號和載波。圖1示出根據(jù)本申請一個方面,提供了一種在主節(jié)點(diǎn)端基于索引表的查詢的方法流程示意圖,其中,所述方法包括:步驟s11~步驟s14,優(yōu)選地應(yīng)用于分布式系統(tǒng)中數(shù)據(jù)查詢,在步驟s11中,根據(jù)用戶的查詢請求通過索引表的數(shù)據(jù)結(jié)構(gòu)查找所述索引表的索引列,并判斷所述索引列的值是否為確定值,得到判斷結(jié)果;在本申請一實(shí)施例中,根據(jù)用戶的查詢條件以便判斷查找到的索引列的值是否為確定值,根據(jù)用戶的查詢請求確定索引表的索引列,索引表的數(shù)據(jù)結(jié)構(gòu)中包括了根據(jù)索引表的索引列的值確定的鍵值,得到判斷結(jié)果,從而為用戶提供動態(tài)選取相應(yīng)索引表的可能。本申請一實(shí)施例中,所述索引表的數(shù)據(jù)結(jié)構(gòu)中索引文件的結(jié)構(gòu)包括bplustree結(jié)構(gòu),在此,索引文件的結(jié)構(gòu)可以為bplustree結(jié)構(gòu),優(yōu)選地,在所述實(shí)施例中,bplustree結(jié)構(gòu)包括葉子節(jié)點(diǎn)的鍵值和位置信息值,bplustree結(jié)構(gòu)的葉子節(jié)點(diǎn)包含元組<鍵值,位置信息值>(<key,value>),bplustree結(jié)構(gòu)能夠有效地對輸入的索引列數(shù)據(jù)進(jìn)行排序,從而可以快速查詢索引列對應(yīng)的記錄的位置,快速響應(yīng)數(shù)據(jù)的查詢?nèi)蝿?wù)。其中,所述鍵值(key)根據(jù)所述索引表的索引列的值確定,所述位置信息值(value)根據(jù)所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量確定,key值為索引列的值,來源于數(shù)據(jù)文件,value為該索引列所在的數(shù)據(jù)文件信息和滿足條件的記錄在該索引文件中的偏移量。在步驟s12中,根據(jù)所述判斷結(jié)果確定所述索引表的類型;在此,根據(jù)判斷結(jié)果中索引列的值是否為確定值進(jìn)行動態(tài)選擇索引表的類型:若所述判斷結(jié)果為所述索引列的值為確定值,則確定所述索引表的類型為所述哈希類全局索引表,若所述判斷結(jié)果為所述索引列的值為非確定值,則確定所述索引表的類型為所述范圍類全局索引表。在本申請一實(shí)施例中,所述索引表的類型包括哈希類全局索引表和/或范圍類全局索引表。在此,哈希類與范圍類全局索引表的索引文件在集群中的分配策略略有不同。哈希類全局索引表是根據(jù)索引列的哈希值決定索引文件在分布式集群中所分布的機(jī)器,而范圍類全局索引表則是根據(jù)索引列值的范圍將索引文件分配到對應(yīng)的機(jī)器。因此,需要根據(jù)查詢條件動態(tài)的選擇索引表的類型,在確定索引表的類型后,根據(jù)各自的分配策略進(jìn)行確定索引文件所在的從節(jié)點(diǎn)。本申請一實(shí)施例中的分布式系統(tǒng)框架圖如圖2所示,包括客戶端(client)、主節(jié)點(diǎn)(master)、一個或若干從節(jié)點(diǎn)(slave)以及zookeeper,可將每個數(shù)據(jù)表中數(shù)據(jù)文件存儲于固態(tài)硬盤(ssd)中,在本申請實(shí)施例中,數(shù)據(jù)表的元信息存儲在zookeeper中,其中,所述zookeeper為性能分布式應(yīng)用的協(xié)調(diào)系統(tǒng)。接上述實(shí)施例,圖3所示的用戶針一數(shù)據(jù)源的查詢sql語句,如sql1:“select*fromtableawhereid=1”表示查詢sql1語句執(zhí)行的是查詢數(shù)據(jù)表a中id為1的數(shù)據(jù)列對應(yīng)的數(shù)據(jù),根據(jù)該sql1的查詢條件,可確定索引列的值為id的值1,是確定值,則選取哈希類全局索引表進(jìn)行查詢數(shù)據(jù);而sql3:“select*fromtableawhereid<5”表示查詢sql5語句執(zhí)行的是查詢數(shù)據(jù)表a中id小于5的數(shù)據(jù)列對應(yīng)的數(shù)據(jù),根據(jù)該sql5語句執(zhí)行的查詢條件,可確定索引列的值為小于5,不是確定值,因此針對該sql5的查詢語句需要選取與sql1不同的索引表,選擇范圍類全局索引表進(jìn)行查詢數(shù)據(jù)。在本申請一實(shí)施例中,當(dāng)所述索引表的類型為哈希類全局索引表時,在步驟s13之前,所述方法還包括步驟s12’,根據(jù)所述哈希類全局索引表的索引列的哈希值確定的分配規(guī)則,將所述哈希類全局索引表的索引文件的信息值分配至對應(yīng)的從節(jié)點(diǎn),其中,所述索引文件的信息包括所述索引文件的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值和位置信息值。在此,根據(jù)實(shí)際需求,確定需要創(chuàng)建全局索引的列,即從數(shù)據(jù)表中選取部分列作為索引列,進(jìn)而利用所選取的索引列創(chuàng)建分布式全局索引表對應(yīng)的元信息,其中,該元信息包括全局索引表所包含的所有索引文件在集群中各個機(jī)器硬盤上的位置信息。索引表被創(chuàng)建成功后可以用于分布式系統(tǒng)中數(shù)據(jù)的查詢,能夠滿足用戶只需要查詢少數(shù)的幾個數(shù)據(jù)列的需求的同時避免讀取所有的數(shù)據(jù)文件,大大減少訪問的數(shù)據(jù)量。具體地,在步驟s12’中,根據(jù)所述哈希類全局索引表的索引列的值及所述從節(jié)點(diǎn)的個數(shù)確定所述索引列的哈希值,將所述索引列的哈希值為i對應(yīng)的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值及位置信息值分配至第i+1個從節(jié)點(diǎn)的索引文件中,其中,i為自然數(shù),從而合理地將索引文件的信息分配至每個slave中,達(dá)到均勻分布的目的。需要說明的是,通過確定哈希值,從而確定了索引文件的信息被分配至的機(jī)器的信息(如被分配至機(jī)器1上),即確定了將哈希值對應(yīng)的<key,value>分配至的機(jī)器的信息。在本申請一實(shí)施例中,假設(shè)分布式集群中有1臺master,n臺slave。哈希類全局索引表通過對索引列求哈希值,而索引列的值為bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的key值,索引列對應(yīng)的數(shù)據(jù)文件的信息和索引列對應(yīng)記錄在數(shù)據(jù)文件中的偏移量為value。將key以及key的哈希值為i的記錄的位置信息value分配到第i+1臺slave的索引文件中,其中,哈希值可以根據(jù)索引列的值及分布式集群中的slave個數(shù)確定。在本申請一實(shí)施例中,當(dāng)所述索引表的類型為范圍類全局索引表時,在步驟s13之前,所述方法還包括:步驟s121和步驟s122,在步驟s121中,根據(jù)對所述索引列的值進(jìn)行采樣的采樣結(jié)果確定分配范圍區(qū)間,并記錄每個從節(jié)點(diǎn)以及其對應(yīng)的索引列的分配范圍區(qū)間;在步驟s122中,根據(jù)所述分配范圍區(qū)間確定的分配規(guī)則,將所述范圍類全局索引表的索引文件的信息分配至對應(yīng)的從節(jié)點(diǎn),其中,所述索引文件的信息包括所述索引文件的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值和位置信息值。具體地,在步驟s122中,將所述范圍類全局索引表的索引列的值與所述記錄的分配范圍區(qū)間進(jìn)行比較,確定所述索引列的值所在的分配范圍區(qū)間;根據(jù)所述索引列的值所在的分配范圍區(qū)間,將所述索引列的值對應(yīng)的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值及位置信息值分配至所述分配范圍區(qū)間對應(yīng)的從節(jié)點(diǎn)的索引文件。在本申請一實(shí)施例中,假設(shè)分布式集群中有1臺master,n臺slave。范圍類全局索引表通過對數(shù)據(jù)表文件的索引列的值進(jìn)行采樣,根據(jù)采樣結(jié)果設(shè)定n個范圍,使得每個范圍內(nèi)的數(shù)據(jù)量盡量均勻分布,并在master中記錄每臺機(jī)器以及其對應(yīng)的索引列的范圍區(qū)間。當(dāng)生成一個索引文件時,會將索引文件的索引列的值與master中的n個范圍進(jìn)行比較,根據(jù)所屬范圍區(qū)域?qū)⒃摿袑?yīng)的數(shù)據(jù)文件信息和在數(shù)據(jù)文件中的偏移量,即<key,value>更新到范圍區(qū)域相應(yīng)的slave的索引文件中。需要說明的是,在創(chuàng)建索引表時,索引文件的大小達(dá)到預(yù)設(shè)的索引文件大小閾值時,生成新的索引文件,master將所述新的索引文件的位置信息更新至索引表對應(yīng)的元信息中。在本申請一實(shí)施例中,如圖4所示的實(shí)例的數(shù)據(jù)源,該數(shù)據(jù)源共1000條記錄,包括地址標(biāo)識(id)、姓名(name)、年齡(age)、性別(sex)四列數(shù)據(jù)。將圖4中的數(shù)據(jù)作為數(shù)據(jù)源,假設(shè)分布式系統(tǒng)中有1臺master,3臺slave,將數(shù)據(jù)文件的最大范圍設(shè)定為25行,當(dāng)輸入的數(shù)據(jù)行數(shù)等于最大范圍25時,分布式列式存儲平臺將當(dāng)前的數(shù)據(jù)行作為一個數(shù)據(jù)文件,master根據(jù)負(fù)載均衡原則將其輸出到集群中某一機(jī)器的ssd中對應(yīng)的數(shù)據(jù)文件(filesegment),并更新數(shù)據(jù)表對應(yīng)的元信息,針對哈希類全局索引表,key為id的值,value為id對應(yīng)的數(shù)據(jù)文件的信息和id對應(yīng)記錄在數(shù)據(jù)文件中的偏移量信息。通過key值取哈希,將哈希結(jié)果為0、1、2的<key,value>元組分別分配到集群中的第1、2、3臺機(jī)器的哈希類索引表的索引文件(hashindexfilesegment)中,如圖5所示,當(dāng)id=1時,哈希結(jié)果為1,則將其<key,value>存儲到集群中的第2臺slave中,當(dāng)id=2時,哈希結(jié)果為2,則將其<key,value>存儲到集群中的第3臺slave中;當(dāng)id=3時,哈希結(jié)果為0,則將其<key,value>存儲到集群中的第1臺slave中,其中,{key|key%3=哈希值}是指key與slave的個數(shù)(這里個數(shù)為3)之間進(jìn)行取余,得到哈希值,這里key為id的值。當(dāng)創(chuàng)建范圍類全局索引表時,對數(shù)據(jù)源的key值采樣后的范圍劃分結(jié)果如圖5所示,范圍劃分原則應(yīng)盡量使得各個范圍區(qū)間內(nèi)的記錄數(shù)接近,范圍分區(qū)的結(jié)果包含[1,333]、[334,666]和[667,999]三個區(qū)間,并在master中存儲三臺slave各自對應(yīng)的范圍區(qū)域,當(dāng)數(shù)據(jù)塊中的索引列的值滿足某個范圍區(qū)間時,將其索引信息存儲到該范圍區(qū)間對應(yīng)的slave機(jī)器的范圍類索引表的數(shù)據(jù)文件(rangeindexfilesegment)中,以bplustree葉子節(jié)點(diǎn)的形式存在,如id=5,key值落在第一個范圍區(qū)間,則將其對應(yīng)的<key,value>信息存儲到第一臺機(jī)器的索引文件中。接上述實(shí)施例,在步驟s13中,通過所述索引表的類型確定所述索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn);在本申請一實(shí)施例中,確定索引表的類型后,根據(jù)各自索引表的類型對應(yīng)的分配策略計算出滿足條件的索引文件在分布式集群中的從節(jié)點(diǎn),具體實(shí)現(xiàn)方式可以通過以下實(shí)施例實(shí)現(xiàn):當(dāng)選擇的索引表為哈希類全局索引表時,通過所述哈希類全局索引表確定所述索引列的哈希值;根據(jù)所述哈希值確定所述哈希類全局索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn)。在此,當(dāng)查詢條件為索引列的確定值時,則選取哈希類全局索引表,計算出查詢條件中列值的哈希值j,則滿足條件的索引文件在分布式集群中的第j+1臺slave中。當(dāng)選擇的索引表為范圍類全局索引表時,通過所述范圍類全局索引表確定所述索引列的值所屬的分配范圍區(qū)間;根據(jù)確定的分配范圍區(qū)間確定所述范圍類全局索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn)。在此,若查詢條件為索引列的不確定值,則選取范圍類全局索引表,根據(jù)索引列所屬的范圍區(qū)域,確定滿足條件的索引文件分布在集群的相應(yīng)的slave中。在本申請一具體實(shí)施例中,根據(jù)圖3所示的查詢sql1和sql2,對應(yīng)key值均為確定值,則對其取哈希,得到id=1對應(yīng)哈希值為1,確定其索引文件位于集群的slave2中,而id=27對應(yīng)哈希值為0,確定其索引文件位于集群的slave1中。sql3中的key為不確定值,其查詢條件是id<5,恰好落在[1,333]區(qū)間內(nèi),隨即確定其索引文件位于slave1中。在確定了索引文件所在的機(jī)器后,兩種不同的全局索引表的后續(xù)查詢步驟相同。在步驟s14中,根據(jù)所述索引表對應(yīng)的元信息將所確定的從節(jié)點(diǎn)上的索引文件的位置信息發(fā)送至所述從節(jié)點(diǎn),并根據(jù)所述數(shù)據(jù)表的元信息將所確定的從節(jié)點(diǎn)上的數(shù)據(jù)文件的位置信息發(fā)送至所述從節(jié)點(diǎn)。在此,master根據(jù)相應(yīng)全局索引表的元信息獲取上述slave中所有索引文件的位置信息并發(fā)送給相應(yīng)的slave,同時master根據(jù)數(shù)據(jù)表的元信息將該slave中存儲的數(shù)據(jù)文件位置信息一并發(fā)送給slave;比如,針對sql1,根據(jù)全局索引表的元信息找到slave2中所有的索引文件位置信息將其發(fā)送給slave2,同時將slave2上存儲的所有數(shù)據(jù)文件的位置信息一并發(fā)送。需要說明的是,在步驟s14之后,所述還包括:步驟s15,接收所述從節(jié)點(diǎn)反饋的所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的位置信息值。在此,當(dāng)master發(fā)送數(shù)據(jù)文件信息給某一slave,而在該slave中不含有滿足索引文件的數(shù)據(jù)結(jié)構(gòu)中的位置信息值(value)的數(shù)據(jù)文件,則master會接收到由該slave反饋的索引文件的數(shù)據(jù)結(jié)構(gòu)中的value,接收所述從節(jié)點(diǎn)反饋的所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的位置信息值之后,執(zhí)行步驟s16,根據(jù)所述位置信息值從所述數(shù)據(jù)表的元信息重新確定所述數(shù)據(jù)文件所在的從節(jié)點(diǎn);將所述索引表包含的索引文件的位置信息及所述數(shù)據(jù)表包含的數(shù)據(jù)文件的位置信息重新發(fā)送至所重新確定的從節(jié)點(diǎn)。在此,由master根據(jù)數(shù)據(jù)文件的位置將任務(wù)重新分配給存儲該數(shù)據(jù)文件的其他slave,并將相應(yīng)的數(shù)據(jù)文件位置信息和value信息發(fā)送給其他slave。例如,根據(jù)master發(fā)送給該自身的數(shù)據(jù)文件信息,發(fā)現(xiàn)本地的數(shù)據(jù)文件中并未找到fs1的相關(guān)信息,則說明fs1在集群的其他slave中,此時,接收slave2所找到的<key,value>信息的反饋,matser通過查找數(shù)據(jù)表的元信息找到fs1位于slave1文件中,于是將<key,value>信息發(fā)送給slave1,并把之后的查詢?nèi)蝿?wù)轉(zhuǎn)交給slave1。圖6示出根據(jù)本申請另一個方面,提供了一種在從節(jié)點(diǎn)端基于索引表的查詢的方法流程示意圖,其中,所述方法包括:步驟s21~步驟s23,優(yōu)選地應(yīng)用于分布式系統(tǒng)中數(shù)據(jù)查詢,在步驟s21中,根據(jù)主節(jié)點(diǎn)發(fā)送的索引文件的位置信息通過所述索引文件的數(shù)據(jù)結(jié)構(gòu)確定所述索引文件所在索引表中的索引列的值;在本申請一實(shí)施例中,從節(jié)點(diǎn)slave根據(jù)接收到的索引文件的位置信息將索引文件加載至內(nèi)存,進(jìn)而根據(jù)索引文件的位置信息查找到索引文件所在索引表中的索引列的值,在步驟s22中,根據(jù)所述索引列的值獲取所述索引表中所述索引文件的信息;在此,所述索引文件的信息包括所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的鍵值及位置信息值時,根據(jù)所述索引列的值確定所述索引文件的數(shù)據(jù)結(jié)構(gòu)中所述索引列的值對應(yīng)的鍵值;根據(jù)所述索引列的值對應(yīng)的鍵值獲取所述索引文件的數(shù)據(jù)結(jié)構(gòu)中位置信息值。其中,所述索引表的數(shù)據(jù)結(jié)構(gòu)中的位置信息值包括:所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量。接上述實(shí)施例,由于索引文件以bplustree結(jié)構(gòu)存儲,其中該結(jié)構(gòu)的葉子節(jié)點(diǎn)中的鍵值為索引列的值,因此可以能夠快速地通過查詢條件中的索引列的值在索引文件中找到符合條件的鍵值key,并讀取其位置信息值(value),即該條記錄對應(yīng)的數(shù)據(jù)文件信息和偏移量,例如,slave2將本地的索引文件信息加載到內(nèi)存,在各個bplustree結(jié)構(gòu)中找到key=1的節(jié)點(diǎn),并讀取其value值,即fs1:12,表示id=1的記錄位于數(shù)據(jù)文件1(filesegment1)中,且偏移量為1和2。在步驟s23中,根據(jù)所述主節(jié)點(diǎn)發(fā)送的數(shù)據(jù)表的元信息中數(shù)據(jù)文件的位置信息,判斷所述從節(jié)點(diǎn)中是否存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件,若是,則根據(jù)所述索引文件的信息獲取所述數(shù)據(jù)文件。在本申請一實(shí)施例中,結(jié)合master發(fā)送給該slave的數(shù)據(jù)文件信息,若該slave中含有滿足value的數(shù)據(jù)文件,則直接對這些數(shù)據(jù)文件進(jìn)行查詢步驟,根據(jù)value中的偏移量從中讀取每個數(shù)據(jù)文件中滿足條件的數(shù)據(jù),返回查詢結(jié)果。優(yōu)選地,若所述從節(jié)點(diǎn)中不存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件,則將所述數(shù)據(jù)結(jié)構(gòu)中的位置信息值反饋至所述主節(jié)點(diǎn)。在本申請一實(shí)施例中,針對不在該slave中的數(shù)據(jù)文件,slave將其余的value信息傳遞給master,由master根據(jù)數(shù)據(jù)文件的位置將任務(wù)重新分配給存儲這些數(shù)據(jù)文件的其他slave,并將相應(yīng)的數(shù)據(jù)文件位置信息和value信息發(fā)送給其他slave。例如,根據(jù)master發(fā)送給該自身的數(shù)據(jù)文件信息,發(fā)現(xiàn)本地的數(shù)據(jù)文件中并未找到fs1的相關(guān)信息,則說明fs1在集群的其他slave中,此時,slave2將找到的<key,value>信息發(fā)送給master,則matser通過查找數(shù)據(jù)表的元信息找到fs1位于slave1文件中,于是將<key,value>信息發(fā)送給slave1,并把之后的查詢?nèi)蝿?wù)轉(zhuǎn)交給slave1。slave1將數(shù)據(jù)文件加載至內(nèi)存,根據(jù)value中的偏移量從中讀取每個數(shù)據(jù)文件中滿足條件的數(shù)據(jù),返回查詢結(jié)果,比如,slave1接收master發(fā)送的信息和任務(wù),將fs1加載至內(nèi)存,根據(jù)value中的偏移量1和2,讀取數(shù)據(jù)文件中偏移量為1和2的兩條記錄,返回查詢結(jié)果。需要說明的是,在本申請上述實(shí)施例中,當(dāng)從節(jié)點(diǎn)中不存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件時,從節(jié)點(diǎn)只將value傳遞給主節(jié)點(diǎn),主節(jié)點(diǎn)此時只是去數(shù)據(jù)表的元信息找到數(shù)據(jù)文件的從節(jié)點(diǎn)和數(shù)據(jù)文件的位置信息,將任務(wù)發(fā)送給相應(yīng)的從節(jié)點(diǎn),相應(yīng)的從節(jié)點(diǎn)直接根據(jù)數(shù)據(jù)文件的位置信息加載,并提取對應(yīng)偏移量的數(shù)據(jù),從而提高了數(shù)據(jù)查詢的效率。綜上所述,在查詢時,首先根據(jù)查詢條件動態(tài)地選擇合適的全局索引表并快速確定索引文件位置,接著根據(jù)全局索引表的元信息將索引文件加載至內(nèi)存,結(jié)合過濾條件篩選出滿足條件的數(shù)據(jù)文件和偏移量。若數(shù)據(jù)文件存在于本地,則直接進(jìn)行后續(xù)的查詢處理,否則主節(jié)點(diǎn)將查詢?nèi)蝿?wù)和索引信息再次分配給數(shù)據(jù)文件所在的機(jī)器,最后,數(shù)據(jù)文件所在的機(jī)器將滿足條件的數(shù)據(jù)文件加載至內(nèi)存,根據(jù)偏移量從數(shù)據(jù)文件中讀取數(shù)據(jù),返回查詢結(jié)果。本方法通過兩類分布式全局索引表的創(chuàng)建,滿足用戶不同的篩選條件,有效地篩選出滿足條件的數(shù)據(jù)文件,大大減少了查詢時的數(shù)據(jù)讀取量,縮短查詢時間,較好地提高了olap的查詢效率。圖7示出根據(jù)本申請又一個方面,還提供了一種基于索引表的查詢的主節(jié)點(diǎn)設(shè)備的結(jié)構(gòu)示意圖,其中,所述主節(jié)點(diǎn)設(shè)備包括:判斷裝置11、確定類型裝置12、定位裝置13和發(fā)送裝置14,優(yōu)選地應(yīng)用于分布式系統(tǒng)中數(shù)據(jù)查詢,判斷裝置11,用于根據(jù)用戶的查詢請求通過索引表的數(shù)據(jù)結(jié)構(gòu)查找所述索引表的索引列,并判斷所述索引列的值是否為確定值,得到判斷結(jié)果;在本申請一實(shí)施例中,根據(jù)用戶的查詢條件以便判斷查找到的索引列的值是否為確定值,根據(jù)用戶的查詢請求確定索引表的索引列,索引表的數(shù)據(jù)結(jié)構(gòu)中包括了根據(jù)索引表的索引列的值確定的鍵值,得到判斷結(jié)果,從而為用戶提供動態(tài)選取相應(yīng)索引表的可能。本申請一實(shí)施例中,所述索引表的數(shù)據(jù)結(jié)構(gòu)中索引文件的結(jié)構(gòu)包括bplustree結(jié)構(gòu),在此,索引文件的結(jié)構(gòu)可以為bplustree結(jié)構(gòu),優(yōu)選地,在所述實(shí)施例中,bplustree結(jié)構(gòu)包括葉子節(jié)點(diǎn)的鍵值和位置信息值,bplustree結(jié)構(gòu)的葉子節(jié)點(diǎn)包含元組<鍵值,位置信息值>(<key,value>),bplustree結(jié)構(gòu)能夠有效地對輸入的索引列數(shù)據(jù)進(jìn)行排序,從而可以快速查詢索引列對應(yīng)的記錄的位置,快速響應(yīng)數(shù)據(jù)的查詢?nèi)蝿?wù)。其中,所述鍵值(key)根據(jù)所述索引表的索引列的值確定,所述位置信息值(value)根據(jù)所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量確定,key值為索引列的值,來源于數(shù)據(jù)文件,value為該索引列所在的數(shù)據(jù)文件信息和滿足條件的記錄在該索引文件中的偏移量。確定類型裝置12,用于根據(jù)所述判斷結(jié)果確定所述索引表的類型;在此,根據(jù)判斷結(jié)果中索引列的值是否為確定值進(jìn)行動態(tài)選擇索引表的類型:若所述判斷結(jié)果為所述索引列的值為確定值,則確定所述索引表的類型為所述哈希類全局索引表,若所述判斷結(jié)果為所述索引列的值為非確定值,則確定所述索引表的類型為所述范圍類全局索引表。在本申請一實(shí)施例中,所述索引表的類型包括哈希類全局索引表和/或范圍類全局索引表。在此,哈希類與范圍類全局索引表的索引文件在集群中的分配策略略有不同。哈希類全局索引表是根據(jù)索引列的哈希值決定索引文件在分布式集群中所分布的機(jī)器,而范圍類全局索引表則是根據(jù)索引列值的范圍將索引文件分配到對應(yīng)的機(jī)器。因此,需要根據(jù)查詢條件動態(tài)的選擇索引表的類型,在確定索引表的類型后,根據(jù)各自的分配策略進(jìn)行確定索引文件所在的從節(jié)點(diǎn)。本申請一實(shí)施例中的分布式系統(tǒng)框架圖如圖2所示,包括客戶端(client)、主節(jié)點(diǎn)(master)、一個或若干從節(jié)點(diǎn)(slave)以及zookeeper,可將每個數(shù)據(jù)表中數(shù)據(jù)文件存儲于固態(tài)硬盤(ssd)中,在本申請實(shí)施例中,數(shù)據(jù)表的元信息存儲在zookeeper中,其中,所述zookeeper為性能分布式應(yīng)用的協(xié)調(diào)系統(tǒng)。接上述實(shí)施例,圖3所示的用戶針一數(shù)據(jù)源的查詢sql語句,如sql1:“select*fromtableawhereid=1”表示查詢sql1語句執(zhí)行的是查詢數(shù)據(jù)表a中id為1的數(shù)據(jù)列對應(yīng)的數(shù)據(jù),根據(jù)該sql1的查詢條件,可確定索引列的值為id的值1,是確定值,則選取哈希類全局索引表進(jìn)行查詢數(shù)據(jù);而sql3:“select*fromtableawhereid<5”表示查詢sql5語句執(zhí)行的是查詢數(shù)據(jù)表a中id小于5的數(shù)據(jù)列對應(yīng)的數(shù)據(jù),根據(jù)該sql5語句執(zhí)行的查詢條件,可確定索引列的值為小于5,不是確定值,因此針對該sql5的查詢語句需要選取與sql1不同的索引表,選擇范圍類全局索引表進(jìn)行查詢數(shù)據(jù)。在本申請一實(shí)施例中,當(dāng)所述索引表的類型為哈希類全局索引表時,所述主節(jié)點(diǎn)設(shè)備還包括分配裝置12’,用于根據(jù)所述哈希類全局索引表的索引列的哈希值確定的分配規(guī)則,將所述哈希類全局索引表的索引文件的信息值分配至對應(yīng)的從節(jié)點(diǎn),其中,所述索引文件的信息包括所述索引文件的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值和位置信息值。在此,根據(jù)實(shí)際需求,確定需要創(chuàng)建全局索引的列,即從數(shù)據(jù)表中選取部分列作為索引列,進(jìn)而利用所選取的索引列創(chuàng)建分布式全局索引表對應(yīng)的元信息,其中,該元信息包括全局索引表所包含的所有索引文件在集群中各個機(jī)器硬盤上的位置信息。索引表被創(chuàng)建成功后可以用于分布式系統(tǒng)中數(shù)據(jù)的查詢,能夠滿足用戶只需要查詢少數(shù)的幾個數(shù)據(jù)列的需求的同時避免讀取所有的數(shù)據(jù)文件,大大減少訪問的數(shù)據(jù)量。具體地,分配裝置12’,用于根據(jù)所述哈希類全局索引表的索引列的值及所述從節(jié)點(diǎn)的個數(shù)確定所述索引列的哈希值,將所述索引列的哈希值為i對應(yīng)的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值及位置信息值分配至第i+1個從節(jié)點(diǎn)的索引文件中,其中,i為自然數(shù),從而合理地將索引文件的信息分配至每個slave中,達(dá)到均勻分布的目的。需要說明的是,通過確定哈希值,從而確定了索引文件的信息被分配至的機(jī)器的信息(如被分配至機(jī)器1上),即確定了將哈希值對應(yīng)的<key,value>分配至的機(jī)器的信息。在本申請一實(shí)施例中,假設(shè)分布式集群中有1臺master,n臺slave。哈希類全局索引表通過對索引列求哈希值,而索引列的值為bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的key值,索引列對應(yīng)的數(shù)據(jù)文件的信息和索引列對應(yīng)記錄在數(shù)據(jù)文件中的偏移量為value。將key以及key的哈希值為i的記錄的位置信息value分配到第i+1臺slave的索引文件中,其中,哈希值可以根據(jù)索引列的值及分布式集群中的slave個數(shù)確定。在本申請一實(shí)施例中,當(dāng)所述索引表的類型為范圍類全局索引表時,所述主節(jié)點(diǎn)設(shè)備還包括:區(qū)間確定裝置121和信息分配裝置122,區(qū)間確定裝置121,用于根據(jù)對所述索引列的值進(jìn)行采樣的采樣結(jié)果確定分配范圍區(qū)間,并記錄每個從節(jié)點(diǎn)以及其對應(yīng)的索引列的分配范圍區(qū)間;信息分配裝置122,用于根據(jù)所述分配范圍區(qū)間確定的分配規(guī)則,將所述范圍類全局索引表的索引文件的信息分配至對應(yīng)的從節(jié)點(diǎn),其中,所述索引文件的信息包括所述索引文件的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值和位置信息值。具體地,信息分配裝置122,用于將所述范圍類全局索引表的索引列的值與所述記錄的分配范圍區(qū)間進(jìn)行比較,確定所述索引列的值所在的分配范圍區(qū)間;根據(jù)所述索引列的值所在的分配范圍區(qū)間,將所述索引列的值對應(yīng)的bplustree結(jié)構(gòu)中葉子節(jié)點(diǎn)的鍵值及位置信息值分配至所述分配范圍區(qū)間對應(yīng)的從節(jié)點(diǎn)的索引文件。在本申請一實(shí)施例中,假設(shè)分布式集群中有1臺master,n臺slave。范圍類全局索引表通過對數(shù)據(jù)表文件的索引列的值進(jìn)行采樣,根據(jù)采樣結(jié)果設(shè)定n個范圍,使得每個范圍內(nèi)的數(shù)據(jù)量盡量均勻分布,并在master中記錄每臺機(jī)器以及其對應(yīng)的索引列的范圍區(qū)間。當(dāng)生成一個索引文件時,會將索引文件的索引列的值與master中的n個范圍進(jìn)行比較,根據(jù)所屬范圍區(qū)域?qū)⒃摿袑?yīng)的數(shù)據(jù)文件信息和在數(shù)據(jù)文件中的偏移量,即<key,value>更新到范圍區(qū)域相應(yīng)的slave的索引文件中。需要說明的是,在創(chuàng)建索引表時,索引文件的大小達(dá)到預(yù)設(shè)的索引文件大小閾值時,生成新的索引文件,master將所述新的索引文件的位置信息更新至索引表對應(yīng)的元信息中。在本申請一實(shí)施例中,如圖4所示的實(shí)例的數(shù)據(jù)源,該數(shù)據(jù)源共1000條記錄,包括地址標(biāo)識(id)、姓名(name)、年齡(age)、性別(sex)四列數(shù)據(jù)。將圖4中的數(shù)據(jù)作為數(shù)據(jù)源,假設(shè)分布式系統(tǒng)中有1臺master,3臺slave,將數(shù)據(jù)文件的最大范圍設(shè)定為25行,當(dāng)輸入的數(shù)據(jù)行數(shù)等于最大范圍25時,分布式列式存儲平臺將當(dāng)前的數(shù)據(jù)行作為一個數(shù)據(jù)文件,master根據(jù)負(fù)載均衡原則將其輸出到集群中某一機(jī)器的ssd中對應(yīng)的數(shù)據(jù)文件(filesegment),并更新數(shù)據(jù)表對應(yīng)的元信息,針對哈希類全局索引表,key為id的值,value為id對應(yīng)的數(shù)據(jù)文件的信息和id對應(yīng)記錄在數(shù)據(jù)文件中的偏移量信息。通過key值取哈希,將哈希結(jié)果為0、1、2的<key,value>元組分別分配到集群中的第1、2、3臺機(jī)器的哈希類索引表的索引文件(hashindexfilesegment)中,如圖5所示,當(dāng)id=1時,哈希結(jié)果為1,則將其<key,value>存儲到集群中的第2臺slave中,當(dāng)id=2時,哈希結(jié)果為2,則將其<key,value>存儲到集群中的第3臺slave中;當(dāng)id=3時,哈希結(jié)果為0,則將其<key,value>存儲到集群中的第1臺slave中,其中,{key|key%3=哈希值}是指key與slave的個數(shù)(這里個數(shù)為3)之間進(jìn)行取余,得到哈希值,這里key為id的值。當(dāng)創(chuàng)建范圍類全局索引表時,對數(shù)據(jù)源的key值采樣后的范圍劃分結(jié)果如圖5所示,范圍劃分原則應(yīng)盡量使得各個范圍區(qū)間內(nèi)的記錄數(shù)接近,范圍分區(qū)的結(jié)果包含[1,333]、[334,666]和[667,999]三個區(qū)間,并在master中存儲三臺slave各自對應(yīng)的范圍區(qū)域,當(dāng)數(shù)據(jù)塊中的索引列的值滿足某個范圍區(qū)間時,將其索引信息存儲到該范圍區(qū)間對應(yīng)的slave機(jī)器的范圍類索引表的數(shù)據(jù)文件(rangeindexfilesegment)中,以bplustree葉子節(jié)點(diǎn)的形式存在,如id=5,key值落在第一個范圍區(qū)間,則將其對應(yīng)的<key,value>信息存儲到第一臺機(jī)器的索引文件中。接上述實(shí)施例,定位裝置13,用于通過所述索引表的類型確定所述索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn);在本申請一實(shí)施例中,確定索引表的類型后,根據(jù)各自索引表的類型對應(yīng)的分配策略計算出滿足條件的索引文件在分布式集群中的從節(jié)點(diǎn),具體實(shí)現(xiàn)方式可以通過以下實(shí)施例實(shí)現(xiàn):當(dāng)選擇的索引表為哈希類全局索引表時,通過所述哈希類全局索引表確定所述索引列的哈希值;根據(jù)所述哈希值確定所述哈希類全局索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn)。在此,當(dāng)查詢條件為索引列的確定值時,則選取哈希類全局索引表,計算出查詢條件中列值的哈希值j,則滿足條件的索引文件在分布式集群中的第j+1臺slave中。當(dāng)選擇的索引表為范圍類全局索引表時,通過所述范圍類全局索引表確定所述索引列的值所屬的分配范圍區(qū)間;根據(jù)確定的分配范圍區(qū)間確定所述范圍類全局索引表對應(yīng)的索引文件所在的從節(jié)點(diǎn)。在此,若查詢條件為索引列的不確定值,則選取范圍類全局索引表,根據(jù)索引列所屬的范圍區(qū)域,確定滿足條件的索引文件分布在集群的相應(yīng)的slave中。在本申請一具體實(shí)施例中,根據(jù)圖3所示的查詢sql1和sql2,對應(yīng)key值均為確定值,則對其取哈希,得到id=1對應(yīng)哈希值為1,確定其索引文件位于集群的slave2中,而id=27對應(yīng)哈希值為0,確定其索引文件位于集群的slave1中。sql3中的key為不確定值,其查詢條件是id<5,恰好落在[1,333]區(qū)間內(nèi),隨即確定其索引文件位于slave1中。在確定了索引文件所在的機(jī)器后,兩種不同的全局索引表的后續(xù)查詢步驟相同。發(fā)送裝置14,用于根據(jù)所述索引表對應(yīng)的元信息將所確定的從節(jié)點(diǎn)上的索引文件的位置信息發(fā)送至所述從節(jié)點(diǎn),并根據(jù)所述數(shù)據(jù)表的元信息將所確定的從節(jié)點(diǎn)上的數(shù)據(jù)文件的位置信息發(fā)送至所述從節(jié)點(diǎn)。在此,master根據(jù)相應(yīng)全局索引表的元信息獲取上述slave中所有索引文件的位置信息并發(fā)送給相應(yīng)的slave,同時master根據(jù)數(shù)據(jù)表的元信息將該slave中存儲的數(shù)據(jù)文件位置信息一并發(fā)送給slave;比如,針對sql1,根據(jù)全局索引表的元信息找到slave2中所有的索引文件位置信息將其發(fā)送給slave2,同時將slave2上存儲的所有數(shù)據(jù)文件的位置信息一并發(fā)送。需要說明的是,所述主節(jié)點(diǎn)設(shè)備還包括:接收裝置15,用于接收所述從節(jié)點(diǎn)反饋的所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的位置信息值。在此,當(dāng)master發(fā)送數(shù)據(jù)文件信息給某一slave,而在該slave中不含有滿足索引文件的數(shù)據(jù)結(jié)構(gòu)中的位置信息值(value)的數(shù)據(jù)文件,則master會接收到由該slave反饋的索引文件的數(shù)據(jù)結(jié)構(gòu)中的value,接收所述從節(jié)點(diǎn)反饋的所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的位置信息值之后,執(zhí)行步驟s16,根據(jù)所述位置信息值從所述數(shù)據(jù)表的元信息重新確定所述數(shù)據(jù)文件所在的從節(jié)點(diǎn);將所述索引表包含的索引文件的位置信息及所述數(shù)據(jù)表包含的數(shù)據(jù)文件的位置信息重新發(fā)送至所重新確定的從節(jié)點(diǎn)。在此,由master根據(jù)數(shù)據(jù)文件的位置將任務(wù)重新分配給存儲該數(shù)據(jù)文件的其他slave,并將相應(yīng)的數(shù)據(jù)文件位置信息和value信息發(fā)送給其他slave。例如,根據(jù)master發(fā)送給該自身的數(shù)據(jù)文件信息,發(fā)現(xiàn)本地的數(shù)據(jù)文件中并未找到fs1的相關(guān)信息,則說明fs1在集群的其他slave中,此時,接收slave2所找到的<key,value>信息的反饋,matser通過查找數(shù)據(jù)表的元信息找到fs1位于slave1文件中,于是將<key,value>信息發(fā)送給slave1,并把之后的查詢?nèi)蝿?wù)轉(zhuǎn)交給slave1。圖8示出根據(jù)本申請另一個方面,還提供了一種基于索引表的查詢的從節(jié)點(diǎn)設(shè)備的結(jié)構(gòu)示意圖,其中,所述從節(jié)點(diǎn)設(shè)備包括:確定裝置21、獲取裝置22和查詢裝置23,優(yōu)選地應(yīng)用于分布式系統(tǒng)中數(shù)據(jù)查詢,確定裝置21,用于根據(jù)主節(jié)點(diǎn)發(fā)送的索引文件的位置信息通過所述索引文件的數(shù)據(jù)結(jié)構(gòu)確定所述索引文件所在索引表中的索引列的值;在本申請一實(shí)施例中,從節(jié)點(diǎn)slave根據(jù)接收到的索引文件的位置信息將索引文件加載至內(nèi)存,進(jìn)而根據(jù)索引文件的位置信息查找到索引文件所在索引表中的索引列的值,獲取裝置22用于根據(jù)所述索引列的值獲取所述索引表中所述索引文件的信息;在此,所述索引文件的信息包括所述索引文件的數(shù)據(jù)結(jié)構(gòu)中的鍵值及位置信息值時,根據(jù)所述索引列的值確定所述索引文件的數(shù)據(jù)結(jié)構(gòu)中所述索引列的值對應(yīng)的鍵值;根據(jù)所述索引列的值對應(yīng)的鍵值獲取所述索引文件的數(shù)據(jù)結(jié)構(gòu)中位置信息值。其中,所述索引表的數(shù)據(jù)結(jié)構(gòu)中的位置信息值包括:所述索引列所屬數(shù)據(jù)文件的文件名及所述索引列所在的行在所述數(shù)據(jù)文件中的偏移量。接上述實(shí)施例,由于索引文件以bplustree結(jié)構(gòu)存儲,其中該結(jié)構(gòu)的葉子節(jié)點(diǎn)中的鍵值為索引列的值,因此可以能夠快速地通過查詢條件中的索引列的值在索引文件中找到符合條件的鍵值key,并讀取其位置信息值(value),即該條記錄對應(yīng)的數(shù)據(jù)文件信息和偏移量,例如,slave2將本地的索引文件信息加載到內(nèi)存,在各個bplustree結(jié)構(gòu)中找到key=1的節(jié)點(diǎn),并讀取其value值,即fs1:12,表示id=1的記錄位于數(shù)據(jù)文件1(filesegment1)中,且偏移量為1和2。查詢裝置23,用于根據(jù)所述主節(jié)點(diǎn)發(fā)送的數(shù)據(jù)表的元信息中數(shù)據(jù)文件的位置信息,判斷所述從節(jié)點(diǎn)中是否存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件,若是,則根據(jù)所述索引文件的信息獲取所述數(shù)據(jù)文件。在本申請一實(shí)施例中,結(jié)合master發(fā)送給該slave的數(shù)據(jù)文件信息,若該slave中含有滿足value的數(shù)據(jù)文件,則直接對這些數(shù)據(jù)文件進(jìn)行查詢步驟,根據(jù)value中的偏移量從中讀取每個數(shù)據(jù)文件中滿足條件的數(shù)據(jù),返回查詢結(jié)果。優(yōu)選地,所述從節(jié)點(diǎn)設(shè)備還包括反饋裝置24,用于若所述從節(jié)點(diǎn)中不存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件,則將所述數(shù)據(jù)結(jié)構(gòu)中的位置信息值反饋至所述主節(jié)點(diǎn)。在本申請一實(shí)施例中,針對不在該slave中的數(shù)據(jù)文件,slave將其余的value信息傳遞給master,由master根據(jù)數(shù)據(jù)文件的位置將任務(wù)重新分配給存儲這些數(shù)據(jù)文件的其他slave,并將相應(yīng)的數(shù)據(jù)文件位置信息和value信息發(fā)送給其他slave。例如,根據(jù)master發(fā)送給該自身的數(shù)據(jù)文件信息,發(fā)現(xiàn)本地的數(shù)據(jù)文件中并未找到fs1的相關(guān)信息,則說明fs1在集群的其他slave中,此時,slave2將找到的<key,value>信息發(fā)送給master,則matser通過查找數(shù)據(jù)表的元信息找到fs1位于slave1文件中,于是將<key,value>信息發(fā)送給slave1,并把之后的查詢?nèi)蝿?wù)轉(zhuǎn)交給slave1。slave1將數(shù)據(jù)文件加載至內(nèi)存,根據(jù)value中的偏移量從中讀取每個數(shù)據(jù)文件中滿足條件的數(shù)據(jù),返回查詢結(jié)果,比如,slave1接收master發(fā)送的信息和任務(wù),將fs1加載至內(nèi)存,根據(jù)value中的偏移量1和2,讀取數(shù)據(jù)文件中偏移量為1和2的兩條記錄,返回查詢結(jié)果。需要說明的是,在本申請上述實(shí)施例中,當(dāng)從節(jié)點(diǎn)中不存在用戶查詢請求對應(yīng)的數(shù)據(jù)文件時,從節(jié)點(diǎn)只將value傳遞給主節(jié)點(diǎn),主節(jié)點(diǎn)此時只是去數(shù)據(jù)表的元信息找到數(shù)據(jù)文件的從節(jié)點(diǎn)和數(shù)據(jù)文件的位置信息,將任務(wù)發(fā)送給相應(yīng)的從節(jié)點(diǎn),相應(yīng)的從節(jié)點(diǎn)直接根據(jù)數(shù)據(jù)文件的位置信息加載,并提取對應(yīng)偏移量的數(shù)據(jù),從而提高了數(shù)據(jù)查詢的效率。綜上所述,在查詢時,首先根據(jù)查詢條件動態(tài)地選擇合適的全局索引表并快速確定索引文件位置,接著根據(jù)全局索引表的元信息將索引文件加載至內(nèi)存,結(jié)合過濾條件篩選出滿足條件的數(shù)據(jù)文件和偏移量。若數(shù)據(jù)文件存在于本地,則直接進(jìn)行后續(xù)的查詢處理,否則主節(jié)點(diǎn)將查詢?nèi)蝿?wù)和索引信息再次分配給數(shù)據(jù)文件所在的機(jī)器,最后,數(shù)據(jù)文件所在的機(jī)器將滿足條件的數(shù)據(jù)文件加載至內(nèi)存,根據(jù)偏移量從數(shù)據(jù)文件中讀取數(shù)據(jù),返回查詢結(jié)果。本方法通過兩類分布式全局索引表的創(chuàng)建,滿足用戶不同的篩選條件,有效地篩選出滿足條件的數(shù)據(jù)文件,大大減少了查詢時的數(shù)據(jù)讀取量,縮短查詢時間,較好地提高了olap的查詢效率。顯然,本領(lǐng)域的技術(shù)人員可以對本申請進(jìn)行各種改動和變型而不脫離本申請的精神和范圍。這樣,倘若本申請的這些修改和變型屬于本申請權(quán)利要求及其等同技術(shù)的范圍之內(nèi),則本申請也意圖包含這些改動和變型在內(nèi)。需要注意的是,本申請可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(asic)、通用目的計算機(jī)或任何其他類似硬件設(shè)備來實(shí)現(xiàn)。在一個實(shí)施例中,本申請的軟件程序可以通過處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲到計算機(jī)可讀記錄介質(zhì)中,例如,ram存儲器,磁或光驅(qū)動器或軟磁盤及類似設(shè)備。另外,本申請的一些步驟或功能可采用硬件來實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個步驟或功能的電路。另外,本申請的一部分可被應(yīng)用為計算機(jī)程序產(chǎn)品,例如計算機(jī)程序指令,當(dāng)其被計算機(jī)執(zhí)行時,通過該計算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請的方法和/或技術(shù)方案。而調(diào)用本申請的方法的程序指令,可能被存儲在固定的或可移動的記錄介質(zhì)中,和/或通過廣播或其他信號承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲在根據(jù)所述程序指令運(yùn)行的計算機(jī)設(shè)備的工作存儲器中。在此,根據(jù)本申請的一個實(shí)施例包括一個裝置,該裝置包括用于存儲計算機(jī)程序指令的存儲器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計算機(jī)程序指令被該處理器執(zhí)行時,觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請的多個實(shí)施例的方法和/或技術(shù)方案。對于本領(lǐng)域技術(shù)人員而言,顯然本申請不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個單元或裝置也可以由一個單元或裝置通過軟件或者硬件來實(shí)現(xiàn)。第一,第二等詞語用來表示名稱,而并不表示任何特定的順序。當(dāng)前第1頁12當(dāng)前第1頁12