一種內(nèi)存-閃存混合存儲(chǔ)模式下的olap查詢優(yōu)化方法
【專利摘要】本發(fā)明涉及一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其包括:OLAP存儲(chǔ)采用flash-aware的存儲(chǔ)模型,在相對(duì)較小的DRAM和相對(duì)較大flash存儲(chǔ)之間按數(shù)據(jù)訪問(wèn)的局部性進(jìn)行劃分,在異構(gòu)的兩級(jí)內(nèi)存上進(jìn)行存儲(chǔ)優(yōu)化;內(nèi)存OLAP采用數(shù)組存儲(chǔ),每個(gè)屬性列存儲(chǔ)于連續(xù)的數(shù)組單元中,將傳統(tǒng)的連接操作簡(jiǎn)化為數(shù)組下標(biāo)訪問(wèn),進(jìn)行AIR算法的OLAP查詢處理;其中AIR為數(shù)組下標(biāo)訪問(wèn);將基于數(shù)組存儲(chǔ)和AIR算法的OLAP查詢處理分解為三個(gè)順序的數(shù)據(jù)訪問(wèn)過(guò)程;通過(guò)選擇向量訪問(wèn)flash存儲(chǔ)度量列指定度量值;采用在基于關(guān)鍵字的位圖連接索引的基礎(chǔ)上在DRAM-flash兩級(jí)存儲(chǔ)中優(yōu)化存儲(chǔ)K個(gè)關(guān)鍵字連接位圖,形成二級(jí)連接位圖索引結(jié)構(gòu)。本發(fā)明能提高內(nèi)存存儲(chǔ)性價(jià)比、內(nèi)存和CPU使用效率以及數(shù)據(jù)存儲(chǔ)效率,能廣泛應(yīng)用于通用OLAP應(yīng)用場(chǎng)景中。
【專利說(shuō)明】—種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種數(shù)據(jù)庫(kù)領(lǐng)域中存儲(chǔ)優(yōu)化和OLAP(聯(lián)機(jī)分析處理)查詢優(yōu)化方法,特別是關(guān)于一種適用于內(nèi)存數(shù)據(jù)庫(kù)一體機(jī)平臺(tái)的以DRAM(動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器)和Flash (閃存)兩級(jí)存儲(chǔ)為基礎(chǔ)的內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法。
【背景技術(shù)】
[0002]內(nèi)存分析處理(內(nèi)存0LAP)是大數(shù)據(jù)實(shí)時(shí)分析處理的重要技術(shù),在大內(nèi)存和多核處理器并行處理能力的支持下,內(nèi)存OLAP具有優(yōu)異的實(shí)時(shí)分析處理能力,但相對(duì)于其他存儲(chǔ)設(shè)備,如flash、磁盤(pán)等,內(nèi)存仍然是非常昂貴的存儲(chǔ)介質(zhì),而且在存儲(chǔ)能耗上比f(wàn)lash高一個(gè)數(shù)量級(jí)(DRAM:?100mW/GB,NAND flash:l-10mff/GB),內(nèi)存OLAP分析處理需要以大數(shù)據(jù)為基礎(chǔ),內(nèi)存分析處理的硬件成本很高。PCIe Flash Card作為一種大容量(幾百GB至TB級(jí)存儲(chǔ)容量)高速存儲(chǔ)技術(shù),已經(jīng)被大量應(yīng)用于高性能數(shù)據(jù)庫(kù)領(lǐng)域,如Oracle ExadataX3內(nèi)存數(shù)據(jù)庫(kù)一體機(jī)配置了大容量的高速閃存卡,并提供Smart Flash Cache緩存熱數(shù)據(jù),通過(guò)數(shù)據(jù)庫(kù)邏輯優(yōu)化緩存算法并能夠基于表指定緩存優(yōu)化策略。高速閃存卡的應(yīng)用一方面為昂貴的內(nèi)存存儲(chǔ)提供了廉價(jià)的二級(jí)存儲(chǔ)擴(kuò)展能力,但另一方面高速閃存卡主要用作數(shù)據(jù)庫(kù)在flash上的擴(kuò)展緩存,擴(kuò)展了內(nèi)存緩存(buffer)的容量,但并沒(méi)有與內(nèi)存OLAP的存儲(chǔ)優(yōu)化及查詢處理優(yōu)化技術(shù)結(jié)合起來(lái),并沒(méi)有在OLAP算法層面實(shí)現(xiàn)flash-aware的OLAP優(yōu)化技術(shù)。
[0003]當(dāng)前的分析型內(nèi)存數(shù)據(jù)庫(kù)主要以DRAM為主存儲(chǔ)設(shè)備,flash用作替代磁盤(pán)的后備存儲(chǔ)或磁盤(pán)緩存,還沒(méi)有將flash納入內(nèi)存的OLAP算法設(shè)計(jì)中。如何將內(nèi)存和大容量flash所形成的二級(jí)存儲(chǔ)模式應(yīng)用到內(nèi)存分析處理領(lǐng)域,使之成為高性能、高性價(jià)比的主流平臺(tái),并且內(nèi)存數(shù)據(jù)庫(kù)不僅要支持完全內(nèi)存模式的分析處理,也需要支持DRAM-flash兩級(jí)存儲(chǔ)下的內(nèi)存分析處理成為亟待解決的技術(shù)問(wèn)題。
【發(fā)明內(nèi)容】
[0004]針對(duì)上述問(wèn)題,本發(fā)明的目的是提供一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,該方法基于DRAM-flash兩級(jí)存儲(chǔ),通過(guò)大容量廉價(jià)的flash提高內(nèi)存存儲(chǔ)性價(jià)bto同時(shí),該方法能有效提聞數(shù)據(jù)存儲(chǔ)效率。進(jìn)一步,本發(fā)明提供的方法可以有效提聞內(nèi)存和CPU使用效率。
[0005]為實(shí)現(xiàn)上述目的,本發(fā)明采取以下技術(shù)方案:一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其包括以下步驟:1)0LAP存儲(chǔ)采用flash-aware的存儲(chǔ)模型,即根據(jù)OLAP星形或雪花形模型中維表較小、謂詞操作較多的特點(diǎn)和事實(shí)表由外鍵和度量屬性組成的特點(diǎn),在相對(duì)較小的DRAM和相對(duì)較大flash存儲(chǔ)之間按數(shù)據(jù)訪問(wèn)的局部性進(jìn)行劃分,在異構(gòu)的兩級(jí)內(nèi)存上進(jìn)行存儲(chǔ)優(yōu)化;2)內(nèi)存OLAP采用數(shù)組存儲(chǔ),每個(gè)屬性列存儲(chǔ)于連續(xù)的數(shù)組單元中,表由相同長(zhǎng)度的各屬性數(shù)組組成,維表使用數(shù)組下標(biāo)作為主鍵,事實(shí)表外鍵為維表中相應(yīng)記錄的數(shù)據(jù)下標(biāo),事實(shí)表記錄能夠根據(jù)外鍵值直接定位維表中對(duì)應(yīng)的數(shù)組單元,將傳統(tǒng)的連接操作簡(jiǎn)化為數(shù)組下標(biāo)訪問(wèn),進(jìn)行AIR算法的OLAP查詢處理;其中AIR為數(shù)組下標(biāo)訪問(wèn);3)將基于數(shù)組存儲(chǔ)和AIR算法的OLAP查詢處理分解為三個(gè)順序的數(shù)據(jù)訪問(wèn)過(guò)程:維表訪問(wèn)、事實(shí)表外鍵訪問(wèn)和事實(shí)表度量屬性訪問(wèn),三個(gè)階段產(chǎn)生的中間數(shù)據(jù)結(jié)構(gòu)包括:維表過(guò)濾分組向量、選擇向量和分組向量、分組多維數(shù)組;維表過(guò)濾分組向量、選擇向量和分組向量為各個(gè)查詢共用的數(shù)據(jù)結(jié)構(gòu),不同的查詢只需要更新向量的內(nèi)容,分組多維數(shù)組根據(jù)查詢的不同而動(dòng)態(tài)生成;4)采用在基于關(guān)鍵字的位圖連接索引的基礎(chǔ)上在DRAM-flash兩級(jí)存儲(chǔ)中優(yōu)化存儲(chǔ)K個(gè)關(guān)鍵字連接位圖,從中選擇η個(gè)高頻訪問(wèn)關(guān)系字并將相應(yīng)的位圖存儲(chǔ)于DRAM,其余的位圖存儲(chǔ)于f I ash,形成二級(jí)連接位圖索引結(jié)構(gòu)。
[0006]所述步驟I)中,采用內(nèi)存存儲(chǔ)引擎,維表駐留DRAM;事實(shí)表中的外鍵是多維分析中星形連接時(shí)訪問(wèn)頻度較高的列,同樣駐留在DRAM中;事實(shí)表的度量屬性存儲(chǔ)于flash中,并提供度量列上按位置訪問(wèn)API支持度量列的隨機(jī)訪問(wèn)。
[0007]所述步驟3)中,維表過(guò)濾分組向量、選擇向量和分組向量、分組多維數(shù)組存儲(chǔ)于DRAM中;事實(shí)表度量屬性存儲(chǔ)于flash中。
[0008]所述步驟2)中,所述AIR算法的OLAP查詢處理包括以下步驟:①將OLAP查詢分解為維表上的分組過(guò)濾操作:將查詢中的選擇和分組操作按維表進(jìn)行劃分,將查詢分解為在各個(gè)維表上的子查詢;②生成維表過(guò)濾分組向量:每個(gè)維表根據(jù)各自的where子句對(duì)記錄進(jìn)行過(guò)濾并投影出滿足選擇條件的分組屬性,滿足選擇條件的分組屬性進(jìn)行字典表壓縮,字典表存儲(chǔ)于數(shù)組中,字典壓縮碼為字典數(shù)組下標(biāo),在過(guò)濾分組屬性中選擇條件為false的位置置為-1,否則置為分組壓縮編碼,并記錄在與維表等長(zhǎng)的過(guò)濾分組向量中;③事實(shí)表外鍵多趟掃描創(chuàng)建選擇和分組向量:按維表過(guò)濾分組向量選擇率由低到高的順序依次掃描事實(shí)表對(duì)應(yīng)的外鍵列,每列掃描時(shí)按外鍵值映射到相應(yīng)維表過(guò)濾分組向量指定的位置,向量值非負(fù)時(shí)將當(dāng)前事實(shí)表記錄位置插入選擇向量;下一個(gè)外鍵列掃描時(shí)按照當(dāng)前選擇向量中的記錄位置采用隨機(jī)訪問(wèn)方式,并通過(guò)相應(yīng)維表過(guò)濾分組向量更新選擇向量,刪除不滿足后續(xù)外鍵映射條件的事實(shí)表記錄位置;當(dāng)各外鍵列掃描結(jié)束后,選擇向量記錄了事實(shí)表中滿足全部連接條件的記錄位置;當(dāng)總選擇率較高時(shí),在更新選擇向量的同時(shí)更新分組向量,用維表過(guò)濾分組向量中當(dāng)前分組的下標(biāo)增量地計(jì)算分組多維數(shù)組下標(biāo);當(dāng)總選擇率很低時(shí),首先生成選擇向量,最后按選擇向量的位置隨機(jī)訪問(wèn)各外鍵列,一次性生成分組向量;④通過(guò)選擇向量訪問(wèn)flash存儲(chǔ)度量列指定度量值:根據(jù)選擇向量中的位置訪問(wèn)flash存儲(chǔ)上的度量屬性值;根據(jù)選擇向量在flash上的隨機(jī)訪問(wèn)采用多核并行執(zhí)行;?通過(guò)分組向量將度量值在分組多維數(shù)組中聚集:按照分組向量所記錄的分組下標(biāo),將從flash存儲(chǔ)上返回的度量屬性值“推”到分組向量中下標(biāo)值指示的分組多維數(shù)組單元中進(jìn)行聚集計(jì)算,完成全部的OLAP查詢處理;?將分組多維數(shù)組的各維反向映射到分組字典表中獲得分組屬性值并輸出查詢結(jié)果。
[0009]所述步驟②中,所述過(guò)濾分組向量是一個(gè)動(dòng)態(tài)生成的維表附加列,代替維表與事實(shí)表進(jìn)行連接操作并提供連接記錄在當(dāng)前維上分組屬性的編碼;當(dāng)維表上沒(méi)有分組屬性時(shí),過(guò)濾分組向量簡(jiǎn)化為一個(gè)位圖,用于事實(shí)表外鍵的連接過(guò)濾。
[0010]所述步驟4)中,在關(guān)鍵字位圖連接索引的基礎(chǔ)上采用DRAM-flash兩級(jí)位圖連接索引方法,根據(jù)內(nèi)存存儲(chǔ)空間配額精確地在K個(gè)關(guān)鍵字連接位圖中選擇最頻繁使用的η個(gè)作為DRAM駐留位圖連接索引,其余Κ-η個(gè)關(guān)鍵字位圖作為二級(jí)索引存儲(chǔ)在flash中。
[0011]本發(fā)明由于采取以上技術(shù)方案,其具有以下優(yōu)點(diǎn):1、本發(fā)明由于采用DRAM-flash兩級(jí)存儲(chǔ)作為內(nèi)存OLAP的存儲(chǔ)平臺(tái)。相對(duì)于完全內(nèi)存存儲(chǔ)模型,DRAM-flash兩級(jí)存儲(chǔ)大幅度降低了對(duì)昂貴內(nèi)存的需求,降低了硬件的整體成本,通過(guò)flash-aware存儲(chǔ)模型及AIROLAP算法的優(yōu)化,對(duì)flash上存儲(chǔ)的大量度量屬性采用高效率的隨機(jī)訪問(wèn),縮小了 flash存儲(chǔ)的性能差距。2、本發(fā)明采用的AIR OLAP查詢處理算法將一個(gè)完整的OLAP查詢處理過(guò)程劃分為三個(gè)獨(dú)立的處理階段,在維表和事實(shí)表外鍵處理階段只涉及較小比例的數(shù)據(jù),每個(gè)維表生成一個(gè)定長(zhǎng)的過(guò)濾分組向量;事實(shí)表上無(wú)論查詢涉及的列數(shù)量多少都只需要一個(gè)選擇向量和一個(gè)分組向量,選擇和分組向量的初始長(zhǎng)度由維上最低的選擇率決定,在事實(shí)表外鍵的星形連接中長(zhǎng)度不斷縮短,內(nèi)存存儲(chǔ)開(kāi)銷(xiāo)有限;數(shù)據(jù)庫(kù)中存儲(chǔ)空間占比最大的度量屬性存儲(chǔ)在大容量flash中,傳統(tǒng)的行式訪問(wèn)(包括行存儲(chǔ)以及列存儲(chǔ)上的行式訪問(wèn))OLAP查詢處理在事實(shí)表全表掃描過(guò)程中完成流水線式的哈希連接和哈希分組聚集操作,AIR OLAP查詢算法將連接、分組操作和聚集操作分解,不使用傳統(tǒng)數(shù)據(jù)庫(kù)中常用的全表掃描而是在數(shù)量有限的事實(shí)表外鍵上完成連接分組操作,然后根據(jù)選擇率極低的選擇向量按位置訪問(wèn)指定度量列的指定位置,將flash存儲(chǔ)上的數(shù)據(jù)訪問(wèn)操作推到最后處理階段,極大減少了 flash上的數(shù)據(jù)訪問(wèn)負(fù)載,同時(shí)也能夠發(fā)揮出flash良好的隨機(jī)訪問(wèn)性能。3、本發(fā)明由于采用的位圖連接索引是一種增量索引,因事實(shí)表記錄增加而產(chǎn)生的索引更新操作是位圖的順序增長(zhǎng),而不是象B+-樹(shù)索引那樣更新節(jié)點(diǎn)內(nèi)容和結(jié)構(gòu),能夠消除flash上數(shù)據(jù)更新的數(shù)據(jù)重寫(xiě)代價(jià),因此更適合flash存儲(chǔ)。DRAM-flash兩級(jí)內(nèi)存位圖連接索引方法在基于關(guān)鍵字位圖連接索引的基礎(chǔ)上通過(guò)查詢關(guān)鍵字訪問(wèn)頻度以及內(nèi)存存儲(chǔ)空間對(duì)關(guān)鍵字位圖采用兩級(jí)存儲(chǔ)模式,將K個(gè)關(guān)鍵字位圖中η個(gè)高頻使用的關(guān)鍵字位圖存儲(chǔ)于DRAM,其余Κ-η個(gè)關(guān)鍵字位圖存儲(chǔ)于flash,降低了內(nèi)存索引的存儲(chǔ)開(kāi)銷(xiāo)。4、本發(fā)明是通過(guò)OLAP模式和負(fù)載的特點(diǎn)以及OLAP查詢處理算法中數(shù)據(jù)的局部性特征(即數(shù)據(jù)被頻繁訪問(wèn)的程度)建立異構(gòu)存儲(chǔ)模型,以表、索引、表中不同數(shù)據(jù)局部性強(qiáng)度的列組以及查詢依賴的中間數(shù)據(jù)結(jié)構(gòu)為對(duì)象,根據(jù)內(nèi)存容量及數(shù)據(jù)訪問(wèn)性能約束將其優(yōu)化分布在高性能但容量相對(duì)較小的DRAM和大容量但性能相對(duì)較低的flash存儲(chǔ)中,提高數(shù)據(jù)存儲(chǔ)效率。5、本發(fā)明是在查詢處理時(shí)根據(jù)DRAM和flash存儲(chǔ)的特性,將flash上的數(shù)據(jù)訪問(wèn)推后執(zhí)行,將OLAP完整的查詢處理過(guò)程劃分為內(nèi)存處理和flash計(jì)算兩個(gè)階段,支持OLAP查詢間不同存儲(chǔ)訪問(wèn)階段上的流水并行,提高內(nèi)存和CPU使用效率。本發(fā)明可以廣泛應(yīng)用于通用OLAP應(yīng)用場(chǎng)景中。
【專利附圖】
【附圖說(shuō)明】
[0012]圖1是本發(fā)明的內(nèi)存OLAP在DRAM-flash兩級(jí)存儲(chǔ)上的存儲(chǔ)示意圖;
[0013]圖2是本發(fā)明實(shí)施例中內(nèi)存OLAP在DRAM-flash兩級(jí)存儲(chǔ)上的查詢處理示意圖;
[0014]圖3是本發(fā)明的DRAM-flash兩級(jí)存儲(chǔ)上的關(guān)鍵字位圖連接索引處理示意圖。
【具體實(shí)施方式】
[0015]現(xiàn)有的內(nèi)存OLAP技術(shù)通常采用完全內(nèi)存計(jì)算模式,或者將大容量flash用作高速緩存,前者增加了內(nèi)存計(jì)算的成本,后者難以將OLAP優(yōu)化從內(nèi)存擴(kuò)展到flash上。為此,本發(fā)明提出了一種基于DRAM-flash兩級(jí)存儲(chǔ)的內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,根據(jù)OLAP模式、負(fù)載以及OLAP算法的特點(diǎn)優(yōu)化OLAP數(shù)據(jù)在內(nèi)存和flash上的存儲(chǔ),面向兩級(jí)存儲(chǔ)特點(diǎn)優(yōu)化OLAP查詢算法。本發(fā)明適用于通用OLAP應(yīng)用場(chǎng)景。下面結(jié)合附圖和實(shí)施例對(duì)本發(fā)明進(jìn)行詳細(xì)的描述。
[0016]如圖1所示,本發(fā)明提供一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,該方法基于DRAM-flash兩級(jí)存儲(chǔ),面向采用DRAM和大容量PCIe Flash Card構(gòu)成的DRAM-flash兩級(jí)存儲(chǔ)上的內(nèi)存OLAP查詢優(yōu)化方法,其包括以下步驟:
[0017]I) OLAP存儲(chǔ)采用flash-aware的存儲(chǔ)模型,即根據(jù)OLAP星形或雪花形模型中維表較小、謂詞操作較多的特點(diǎn)和事實(shí)表由外鍵和度量屬性組成的特點(diǎn),在相對(duì)較小的DRAM和相對(duì)較大flash存儲(chǔ)之間按數(shù)據(jù)訪問(wèn)的局部性進(jìn)行劃分,在異構(gòu)的兩級(jí)內(nèi)存上進(jìn)行存儲(chǔ)優(yōu)化,以提高內(nèi)存中高頻使用數(shù)據(jù)的效率。
[0018]由于維表較小且現(xiàn)代OLAP支持維表上的更新,因此采用內(nèi)存存儲(chǔ)引擎,維表駐留DRAM。事實(shí)表中的外鍵是多維分析中星形連接時(shí)訪問(wèn)頻度較高的列,同樣駐留在DRAM中。事實(shí)表的度量屬性較多,OLAP查詢通常只針對(duì)少數(shù)度量屬性和極低選擇率上的度量值,因此存儲(chǔ)于廉價(jià)大容量的flash中,并提供度量列上按位置訪問(wèn)API支持度量列的按位置隨機(jī)訪問(wèn)。
[0019]2)內(nèi)存OLAP采用數(shù)組存儲(chǔ),每個(gè)屬性列存儲(chǔ)于連續(xù)的數(shù)組單元中,表由相同長(zhǎng)度的各屬性數(shù)組組成,其中較優(yōu)地,維表使用數(shù)組下標(biāo)作為主鍵,事實(shí)表外鍵為維表中相應(yīng)記錄的數(shù)據(jù)下標(biāo),事實(shí)表記錄能夠根據(jù)外鍵值直接定位維表中對(duì)應(yīng)的數(shù)組單元,將傳統(tǒng)的連接操作簡(jiǎn)化為數(shù)組下標(biāo)訪問(wèn)(Array Index Reference, AIR),進(jìn)行AIR算法的OLAP查詢處理。
[0020]3)將基于數(shù)組存儲(chǔ)和AIR算法的OLAP查詢處理分解為三個(gè)順序的數(shù)據(jù)訪問(wèn)過(guò)程:維表訪問(wèn)、事實(shí)表外鍵訪問(wèn)和事實(shí)表度量屬性訪問(wèn),三個(gè)階段產(chǎn)生的中間數(shù)據(jù)結(jié)構(gòu)包括:維表過(guò)濾分組向量、選擇向量和分組向量、分組多維數(shù)組。維表過(guò)濾分組向量、選擇向量和分組向量為各個(gè)查詢共用的數(shù)據(jù)結(jié)構(gòu),不同的查詢只需要更新向量的內(nèi)容;分組多維數(shù)組根據(jù)查詢的不同而動(dòng)態(tài)生成。這三類(lèi)中間數(shù)據(jù)結(jié)構(gòu)在查詢處理過(guò)程中被重復(fù)使用,屬于強(qiáng)局部性數(shù)據(jù)集,需要存儲(chǔ)于DRAM中;事實(shí)表度量屬性所占存儲(chǔ)空間較大,但查詢中通常只訪問(wèn)較少的度量屬性,而且通過(guò)選擇向量只需要隨機(jī)訪問(wèn)度量屬性列中極低比例的記錄,因此度量屬性列可以存儲(chǔ)于flash中以減少內(nèi)存OLAP對(duì)DRAM的需求,降低系統(tǒng)的硬件成本。
[0021]本發(fā)明所采用的AIR OLAP算法需要選擇向量、分組向量、維表過(guò)濾分組向量、分組多維數(shù)組等數(shù)據(jù)用于OLAP查詢處理過(guò)程,這些數(shù)據(jù)結(jié)構(gòu)在OLAP查詢間可以重復(fù)使用,所占內(nèi)存空間固定,因此常駐于DRAM。
[0022]4)數(shù)據(jù)倉(cāng)庫(kù)通常使用位圖連接索引來(lái)優(yōu)化或消除維表和事實(shí)表之間的連接代價(jià)。本發(fā)明采用在基于關(guān)鍵字的位圖連接索引(即按關(guān)鍵字而不是整個(gè)屬性成員來(lái)建立位圖連接索引)的基礎(chǔ)上在DRAM-flash兩級(jí)存儲(chǔ)中優(yōu)化存儲(chǔ)K個(gè)關(guān)鍵字連接位圖(即每人關(guān)鍵字對(duì)應(yīng)一個(gè)與事實(shí)表等長(zhǎng)的位圖,記錄該關(guān)鍵字所對(duì)應(yīng)的事實(shí)表記錄位置),從中選擇η個(gè)高頻訪問(wèn)關(guān)系字并將相應(yīng)的位圖存儲(chǔ)于DRAM,其余的位圖存儲(chǔ)于flash,形成二級(jí)連接位圖索引結(jié)構(gòu);
[0023]其中,本發(fā)明在關(guān)鍵字位圖連接索引的基礎(chǔ)上采用DRAM-flash兩級(jí)位圖連接索引方法,根據(jù)內(nèi)存存儲(chǔ)空間配額精確地在K個(gè)關(guān)鍵字連接位圖中選擇最頻繁使用的η個(gè)作為DRAM駐留位圖連接索引,其余Κ-η個(gè)關(guān)鍵字位圖作為二級(jí)索引。具體為:索引項(xiàng)為某個(gè)維表屬性值所對(duì)應(yīng)的事實(shí)表位置位圖,位圖索引的大小為定長(zhǎng)的位圖大小與關(guān)鍵字?jǐn)?shù)量的乘積,位圖索引可以通過(guò)數(shù)據(jù)壓縮進(jìn)一步縮減內(nèi)存存儲(chǔ)空間。通過(guò)查詢執(zhí)行日志和查詢關(guān)鍵字分析,可以確定K個(gè)最頻繁使用的維屬性關(guān)鍵字并為其建立位圖索引,根據(jù)內(nèi)存空間配額可以將其中η個(gè)最頻繁使用的關(guān)鍵字位圖駐留于內(nèi)存,其余κ-η個(gè)關(guān)鍵字位圖存儲(chǔ)于flash,形成二級(jí)連接位圖索引結(jié)構(gòu)。
[0024]上述步驟2)中,AIR算法的OLAP查詢處理包括以下步驟:
[0025]①將OLAP查詢分解為維表上的分組過(guò)濾操作:將查詢中的選擇和分組操作按維表進(jìn)行劃分,將查詢分解為在各個(gè)維表上的子查詢。
[0026]②生成維表過(guò)濾分組向量:每個(gè)維表根據(jù)各自的where子句對(duì)記錄進(jìn)行過(guò)濾并投影出滿足選擇條件的分組屬性,滿足選擇條件的分組屬性進(jìn)行字典表壓縮,字典表存儲(chǔ)于數(shù)組中,字典壓縮碼為字典數(shù)組下標(biāo),在過(guò)濾分組屬性中選擇條件為false的位置置為-1,否則置為分組壓縮編碼,并記錄在與維表等長(zhǎng)的過(guò)濾分組向量中。
[0027]過(guò)濾分組向量是一個(gè)動(dòng)態(tài)生成的維表附加列,代替維表與事實(shí)表進(jìn)行連接操作并提供連接記錄在當(dāng)前維上分組屬性的編碼。當(dāng)維表上沒(méi)有分組屬性時(shí),過(guò)濾分組向量簡(jiǎn)化為一個(gè)位圖,用于事實(shí)表外鍵的連接過(guò)濾。
[0028]③事實(shí)表外鍵多趟掃描創(chuàng)建選擇和分組向量:按維表過(guò)濾分組向量選擇率由低到高的順序依次掃描事實(shí)表對(duì)應(yīng)的外鍵列,每列掃描時(shí)按外鍵值映射到相應(yīng)維表過(guò)濾分組向量指定的位置,向量值非負(fù)時(shí)將當(dāng)前事實(shí)表記錄位置插入選擇向量;下一個(gè)外鍵列掃描時(shí)按照當(dāng)前選擇向量中的記錄位置采用隨機(jī)訪問(wèn)方式,并通過(guò)相應(yīng)維表過(guò)濾分組向量更新選擇向量,刪除不滿足后續(xù)外鍵映射條件的事實(shí)表記錄位置;當(dāng)各外鍵列掃描結(jié)束后,選擇向量記錄了事實(shí)表中滿足全部連接條件的記錄位置。當(dāng)總選擇率較高時(shí),在更新選擇向量的同時(shí)更新分組向量,用維表過(guò)濾分組向量中當(dāng)前分組的下標(biāo)增量地計(jì)算分組多維數(shù)組下標(biāo);當(dāng)總選擇率很低時(shí),首先生成選擇向量,最后按選擇向量的位置隨機(jī)訪問(wèn)各外鍵列,一次性生成分組向量。
[0029]④通過(guò)選擇向量訪問(wèn)flash存儲(chǔ)度量列指定度量值:根據(jù)選擇向量中的位置訪問(wèn)flash存儲(chǔ)上的度量屬性值,只需要返回極少的度量值進(jìn)行分組聚集計(jì)算;flash具有良好的并行隨機(jī)訪問(wèn)性能,根據(jù)選擇向量在flash上的隨機(jī)訪問(wèn)采用多核并行執(zhí)行,減少flash數(shù)據(jù)訪問(wèn)延遲。
[0030]⑤通過(guò)分組向量將度量值在分組多維數(shù)組中聚集:按照分組向量所記錄的分組下標(biāo),將從flash存儲(chǔ)上返回的度量屬性值“推”到分組向量中下標(biāo)值指示的分組多維數(shù)組單元中進(jìn)行聚集計(jì)算,完成全部的OLAP查詢處理。
[0031]⑥將分組多維數(shù)組的各維反向映射到分組字典表中獲得分組屬性值并輸出查詢結(jié)果。
[0032]實(shí)施例:
[0033]如圖2所示,flash-aware體現(xiàn)在通過(guò)對(duì)OLAP查詢算法的優(yōu)化將對(duì)flash上存儲(chǔ)的度量屬性的訪問(wèn)推到最后,將事實(shí)表順序掃描轉(zhuǎn)換為根據(jù)選擇向量對(duì)事實(shí)表度量屬性執(zhí)行低選擇率的隨機(jī)訪問(wèn),降低flash上度量屬性訪問(wèn)的延遲。
[0034]步驟2)以下面的查詢命令為例:
[0035]SELECT c_nat1n, s_nat1n, sum(l_revenue), sum(l_price)
[0036]FROM customer, lineorder, supplier
[0037]WHERE lo_custkey = c_custkey
[0038]and lo_suppkey = s_suppkey
[0039]and c_reg1n = ’ AMERICA’
[0040]and s_reg1n = ’ ASIA’
[0041]group by c_nat1n, s_nat1n ;
[0042]查詢命令需要將事實(shí)表I ineorder和維表customer, supplier連接,然后按維表的c_reg1n和s_reg1n屬性對(duì)事實(shí)表度量列l(wèi)_revenue和l_price求累加和。
[0043]如圖3所示,本發(fā)明步驟4)中DRAM-flash兩級(jí)存儲(chǔ)上的關(guān)鍵字位圖連接索引處理實(shí)施例:
[0044]傳統(tǒng)的數(shù)據(jù)庫(kù)中,索引是一種平面結(jié)構(gòu),假設(shè)在相同的存儲(chǔ)層次上使用。B+-樹(shù)索引等磁盤(pán)數(shù)據(jù)庫(kù)的索引技術(shù)通過(guò)緩沖區(qū)機(jī)制實(shí)現(xiàn)內(nèi)存缺失節(jié)點(diǎn)在磁盤(pán)和內(nèi)存的數(shù)據(jù)交換,但仍然是一種不透明的機(jī)制,其索引訪問(wèn)效率取決于緩沖區(qū)替換算法的效率,不能被數(shù)據(jù)庫(kù)定制式優(yōu)化。在OLAP應(yīng)用中,索引項(xiàng)存在于維表屬性,但索引的對(duì)象則是事實(shí)表中對(duì)應(yīng)的連接記錄,普通的B+-樹(shù)索引只能檢索單表上的數(shù)據(jù),對(duì)OLAP應(yīng)用而言,較小的維表上的索引訪問(wèn)性能的提高對(duì)OLAP查詢整體性能的加速作用有限,而對(duì)事實(shí)表外鍵建立索弓I能夠加速事實(shí)表與維表之間的連接操作,但事實(shí)表外鍵上的索引存儲(chǔ)開(kāi)銷(xiāo)極為龐大,而且現(xiàn)代OLAP應(yīng)用中事實(shí)表需要實(shí)時(shí)大量更新,索引的更新代價(jià)巨大。本發(fā)明采用的是位圖連接索引方法,即通過(guò)連接操作為維表上指定的屬性成員建立事實(shí)表連接位圖,每個(gè)成員建立一個(gè)位圖,指示該成員在事實(shí)表記錄上的連接位置。位圖連接索引是一種增量索引,在事實(shí)表大量數(shù)據(jù)插入時(shí)只需要增量地?cái)U(kuò)展位圖長(zhǎng)度即可,不需要對(duì)已建立的連接位圖進(jìn)行重構(gòu)。傳統(tǒng)數(shù)據(jù)庫(kù)中使用的位圖連接索引是以屬性為粒度為所有成員建立連接位圖,面臨著低勢(shì)集屬性位圖連接索引空間開(kāi)銷(xiāo)小但選擇率過(guò)高,而高勢(shì)集屬性選擇率低但連接位圖數(shù)量多,存儲(chǔ)開(kāi)銷(xiāo)過(guò)大的矛盾。本發(fā)明采用按查詢負(fù)載中的維屬性關(guān)鍵字的TOP K訪問(wèn)頻度選擇位圖連接索引關(guān)鍵字,并為K個(gè)全局高頻訪問(wèn)關(guān)鍵字建立全局位圖連接索引,形成一個(gè)key/value索引結(jié)構(gòu),key為關(guān)鍵字的全局名稱,包括表及關(guān)鍵字信息,value則是連接位圖。不同維表、不同屬性的關(guān)鍵字具有相同的連接位圖長(zhǎng)度,可以存儲(chǔ)在全局位圖連接索引中。其中較優(yōu)地,本發(fā)明在關(guān)鍵字位圖連接索引的基礎(chǔ)上提出了 DRAM-flash兩級(jí)位圖連接索引方法,根據(jù)內(nèi)存存儲(chǔ)空間配額精確地在K個(gè)關(guān)鍵字連接位圖中選擇最頻繁使用的η個(gè)作為DRAM駐留位圖連接索引,其余Κ-η個(gè)關(guān)鍵字位圖作為二級(jí)索引。如圖3所示,顯示了查詢關(guān)鍵字位圖分別存在于DRAM和flash兩級(jí)存儲(chǔ)的應(yīng)用場(chǎng)景,首先DRAM中的位圖完成選擇操作,生成過(guò)濾位圖,當(dāng)過(guò)濾位圖的選擇率在某個(gè)閾值范圍(SlOTt,Shigh)之間時(shí),按照生成的過(guò)濾位圖中“I”的位置向flash存儲(chǔ)中相應(yīng)位圖的指定位置進(jìn)行隨機(jī)訪問(wèn),確定該位置最終的邏輯結(jié)果。Flash具有較好的隨機(jī)訪問(wèn)能力,本發(fā)明采用對(duì)過(guò)濾位圖順序訪問(wèn),對(duì)flash位圖并行訪問(wèn)的策略,提高flash上數(shù)據(jù)的并行訪問(wèn)性能,減少位圖索引計(jì)算的延遲,如圖3中所示的并行flash訪問(wèn)線程。假設(shè)DRAM中過(guò)濾位圖的選擇率為S1, flash中位圖的選擇率為S2 (位圖的選擇率可以由“I”的數(shù)量精確地給出),Tf(S1)為在flash上的位圖訪問(wèn)延遲,TP(S2,S1)為在索引選擇率為S2和S1時(shí)查詢處理的時(shí)間差,當(dāng)Tp(S2, S1)-Tf(S1)X)時(shí),flash上的位圖訪問(wèn)具有查詢性能收益。Slw和Shigh為滿足查詢收益的最低和最高選擇率差值(如S2-S1)。
[0045]綜上所述,與現(xiàn)有技術(shù)相比,本發(fā)明采用基于DRAM-flash兩級(jí)存儲(chǔ)的內(nèi)存OLAP查詢優(yōu)化方法,支持DRAM-flash兩級(jí)存儲(chǔ)上的內(nèi)存OLAP查詢處理,降低內(nèi)存OLAP對(duì)昂貴內(nèi)存的需求,提高內(nèi)存OLAP的性價(jià)比。通過(guò)基于DRAM-flash兩級(jí)存儲(chǔ)的存儲(chǔ)優(yōu)化方法、OLAP查詢優(yōu)化方法和索引優(yōu)化方法,透明地優(yōu)化在OLAP查詢處理過(guò)程中的數(shù)據(jù)訪問(wèn)和查詢處理性能。本發(fā)明同時(shí)提高了內(nèi)存OLAP大數(shù)據(jù)的訪問(wèn)數(shù)據(jù)管理能力和查詢處理性能。
[0046]上述各實(shí)施例僅用于說(shuō)明本發(fā)明,其中各部件的結(jié)構(gòu)、連接方式和制作工藝等都是可以有所變化的,凡是在本發(fā)明技術(shù)方案的基礎(chǔ)上進(jìn)行的等同變換和改進(jìn),均不應(yīng)排除在本發(fā)明的保護(hù)范圍之外。
【權(quán)利要求】
1.一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其包括以下步驟: DOLAP存儲(chǔ)采用flash-aware的存儲(chǔ)模型,即根據(jù)OLAP星形或雪花形模型中維表較小、謂詞操作較多的特點(diǎn)和事實(shí)表由外鍵和度量屬性組成的特點(diǎn),在相對(duì)較小的DRAM和相對(duì)較大flash存儲(chǔ)之間按數(shù)據(jù)訪問(wèn)的局部性進(jìn)行劃分,在異構(gòu)的兩級(jí)內(nèi)存上進(jìn)行存儲(chǔ)優(yōu)化; 2)內(nèi)存OLAP采用數(shù)組存儲(chǔ),每個(gè)屬性列存儲(chǔ)于連續(xù)的數(shù)組單元中,表由相同長(zhǎng)度的各屬性數(shù)組組成,維表使用數(shù)組下標(biāo)作為主鍵,事實(shí)表外鍵為維表中相應(yīng)記錄的數(shù)據(jù)下標(biāo),事實(shí)表記錄能夠根據(jù)外鍵值直接定位維表中對(duì)應(yīng)的數(shù)組單元,將傳統(tǒng)的連接操作簡(jiǎn)化為數(shù)組下標(biāo)訪問(wèn),進(jìn)行AIR算法的OLAP查詢處理;其中AIR為數(shù)組下標(biāo)訪問(wèn); 3)將基于數(shù)組存儲(chǔ)和AIR算法的OLAP查詢處理分解為三個(gè)順序的數(shù)據(jù)訪問(wèn)過(guò)程:維表訪問(wèn)、事實(shí)表外鍵訪問(wèn)和事實(shí)表度量屬性訪問(wèn),三個(gè)階段產(chǎn)生的中間數(shù)據(jù)結(jié)構(gòu)包括:維表過(guò)濾分組向量、選擇向量和分組向量、分組多維數(shù)組;維表過(guò)濾分組向量、選擇向量和分組向量為各個(gè)查詢共用的數(shù)據(jù)結(jié)構(gòu),不同的查詢只需要更新向量的內(nèi)容,分組多維數(shù)組根據(jù)查詢的不同而動(dòng)態(tài)生成; 4)采用在基于關(guān)鍵字的位圖連接索引的基礎(chǔ)上在DRAM-flash兩級(jí)存儲(chǔ)中優(yōu)化存儲(chǔ)K個(gè)關(guān)鍵字連接位圖,從中選擇η個(gè)高頻訪問(wèn)關(guān)系字并將相應(yīng)的位圖存儲(chǔ)于DRAM,其余的位圖存儲(chǔ)于flash,形成二級(jí)連接位圖索引結(jié)構(gòu)。
2.如權(quán)利要求1所述的一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其特征在于:所述步驟I)中,采用內(nèi)存存儲(chǔ)引擎,維表駐留DRAM;事實(shí)表中的外鍵是多維分析中星形連接時(shí)訪問(wèn)頻度較高的列,同樣駐留在DRAM中;事實(shí)表的度量屬性存儲(chǔ)于flash中,并提供度量列上按位置訪問(wèn)API支持度量列的隨機(jī)訪問(wèn)。
3.如權(quán)利要求1所述的一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其特征在于:所述步驟3)中,維表過(guò)濾分組向量、選擇向量和分組向量、分組多維數(shù)組存儲(chǔ)于DRAM中;事實(shí)表度量屬性存儲(chǔ)于flash中。
4.如權(quán)利要求2所述的一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其特征在于:所述步驟3)中,維表過(guò)濾分組向量、選擇向量和分組向量、分組多維數(shù)組存儲(chǔ)于DRAM中;事實(shí)表度量屬性存儲(chǔ)于flash中。
5.如權(quán)利要求1或2或3或4所述的一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其特征在于:所述步驟2)中,所述AIR算法的OLAP查詢處理包括以下步驟: ①將OLAP查詢分解為維表上的分組過(guò)濾操作:將查詢中的選擇和分組操作按維表進(jìn)行劃分,將查詢分解為在各個(gè)維表上的子查詢; ②生成維表過(guò)濾分組向量:每個(gè)維表根據(jù)各自的where子句對(duì)記錄進(jìn)行過(guò)濾并投影出滿足選擇條件的分組屬性,滿足選擇條件的分組屬性進(jìn)行字典表壓縮,字典表存儲(chǔ)于數(shù)組中,字典壓縮碼為字典數(shù)組下標(biāo),在過(guò)濾分組屬性中選擇條件為false的位置置為-1,否則置為分組壓縮編碼,并記錄在與維表等長(zhǎng)的過(guò)濾分組向量中; ③事實(shí)表外鍵多趟掃描創(chuàng)建選擇和分組向量:按維表過(guò)濾分組向量選擇率由低到高的順序依次掃描事實(shí)表對(duì)應(yīng)的外鍵列,每列掃描時(shí)按外鍵值映射到相應(yīng)維表過(guò)濾分組向量指定的位置,向量值非負(fù)時(shí)將當(dāng)前事實(shí)表記錄位置插入選擇向量;下一個(gè)外鍵列掃描時(shí)按照當(dāng)前選擇向量中的記錄位置采用隨機(jī)訪問(wèn)方式,并通過(guò)相應(yīng)維表過(guò)濾分組向量更新選擇向量,刪除不滿足后續(xù)外鍵映射條件的事實(shí)表記錄位置;當(dāng)各外鍵列掃描結(jié)束后,選擇向量記錄了事實(shí)表中滿足全部連接條件的記錄位置;當(dāng)總選擇率較高時(shí),在更新選擇向量的同時(shí)更新分組向量,用維表過(guò)濾分組向量中當(dāng)前分組的下標(biāo)增量地計(jì)算分組多維數(shù)組下標(biāo);當(dāng)總選擇率很低時(shí),首先生成選擇向量,最后按選擇向量的位置隨機(jī)訪問(wèn)各外鍵列,一次性生成分組向量; ④通過(guò)選擇向量訪問(wèn)flash存儲(chǔ)度量列指定度量值:根據(jù)選擇向量中的位置訪問(wèn)flash存儲(chǔ)上的度量屬性值;根據(jù)選擇向量在flash上的隨機(jī)訪問(wèn)采用多核并行執(zhí)行; ⑤通過(guò)分組向量將度量值在分組多維數(shù)組中聚集:按照分組向量所記錄的分組下標(biāo),將從flash存儲(chǔ)上返回的度量屬性值“推”到分組向量中下標(biāo)值指示的分組多維數(shù)組單元中進(jìn)行聚集計(jì)算,完成全部的OLAP查詢處理; ⑥將分組多維數(shù)組的各維反向映射到分組字典表中獲得分組屬性值并輸出查詢結(jié)果。
6.如權(quán)利要求5所述的一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其特征在于:所述步驟②中,所述過(guò)濾分組向量是一個(gè)動(dòng)態(tài)生成的維表附加列,代替維表與事實(shí)表進(jìn)行連接操作并提供連接記錄在當(dāng)前維上分組屬性的編碼;當(dāng)維表上沒(méi)有分組屬性時(shí),過(guò)濾分組向量簡(jiǎn)化為一個(gè)位圖,用于事實(shí)表外鍵的連接過(guò)濾。
7.如權(quán)利要求1或2或3或4或6所述的一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其特征在于:所述步驟4)中,在關(guān)鍵字位圖連接索引的基礎(chǔ)上采用DRAM-flash兩級(jí)位圖連接索引方法,根據(jù)內(nèi)存存儲(chǔ)空間配額精確地在K個(gè)關(guān)鍵字連接位圖中選擇最頻繁使用的η個(gè)作為DRAM駐留位圖連接索引,其余Κ-η個(gè)關(guān)鍵字位圖作為二級(jí)索引存儲(chǔ)在flash 中 ο
8.如權(quán)利要求5所述的一種內(nèi)存-閃存混合存儲(chǔ)模式下的OLAP查詢優(yōu)化方法,其特征在于:所述步驟4)中,在關(guān)鍵字位圖連接索引的基礎(chǔ)上采用DRAM-flash兩級(jí)位圖連接索引方法,根據(jù)內(nèi)存存儲(chǔ)空間配額精確地在K個(gè)關(guān)鍵字連接位圖中選擇最頻繁使用的η個(gè)作為DRAM駐留位圖連接索引,其余Κ-η個(gè)關(guān)鍵字位圖作為二級(jí)索引存儲(chǔ)在flash中。
【文檔編號(hào)】G06F17/30GK104361113SQ201410717830
【公開(kāi)日】2015年2月18日 申請(qǐng)日期:2014年12月1日 優(yōu)先權(quán)日:2014年12月1日
【發(fā)明者】張延松, 張宇, 王珊 申請(qǐng)人:中國(guó)人民大學(xué)