專利名稱::一種支持多屬性復(fù)合條件查詢的虛擬表索引機(jī)制及方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及計(jì)算機(jī)應(yīng)用
技術(shù)領(lǐng)域:
,尤其是一種針對(duì)多屬性復(fù)合條件查詢的虛擬表索引機(jī)制及方法。
背景技術(shù):
:隨著Internet上應(yīng)用的數(shù)據(jù)規(guī)模迅速增長(zhǎng),單一數(shù)據(jù)庫(kù)表往往無法支撐所有業(yè)務(wù)數(shù)據(jù),需要將大數(shù)據(jù)分成若干物理子表分塊存儲(chǔ)和管理,通過數(shù)據(jù)中間件將這些物理子表整合起來形成一張“容量無限”的虛擬表。而隨著網(wǎng)絡(luò)應(yīng)用處理和計(jì)算變得越來越復(fù)雜,一次針對(duì)虛擬表的數(shù)據(jù)查詢計(jì)算可能涉及到對(duì)多個(gè)分布數(shù)據(jù)源(塊)的即時(shí)訪問,這種大量基于分布數(shù)據(jù)源上的聯(lián)合查詢,由于受數(shù)據(jù)規(guī)模、查詢復(fù)雜度、傳輸帶寬等因素的影響,訪問性能常常是這類應(yīng)用的瓶頸;因此,針對(duì)這類應(yīng)用模式的查詢?nèi)绾卧谔摂M層構(gòu)建索引機(jī)制,快速定位子表同時(shí)避免不必要的子表查詢是解決查詢性能問題的關(guān)鍵之一。從技術(shù)方法層面,主要有兩種思路實(shí)現(xiàn)針對(duì)多個(gè)分布數(shù)據(jù)源(塊)查詢的索引機(jī)制,來提高訪問的性能。思路一是針對(duì)子表的存儲(chǔ)位置索引,方便快速定位數(shù)據(jù)塊子表的物理存儲(chǔ)位置。大規(guī)模數(shù)據(jù)的存儲(chǔ)與訪問需要對(duì)數(shù)據(jù)分片分塊的存儲(chǔ)和管理,此時(shí)建立每個(gè)數(shù)據(jù)塊的索引機(jī)制能方便請(qǐng)求快速定位到目標(biāo)數(shù)據(jù)源上。思路二是主鍵鍵值分段索引,一張子表會(huì)保存一個(gè)數(shù)據(jù)表里面按照主鍵鍵值的某段連續(xù)的數(shù)據(jù),從開始主鍵到結(jié)束主鍵,一張完整的表格是保存在多個(gè)物理子表中。這種機(jī)制對(duì)支持基于主鍵的簡(jiǎn)單邏輯運(yùn)算的查詢非常有效,能確保將查詢只施加到滿足相應(yīng)鍵值條件的數(shù)據(jù)子表上。但是不能支持多屬性查詢謂詞條件、相對(duì)復(fù)雜的運(yùn)算邏輯的查詢。如Bigtable這種順序表(OrderedTable)存儲(chǔ)模型采用了層次化的MetaData模型建立tablet表的索引,既支持存儲(chǔ)位置索引,又支持鍵值分段索引,但只能支持基于主鍵的區(qū)間查詢,不能支持多屬性的復(fù)合條件查詢,如關(guān)系數(shù)據(jù)庫(kù)的SQL查詢標(biāo)準(zhǔn)。
發(fā)明內(nèi)容本發(fā)明解決的技術(shù)問題之一在于提出構(gòu)建支持分布式復(fù)合條件查詢的虛擬表索引機(jī)制,解決當(dāng)前的存儲(chǔ)位置索引和鍵值索引不能支持多屬性條件、復(fù)雜運(yùn)算邏輯查詢的問題。本發(fā)明引用的虛擬表概念和技術(shù)是基于本發(fā)明的發(fā)明人的另一項(xiàng)專利ZL200810119858.4(名稱一種網(wǎng)絡(luò)系統(tǒng)及其管理方法);本發(fā)明所述虛擬表及其管理和使用方式均引用該專利。本發(fā)明解決的技術(shù)問題之二在于提出構(gòu)建支持分布式復(fù)合條件查詢的虛擬表索引方法,解決當(dāng)前的存儲(chǔ)位置索引和鍵值索引不能支持多屬性條件、復(fù)雜運(yùn)算邏輯查詢的問題。本發(fā)明解決上述技術(shù)問題之一的技術(shù)方案是所述的機(jī)制由三個(gè)關(guān)鍵部件索引管理器、條件分析器和預(yù)執(zhí)行引擎構(gòu)成;所述的索引管理器,管理虛擬表屬性的索引鍵值,支持虛擬表多個(gè)屬性的單個(gè)鍵值、區(qū)間鍵值的管理;所述的條件分析器,對(duì)施加在虛擬表上的查詢條件分解并對(duì)謂詞分析;依次對(duì)有索引的屬性按照SQL語(yǔ)法分析整個(gè)查詢條件,用真值true替換屏蔽掉含其他屬性的謂詞表達(dá)式后,只留下該屬性的查詢謂詞條件,以便判斷該屬性索引是否滿足此條件;此時(shí),如果某屬性的索引鍵值是區(qū)間,條件分析器進(jìn)一步通過該區(qū)間值再計(jì)算被真值替換后的查詢條件中關(guān)于該屬性的謂詞的真/假,并用布爾結(jié)果(true/false)替換該謂詞;如果該步驟無法計(jì)算,則表示直接返回需要對(duì)該虛擬表執(zhí)行查詢的推斷結(jié)果;所述的預(yù)執(zhí)行引擎,通過相應(yīng)屬性的索引鍵值判斷部分被真值表達(dá)式(true)和布爾結(jié)果替換后的查詢條件的真/假,確定相應(yīng)屬性的索引是否滿足查詢條件;如果不滿足,則直接返回不對(duì)該虛擬表執(zhí)行查詢的推斷結(jié)果;否則,繼續(xù)判斷其他屬性索引;一些特殊情況,默認(rèn)為滿足執(zhí)行條件;索引鍵值為區(qū)間值時(shí)只取開始和結(jié)束值。本發(fā)明解決上述技術(shù)問題之二的技術(shù)方案是在虛擬表上構(gòu)建針對(duì)多個(gè)屬性的索引鍵值;在執(zhí)行查詢時(shí),計(jì)算施加到該虛擬表的查詢條件;依據(jù)鍵值索引,預(yù)先針對(duì)各個(gè)屬性獨(dú)立判斷是否需要執(zhí)行該虛擬表映射的物理實(shí)體表,從而確保將查詢只施加到滿足相應(yīng)鍵值條件的子虛擬表上執(zhí)行。所述的預(yù)先確定哪些子表含有滿足該查詢條件的數(shù)據(jù)記錄是在虛擬層,通過在各個(gè)子表上基于子表的索引,預(yù)先判斷該子表的數(shù)據(jù)集合是否滿足查詢條件,只定位到滿足條件的子表進(jìn)行查詢;而對(duì)于無查詢過濾條件、未建立索引或者基于索引難于判斷等特例,直接對(duì)子表施加查詢。按照某個(gè)屬性鍵值建立類似B+樹的子表索引結(jié)構(gòu),B+樹的每個(gè)葉子節(jié)點(diǎn)代表一個(gè)子表;在葉子節(jié)點(diǎn)對(duì)子表建立I個(gè)或多個(gè)(其他)屬性的索引,索引值可以是單值和區(qū)間值。兩次對(duì)查詢條件的替換是通過對(duì)SQL查詢條件分析形成的語(yǔ)法樹,針對(duì)每個(gè)索引屬性,進(jìn)行單獨(dú)分析判斷。對(duì)區(qū)間內(nèi)的值通過代入?yún)^(qū)間值將謂詞表達(dá)式轉(zhuǎn)化成比較邏輯計(jì)算布爾結(jié)果。本發(fā)明的虛擬表索引機(jī)制不同于數(shù)據(jù)庫(kù)表的索引。數(shù)據(jù)庫(kù)表的索引是為了快速定位數(shù)據(jù)記錄,而虛擬表的索引是為快速確定帶有某個(gè)條件的查詢是否有必要施加在該虛擬表上,主要是為查詢調(diào)度,提高分布式查詢效率。由于一般數(shù)據(jù)分表都具有確定的規(guī)則性,常常將滿足一定條件數(shù)據(jù)存儲(chǔ)到一個(gè)子表中,比如鐵路每年的貨運(yùn)摘要數(shù)據(jù)是按照月份分開存儲(chǔ)到12張子表中,以方便同比分析。因此,虛擬表的索引是從子表的整體角度來確定索引的,而不是針對(duì)特定的一條記錄建索引,因此索引數(shù)量相對(duì)很少。本發(fā)明通過在虛擬層建立虛擬表多屬性的索引,在查詢分解時(shí),通過索引對(duì)查詢條件預(yù)判斷是否成立,從而確定是否需要定位和查詢物理子表。相對(duì)于“鍵-值”和順序表模型的數(shù)據(jù)庫(kù)系統(tǒng)只支持基于主鍵的區(qū)間查詢,本發(fā)明可以針對(duì)多屬性建立索引,支持對(duì)多屬性的復(fù)合條件查詢的判斷;支持多屬性查詢謂詞條件、相對(duì)復(fù)雜的運(yùn)算邏輯的查詢,如支持關(guān)系數(shù)據(jù)庫(kù)的SQL標(biāo)準(zhǔn)。本發(fā)明所述的物理子表概念是從元數(shù)據(jù)角度抽象定義的,不涉及對(duì)子表數(shù)據(jù)存儲(chǔ)和管理的物理系統(tǒng),因此也可以不加區(qū)別的稱為一種虛擬表。下面結(jié)合附圖對(duì)本發(fā)明進(jìn)一步說明圖1是本發(fā)明系統(tǒng)結(jié)構(gòu)圖2是本發(fā)明索引管理結(jié)構(gòu)圖3是本發(fā)明的核心算法圖。具體實(shí)施例方式本發(fā)明是在虛擬表上,可以構(gòu)建針對(duì)多個(gè)屬性的索引鍵值。在執(zhí)行查詢時(shí),計(jì)算施加到該虛擬表的查詢條件;依據(jù)鍵值索引,預(yù)先針對(duì)各個(gè)屬性獨(dú)立判斷是否需要執(zhí)行(該虛擬表映射的物理實(shí)體表),從而確保將查詢只施加到滿足相應(yīng)鍵值條件的子虛擬表上執(zhí)行。相對(duì)現(xiàn)有的技術(shù),本發(fā)明支持多屬性查詢謂詞條件、相對(duì)復(fù)雜的運(yùn)算邏輯的查詢,如支持關(guān)系數(shù)據(jù)庫(kù)的SQL標(biāo)準(zhǔn)。為實(shí)現(xiàn)上述目的,本發(fā)明一種支持分布式查詢的虛擬表索引的機(jī)制及方法,由三個(gè)關(guān)鍵部件構(gòu)成索引管理器、條件分析器、預(yù)執(zhí)行引擎。索引管理器管理虛擬表屬性的索引鍵值,支持虛擬表多個(gè)屬性的單個(gè)鍵值、區(qū)間鍵值的管理。條件分析器對(duì)施加在虛擬表上的查詢條件分解并對(duì)謂詞分析。依次對(duì)有索引的屬性,按照SQL語(yǔ)法分析整個(gè)查詢條件,用真值true替換屏蔽掉含其他屬性的謂詞表達(dá)式后,只留下該屬性的查詢謂詞條件,以便判斷該屬性索引是否滿足此條件。此時(shí),如果某屬性的索引鍵值是區(qū)間,條件分析器還需要通過該區(qū)間值,再計(jì)算被真值替換后的查詢條件中關(guān)于該屬性的謂詞的真/假,并用布爾結(jié)果(true/false)替換該謂詞,如果該步驟無法計(jì)算,則表示直接返回需要對(duì)該虛擬表執(zhí)行查詢的推斷結(jié)果。預(yù)執(zhí)行引擎通過相應(yīng)屬性的索引鍵值(區(qū)間值只取開始和結(jié)束值即可)判斷部分被真值表達(dá)式(true)和布爾結(jié)果替換后的查詢條件的真/假,確定相應(yīng)屬性的索引是否滿足查詢條件。如果不滿足,則直接返回不對(duì)該虛擬表執(zhí)行查詢的推斷結(jié)果;否則,繼續(xù)判斷其他屬性索引。一些特殊情況,為簡(jiǎn)化判斷,預(yù)執(zhí)行引擎默認(rèn)為滿足執(zhí)行條件,比如含多元謂詞表達(dá)式。如圖1所示,由于數(shù)據(jù)規(guī)模大導(dǎo)致分的數(shù)據(jù)子表較多,一次應(yīng)用的查詢請(qǐng)求,不能全部施加到各個(gè)子表執(zhí)行,需要預(yù)先確定哪些子表含有滿足該查詢條件的數(shù)據(jù)記錄(區(qū)間結(jié)果或者單條記錄)。在虛擬層,通過在各個(gè)子表上(T1,T2,…Tn)基于子表的索引,預(yù)先判斷該子表的數(shù)據(jù)集合是否滿足查詢條件,只定位到滿足條件的子表進(jìn)行查詢(Ti,…τρ。而對(duì)于一些特例(包括無查詢過濾條件、未建立索引或者基于索引難于判斷)的查詢,直接對(duì)子表施加查詢。如圖2所示,為快速定位子表,可以按照某個(gè)屬性鍵值建立類似B+樹的子表索引結(jié)構(gòu),B+樹的每個(gè)葉子節(jié)點(diǎn)代表一個(gè)子表。在葉子節(jié)點(diǎn)對(duì)子表建立I個(gè)或多個(gè)(其他)屬性的索引,索引值可以是單值和區(qū)間值。屬性索引值是從子表的整體角度定義的值區(qū)間,索引值區(qū)間范圍越小(少),越容易判斷。所以在虛擬層適合建立索引的列是基數(shù)高、選擇度低的列,而在數(shù)據(jù)庫(kù)層的索引為便于定位某條具體記錄正好相反(基數(shù)定義行數(shù)/唯一值數(shù);選擇度定義1/唯一值數(shù))??紤]到不同應(yīng)用場(chǎng)景中,索引值會(huì)隨著數(shù)據(jù)增加/修改/刪除、子表的拆分/合并等情況而變化,這種變化的頻度和復(fù)雜度在各種場(chǎng)景中不一致,本發(fā)明不強(qiáng)調(diào)索引值的一致性同步方法。可以通過人工建立索引、也可以在數(shù)據(jù)操作時(shí)實(shí)時(shí)維護(hù)索引。由于在GAV(GlobalAsView)/LAV(LocalAsView)這類傳統(tǒng)的數(shù)據(jù)集成應(yīng)用中,虛擬視圖的schema與物理數(shù)據(jù)源的schema不盡相同,是通過映射機(jī)制來確定。因此,針對(duì)每個(gè)子表都需要對(duì)查詢條件進(jìn)行重新分析,以將應(yīng)用的查詢映射到子表的查詢。而對(duì)于一般的“鍵-值”、順序表數(shù)據(jù)模型,由于各子表的屬性是一致的,不需要針對(duì)每個(gè)子表分別做條件分析。因此本發(fā)明的方法可以同時(shí)應(yīng)用到“鍵-值”、順序表、傳統(tǒng)關(guān)系數(shù)據(jù)庫(kù)集成領(lǐng)域。圖3表示了本發(fā)明的核心算法;核心算法中兩次對(duì)查詢條件的替換(Step2,Step3)是關(guān)鍵步驟。通過對(duì)SQL查詢條件分析形成的語(yǔ)法樹,算法針對(duì)每個(gè)索引屬性,進(jìn)行單獨(dú)分析判斷。假設(shè)鐵路貨運(yùn)明細(xì)表中,數(shù)據(jù)分表是按照月份(Month)和線路(Line)編號(hào)來分若干子表管理的(其索引如下表所述。當(dāng)子表太多時(shí),也可以按照?qǐng)D2以Line值建立索引樹)。__權(quán)利要求1.一種支持多屬性復(fù)合條件查詢的虛擬表索引機(jī)制,其特征在于所述的機(jī)制由三個(gè)關(guān)鍵部件索引管理器、條件分析器和預(yù)執(zhí)行引擎構(gòu)成;所述的索引管理器,管理虛擬表屬性的索引鍵值,支持虛擬表多個(gè)屬性的單個(gè)鍵值、區(qū)間鍵值的管理;所述的條件分析器,對(duì)施加在虛擬表上的查詢條件分解并對(duì)謂詞分析;依次對(duì)有索引的屬性按照SQL語(yǔ)法分析整個(gè)查詢條件,用真值true替換屏蔽掉含其他屬性的謂詞表達(dá)式后,只留下該屬性的查詢謂詞條件,以便判斷該屬性索引是否滿足此條件;此時(shí),如果某屬性的索引鍵值是區(qū)間,條件分析器進(jìn)一步通過該區(qū)間值再計(jì)算被真值替換后的查詢條件中關(guān)于該屬性的謂詞的真/假,并用布爾結(jié)果(true/false)替換該謂詞;如果該步驟無法計(jì)算,則表示直接返回需要對(duì)該虛擬表執(zhí)行查詢的推斷結(jié)果;所述的預(yù)執(zhí)行引擎,通過相應(yīng)屬性的索引鍵值判斷部分被真值表達(dá)式(true)和布爾結(jié)果替換后的查詢條件的真/假,確定相應(yīng)屬性的索引是否滿足查詢條件;如果不滿足,則直接返回不對(duì)該虛擬表執(zhí)行查詢的推斷結(jié)果;否則,繼續(xù)判斷其他屬性索引;一些特殊情況,默認(rèn)為滿足執(zhí)行條件;索引鍵值為區(qū)間值時(shí)只取開始和結(jié)束值。2.一種支持多屬性復(fù)合條件查詢的虛擬表索引方法,其特征在于在虛擬表上構(gòu)建針對(duì)多個(gè)屬性的索引鍵值;在執(zhí)行查詢時(shí),計(jì)算施加到該虛擬表的查詢條件;依據(jù)鍵值索引,預(yù)先針對(duì)各個(gè)屬性獨(dú)立判斷是否需要執(zhí)行該虛擬表映射的物理實(shí)體表,從而確保將查詢只施加到滿足相應(yīng)鍵值條件的子虛擬表上執(zhí)行。3.根據(jù)權(quán)利要求2所述的虛擬表索引方法,其特征在于所述的預(yù)先確定哪些子表含有滿足該查詢條件的數(shù)據(jù)記錄是在虛擬層,通過在各個(gè)子表上基于子表的索引,預(yù)先判斷該子表的數(shù)據(jù)集合是否滿足查詢條件,只定位到滿足條件的子表進(jìn)行查詢;而對(duì)于無查詢過濾條件、未建立索弓I或者基于索弓I難于判斷等特例,直接對(duì)子表施加查詢。4.根據(jù)權(quán)利要求2所述的虛擬表索引方法,其特征在于按照某個(gè)屬性鍵值建立類似B+樹的子表索引結(jié)構(gòu),B+樹的每個(gè)葉子節(jié)點(diǎn)代表一個(gè)子表;在葉子節(jié)點(diǎn)對(duì)子表建立I個(gè)或多個(gè)(其他)屬性的索引,索引值可以是單值和區(qū)間值。5.根據(jù)權(quán)利要求3所述的虛擬表索引方法;其特征在于按照某個(gè)屬性鍵值建立類似B+樹的子表索引結(jié)構(gòu),B+樹的每個(gè)葉子節(jié)點(diǎn)代表一個(gè)子表;在葉子節(jié)點(diǎn)對(duì)子表建立I個(gè)或多個(gè)(其他)屬性的索引,索引值可以是單值和區(qū)間值。6.根據(jù)權(quán)利要求2至5任一項(xiàng)所述的虛擬表索引方法,其特征在于兩次對(duì)查詢條件的替換是通過對(duì)SQL查詢條件分析形成的語(yǔ)法樹,針對(duì)每個(gè)索引屬性,進(jìn)行單獨(dú)分析判斷。7.根據(jù)權(quán)利要求2至5任一項(xiàng)所述的虛擬表索引方法,其特征在于對(duì)區(qū)間內(nèi)的值通過代入?yún)^(qū)間值將謂詞表達(dá)式轉(zhuǎn)化成比較邏輯計(jì)算布爾結(jié)果。8.根據(jù)權(quán)利要求6所述的虛擬表索引方法,其特征在于對(duì)區(qū)間內(nèi)的值通過代入?yún)^(qū)間值將謂詞表達(dá)式轉(zhuǎn)化成比較邏輯計(jì)算布爾結(jié)果。全文摘要本發(fā)明涉及計(jì)算機(jī)應(yīng)用
技術(shù)領(lǐng)域:
,尤其是一種針對(duì)多屬性復(fù)合條件查詢的虛擬表索引機(jī)制及方法。本發(fā)明由三個(gè)關(guān)鍵部件索引管理器、條件分析器和預(yù)執(zhí)行引擎構(gòu)成;本發(fā)ing在虛擬表上構(gòu)建針對(duì)多個(gè)屬性的索引鍵值;在執(zhí)行查詢時(shí),計(jì)算施加到該虛擬表的查詢條件;依據(jù)鍵值索引,預(yù)先針對(duì)各個(gè)屬性獨(dú)立判斷是否需要執(zhí)行該虛擬表映射的物理實(shí)體表,從而確保將查詢只施加到滿足相應(yīng)鍵值條件的子虛擬表上執(zhí)行。本發(fā)明有效解決了虛擬表多屬性的復(fù)合條件查詢;可以用于虛擬表索引中。文檔編號(hào)G06F17/30GK103049521SQ20121055394公開日2013年4月17日申請(qǐng)日期2012年12月19日優(yōu)先權(quán)日2012年12月19日發(fā)明者李曉林,謝毅,徐志偉申請(qǐng)人:廣東電子工業(yè)研究院有限公司