用于大規(guī)模集群中的分析型查詢(xún)處理的自動(dòng)反規(guī)范化的制作方法
【技術(shù)領(lǐng)域】
[0001] 本發(fā)明一般涉及數(shù)據(jù)庫(kù)管理系統(tǒng),并且更具體地涉及用于處理存儲(chǔ)器中查詢(xún)的反 規(guī)范化。
【背景技術(shù)】
[0002] 數(shù)據(jù)倉(cāng)庫(kù)中的分析型查詢(xún)處理通常涉及大型數(shù)據(jù)集合,該數(shù)據(jù)集合很少以面向批 處理的方式被更新。在許多情況下,期望在更大量的數(shù)據(jù)上執(zhí)行查詢(xún)(通??缭礁L(zhǎng)的時(shí) 間段),但查詢(xún)處理系統(tǒng)的性能限制了數(shù)據(jù)集合的大小。
[0003] 可以通過(guò)在存儲(chǔ)器中處理查詢(xún)以及通過(guò)增加運(yùn)行該查詢(xún)的服務(wù)器的數(shù)目來(lái)改善 性能。然而,更多的服務(wù)器增加了用于服務(wù)器的功率以及與功率相關(guān)的基礎(chǔ)設(shè)施的成本,從 而限制了服務(wù)器的數(shù)量繼而限制了數(shù)據(jù)集合的大小。
[0004] 作為替代,通過(guò)在低功率處理單元的集群中執(zhí)行存儲(chǔ)器中數(shù)據(jù)庫(kù)查詢(xún),能夠在低 功率的情況下改善性能。每個(gè)處理單元具有低的計(jì)算能力,但具有成千上萬(wàn)個(gè)處理單元的 集群卻具有非常高的性能。盡管在集群中的存儲(chǔ)器中數(shù)據(jù)庫(kù)查詢(xún)處理改善了性能,但一種 查詢(xún)操作仍然構(gòu)成挑戰(zhàn)。大型表連接(join)的性能不隨集群的大小而成比例縮放。因此, 需要在大型表連接的存儲(chǔ)器中處理的性能方面尋求更大的改善。
【附圖說(shuō)明】
[0005] 在附圖中:
[0006] 圖1根據(jù)一個(gè)實(shí)施例示出整體操作的流程圖;
[0007] 圖2示出常規(guī)的連接;
[0008] 圖3和圖4示出用于TPC-H工作負(fù)荷的數(shù)據(jù)庫(kù)架構(gòu);
[0009] 圖5根據(jù)一個(gè)實(shí)施例示出發(fā)現(xiàn)階段的流程圖;
[0010] 圖6和圖7示出用于圖3和圖4所示的數(shù)據(jù)庫(kù)架構(gòu)的有向圖;
[0011] 圖8示出用于圖3所示的數(shù)據(jù)庫(kù)架構(gòu)的有向子圖;
[0012] 圖9根據(jù)一個(gè)實(shí)施例示出優(yōu)化階段的流程圖;
[0013] 圖10根據(jù)一個(gè)實(shí)施例示出優(yōu)化函數(shù)的流程圖;
[0014] 圖11根據(jù)一個(gè)實(shí)施例示出部署的流程圖;及
[0015] 圖12示出實(shí)施例在其中運(yùn)行的系統(tǒng)設(shè)置。 具體實(shí)施例
[0016] 在下面的描述中,為了解釋的目的,闡明了眾多具體的細(xì)節(jié)以便提供對(duì)本發(fā)明的 全面理解。但是,應(yīng)當(dāng)很明顯的是,本發(fā)明可以在沒(méi)有這些特定的細(xì)節(jié)的情況下實(shí)施。在其 它情況下,眾所周知的結(jié)構(gòu)和設(shè)備以框圖的形式來(lái)示出,以便避免不必要地使本發(fā)明變得 晦澀難懂。
[0017] 總體概況
[0018] 一實(shí)施例執(zhí)行大型關(guān)系型連接的自動(dòng)反規(guī)范化。使反規(guī)范化適合于集群的每個(gè)處 理單元中的查詢(xún)工作負(fù)荷和存儲(chǔ)器量。在圖1所示的一個(gè)實(shí)施例中,自動(dòng)反規(guī)范化具有三 個(gè)階段:⑴發(fā)現(xiàn)102 ;(ii)優(yōu)化104,及(iii)部署106。
[0019] 在發(fā)現(xiàn)階段中,該實(shí)施例為給定的架構(gòu)構(gòu)造表和連接條件的表示,并然后分析該 表示來(lái)找到可能的反規(guī)范化的集合。
[0020] 在優(yōu)化階段,任務(wù)是選擇最好利用了給定存儲(chǔ)器量的反規(guī)范化。優(yōu)化階段具有兩 個(gè)部分,(i)減少每個(gè)單獨(dú)的反規(guī)范化所需的存儲(chǔ)器量,以及(ii)確定可能的反規(guī)范化的 最優(yōu)集合。通過(guò)壓縮所涉及的表的列或行來(lái)減少存儲(chǔ)器。通過(guò)對(duì)每個(gè)可能的反規(guī)范化計(jì)算 成本和收益來(lái)發(fā)現(xiàn)可能的反規(guī)范化的最優(yōu)集合。成本是反規(guī)范化所需的存儲(chǔ)器量,并且該 成本基于查詢(xún)工作負(fù)荷統(tǒng)計(jì)數(shù)據(jù)或基于表的大小。該收益基于被反規(guī)范化消除的連接的數(shù) 量。最優(yōu)子集包括在可用存儲(chǔ)器中以最小成本提供最大收益的那些反規(guī)范化。
[0021] 在部署階段,該實(shí)施例將最優(yōu)集合中的每個(gè)反規(guī)范化整合到實(shí)時(shí)系統(tǒng)中,以便到 來(lái)的查詢(xún)能夠找到和使用該反規(guī)范化。
[0022] 詳細(xì)討論
[0023] 有許多種類(lèi)的關(guān)系型連接。一種是圖2所示的自然連接。在該連接中,基于列 DeptName連接兩張表,即Employee 202和Dept 204。自然連接被定義為滿(mǎn)足條件的兩張 表中的元組的合并,該條件為元組是兼容的。這意味著這兩張表具有至少一個(gè)共同的屬性。 在圖2示出的示例中,Employee表和Dept表都具有共同的DeptName。自然連接產(chǎn)生連接表 206,該連接表206只具有來(lái)自Dept表的、其DeptName列中的值與Employee表中DeptName 列中的值相匹配的條目。
[0024] 另一種連接是笛卡爾連接。如果連接中的兩張表沒(méi)有共同屬性,則這種連接產(chǎn)生 其中第一張表的每個(gè)元組與第二張表的每個(gè)元組合并的表。
[0025] 反規(guī)范化指連接的物化,或換句話說(shuō),連接的永久存儲(chǔ)的數(shù)據(jù)表示。因此,根據(jù)實(shí) 施例,反規(guī)范化可以是例如,連接表206的永久存儲(chǔ)的表示。連接的反規(guī)范化可以被重新用 于要求連接的多個(gè)查詢(xún)的計(jì)算,并通過(guò)消除重新計(jì)算整個(gè)連接的需要而提高這種計(jì)算的效 率。
[0026] 發(fā)現(xiàn)階段
[0027] 數(shù)據(jù)庫(kù)架構(gòu)通常包括表的集合,包括它們的列定義,以及可選的表之間的約束或 關(guān)系的集合。例如,TPC-H工作負(fù)荷具有圖3和圖4所示的數(shù)據(jù)庫(kù)架構(gòu)。在發(fā)現(xiàn)階段,如圖 5所示,系統(tǒng)在步驟502中根據(jù)給定的架構(gòu)創(chuàng)建有向圖,并然后在步驟504中遍歷該有向圖 以定位可能的反規(guī)范化的集合。
[0028] 圖 3 中的架構(gòu)包括下列表:Part 表 302、Supplier 表 304、PartSupp 表 306、 Customer 表 308、Nation 表 310、Region 表 312、Lineltem 表 314 和 Orders 表 316。圖 3 中 的架構(gòu)也指出表之間的引用約束。例如,下面的約束,
[0029] contraint->lineitem. orderkey references orders, orderkey,
[0030] 基于 LineItem 表中的 orderkey 引用 Orders 表中 orderkey。此外,partkey 弓丨 用 Lineltem 表、Part 表和 PartSupp 表;custkey 引 用 Order 表和 Customer 表;suppkey 引 用 Lineltem 表、Supplier 表和 PartSupp 表;nationkey 弓丨用 Customer 表、Supplier 表和 Nation 表;以及 regionkey 引用 Nation 表和 Region 表。
[0031] 用于TPC-H工作負(fù)荷的備選架構(gòu)如圖4中所示,包括下列表!LineOrder表402、 Customer 表 404、Supplier 表 406、Part 表 408 和 Date 表 410。也指出 了引用約束。 custkey 弓丨用 Customer ;suppkey 弓丨用 Supplier 表;partkey 弓丨用 Part 表,以及 orderdate 和 commitdate 引用 Date 表。
[0032] 圖6示出了根據(jù)圖3的架構(gòu)創(chuàng)建的有向圖。在圖6中,每個(gè)頂點(diǎn)602、604、606、608、 610、612、614、616是圖3的架構(gòu)中的表。每對(duì)頂點(diǎn)間的邊618、620、622、624、626、628、630、 632、634表示由頂點(diǎn)表示的表的對(duì)之間的有向關(guān)系,并且每條邊注釋有該兩張表之間的連 接條件。
[0033] 圖7示出了根據(jù)圖4的架構(gòu)創(chuàng)建的有向圖。同樣,頂點(diǎn)702、704、706、708、710表示 架構(gòu)中的表,并且邊712、714、716、718表示這些表之間的連接條件,并且注釋有這些條件。
[0034] 在圖6和圖7的有向圖中,用于注釋邊的信息是從相應(yīng)的架構(gòu)得到的。在另一個(gè)實(shí) 施例中,查詢(xún)工作負(fù)荷間接提供注釋邊所需的信息。注釋是通過(guò)分析最近的工作負(fù)荷或訓(xùn) 練工作負(fù)荷而推斷的。在實(shí)施例中,系統(tǒng)對(duì)給定的查詢(xún)集合進(jìn)行解析以找到