跳過樹形連接的制作方法
【專利說明】跳過樹形連接
[0001] 相關(guān)申請的交叉引用
[0002] 本申請要求于2012年9月27日提交的題為"Leapfrog Tree-Join"的美國臨時 申請No. 61/706, 484的權(quán)益。該申請的全部內(nèi)容通過引用合并到本文。
【背景技術(shù)】
[0003] 本發(fā)明大體涉及數(shù)據(jù)庫操作,并且更具體地涉及對關(guān)系數(shù)據(jù)庫表的連接操作。
[0004] 數(shù)據(jù)庫管理系統(tǒng)使得用戶可以存儲和更新大量信息,同時還支持對該信息的查 詢。對來自若干表的數(shù)據(jù)進(jìn)行組合是關(guān)系數(shù)據(jù)庫管理系統(tǒng)在進(jìn)行數(shù)據(jù)庫查詢時所使用的基 本操作。在連接操作中,一個或更多個條件指定應(yīng)該如何使每個參與表中的行相關(guān)聯(lián)以生 成查詢結(jié)果。盡管可以進(jìn)一步處理連接操作的輸出來生成查詢結(jié)果,但是一個或更多個連 接操作的成本在時間和空間二者方面通常是顯著的。提出了用于實現(xiàn)連接的若干算法,所 述連接包括分類合并連接、嵌套循環(huán)連接、索引嵌套循環(huán)連接以及散列連接。這些算法通常 用于在將更復(fù)雜的連接查詢分解為成對連接序列的情況下一次連接兩個表。
【發(fā)明內(nèi)容】
[0005] 實施方式包括一種用于根據(jù)關(guān)于連接屬性集S的連接條件集合對來自數(shù)據(jù)庫中 的表的集合的記錄進(jìn)行連接的方法、系統(tǒng)以及計算機(jī)程序產(chǎn)品。一方面包括:將連接屬性S 排列為有序排列Stl,以及將作用域C初始化為空。一方面包括:識別在數(shù)據(jù)庫表的集合中 的包括連接屬性A的表,所述連接屬性A是有序序列S tl的第一個。一方面包括:創(chuàng)建從S0 中刪掉了連接屬性A的連接屬性的新序列S'。一方面還包括:遍歷所識別的表中的每個表 按照連接屬性A的順序進(jìn)行迭代,所述迭代基于針對所識別的表中的每個表的樹形索引結(jié) 構(gòu),在所述樹形索引結(jié)構(gòu)中索引關(guān)鍵字包括所識別的表中的按照SJ頁序的所有連接屬性。 一方面還包括:針對在迭代期間定位的連接屬性的每個匹配值v,通過將"A = v"附加至作 用域C來創(chuàng)建新作用域Cv。一方面還包括:確定S'是否為空,并且基于確定出S'為空,輸 出對應(yīng)于作用域C的元組。一方面還包括:基于確定出S'不為空,將S tl設(shè)定為S'并且針 對每個作用域Cv,將C設(shè)定為Cv并且對識別、創(chuàng)建、迭代、添加以及確定進(jìn)行遞歸調(diào)用。
[0006] 通過本發(fā)明的技術(shù)來實現(xiàn)附加特征和優(yōu)點。在本文中詳細(xì)地描述了本發(fā)明的其他 實施方式和方面并且認(rèn)為本發(fā)明的其他實施方式和方面是要求保護(hù)的發(fā)明的一部分。為了 更好地理解具有優(yōu)點和特征的本發(fā)明,參照說明書并參照附圖。
【附圖說明】
[0007] 在說明書的結(jié)束部分處的權(quán)利要求書中具體指出并且清楚地主張被視為本發(fā)明 的主題。根據(jù)結(jié)合附圖所做的以下詳細(xì)描述,本發(fā)明的前述及其他特征和優(yōu)點變得明顯,在 附圖中:
[0008] 圖1描繪了根據(jù)實施方式的示例性方法的流程圖;
[0009] 圖2描繪了根據(jù)實施方式的可以在其上實現(xiàn)跳過樹形連接的系統(tǒng)的框圖。
【具體實施方式】
[0010] 示例性實施方式涉及用于一次計算多個數(shù)據(jù)庫表的連接的新型技術(shù),在本文中將 該新型技術(shù)稱為"跳過樹形連接"。跳過樹形連接對共享屬性的任意數(shù)量的表進(jìn)行同時的同 等連接。本文中描述的實施方式獲得比成對連接操作的組合更佳的復(fù)雜度約束(例如,在 輸入變得更多時可能需要較少的步驟)。
[0011] 可以如下進(jìn)行合并連接算法。作為初始假設(shè),可以考慮都包含屬性V的表札、 R2、……、&的集合,其中,表按V遞增的順序被物理地分類。通過使用游標(biāo)掃描每個表來 獲得表關(guān)于屬性V的合并連接。在游標(biāo)(;處具有最小V值的表R將Q前移直到Q處的值 至少為在任意游標(biāo)處的V的最大值。當(dāng)所有表一致為單個V值時,通過將V與每個表中查 詢所需的的其他屬性值進(jìn)行組合來生成輸出記錄。在傳統(tǒng)合并連接中,在表中存在具有值 V的多個記錄會導(dǎo)致針對單個V值的多個輸出記錄。
[0012] 除按V分類以外,還可以假設(shè)以上每個表具有關(guān)于V的樹形索弓丨。在實施方式中, 使用B樹結(jié)構(gòu),然而還可以使用替代的樹形結(jié)構(gòu),例如但不限于trie結(jié)構(gòu)。在使用樹形索 引的情況下,因為并非需要掃描每個V值,所以可以更有效地實現(xiàn)合并連接。例如,可以假 設(shè)表R 1具有關(guān)鍵字為{1、2、3、……、1000}的記錄,以及表1?2具有關(guān)鍵字為{1、750}的記 錄。然后,在算法經(jīng)過V = 1之后,任何游標(biāo)處的最大值為V = 750。系統(tǒng)可以在R1中的關(guān) 于V的索引中搜索750,而不是線性地掃描&直到到達(dá)V = 750為止。在尋找下一個項目 時,最壞情況下的復(fù)雜度在表的大小方面從線性下降至對數(shù)。使用簡單的樹遍歷技術(shù),在大 小為η的表中搜索關(guān)鍵字的遞增序列的總成本m具有復(fù)雜度O (m log (n/m))。
[0013] 如本文中所述,實施方式可以使用合并連接的變型,該變型稱為游標(biāo)連接。游標(biāo)連 接采用如上所述的樹形索引并且將與連接的"作用域(scope) "對應(yīng)的屬性值的元組SC作 為輸入。作用域從參與表中指定某些屬性值,并且僅與這些值匹配的記錄參與連接。
[0014] 通過在表中找到在SC中提及的屬性上與SC匹配的第一行來確定針對擁有連接屬 性的每個輸入關(guān)系的游標(biāo)。對每個輸入表給定適當(dāng)索引,可以有效地找到這些游標(biāo)位置。 一旦游標(biāo)中的一個游標(biāo)指向具有值在作用域外的屬性(即,不同于SC中的對應(yīng)屬性的值) 的輸入記錄,連接就終止。游標(biāo)連接像合并連接那樣起作用,不同之處在于游標(biāo)連接如何生 成其輸出。當(dāng)游標(biāo)連接遇到針對其所有參與表具有至少一個匹配記錄的連接屬性的新值V 時,游標(biāo)連接輸出等于SCU {A = v}的新作用域,其中A為連接屬性。即使V出現(xiàn)在參與 表的許多記錄中,但是僅輸出包含V的一個作用域?qū)嵗?br>[0015] 在一些實施方式中,跳過樹形連接對以任何形式共享屬性的任意數(shù)量的表札、 R2、……、艮進(jìn)行同時的同等連接。例如,查詢Q = R(A,B),S(B,C),T(A,C)具有三個連接 屬性A、B和C。通常,令4、……、Ak為連接屬性(即,在連接表達(dá)式中的兩個或更多個關(guān) 系中提及的那些)。首先,可以選擇屬性的排序。該順序確定在跳過樹形連接中的處理的 順序?;诓考碇械臄?shù)據(jù)的分布,不同順序會導(dǎo)致不同運(yùn)行時間。查詢優(yōu)化器選擇下述 順序:所述順序根據(jù)連接操作的成本模型以及建立并非已存在的任何所需索引的成本來使 期望成本最小化。為了簡化說明,并且不失一般性,假設(shè)所選擇的排序為Ord =〈4、……、 AkX
[0016] 在一些實施方式中,跳過樹形連接算法假設(shè):對于每個參與關(guān)系R,都存在按照與 Ord -致的順序的、對來自R的連接屬性的組合的索引。對于以上查詢Q,并且在連接屬性 的排序為A、B、C的情況下,可以期望針對R的關(guān)于(A,B)的索引、針對S的關(guān)于(B,C)的索 引以及針對T的關(guān)于(A,C)的索引。如果這樣的索引在連接之前不存在,則可以建立索引 以應(yīng)用跳過樹形連接算法。為了提高訪問的局部性,在連接屬性之后還可以包括查詢所需 的非連接屬性,作為被索引屬性。通過以這種方式包括非連接屬性,實現(xiàn)了僅索引設(shè)計。在 一些實施方式中,如果需要將索引存儲在次級存儲器上,則需要進(jìn)行分配以使得葉節(jié)點以 靠近-相鄰的方式按順序被存儲。
[0017] 在一些實施方式中,跳過樹形連接通過關(guān)于第一連接屬性A1按順序地連接表來開 始。其屬性中包括A 1的所有表參與關(guān)于協(xié)同游標(biāo)連接。該最初游標(biāo)連接的作用域為 標(biāo)注為□的空作用域。在通過游標(biāo)連接生成針對4的每個值a ^寸,暫停外部A 1連接的執(zhí) 行,并且在包括A2的所有表中,利用作用域[A1= aj啟動對^的內(nèi)部游標(biāo)連接。針對在該 內(nèi)部連接中還包括A1的表,作用域[A1= aj將內(nèi)部連接限制為參與關(guān)系的僅-片段。因 為索引按〈Αρ......、Ak>順序存在于每個關(guān)系上,所以游標(biāo)連接可以順序地行進(jìn)通過在每個 層級處的每個索引,并且不需要重識別每個調(diào)用上的開始游標(biāo)。
[0018] 在一些實施方式中,其余的連接以類似于上述的形式遞歸地進(jìn)行。當(dāng)生成針對Aj 的值\_時,暫停執(zhí)行操作并且利用由A」=a 展的作用域來啟動對A μ的內(nèi)部游標(biāo)連接。 在最后層級Ak,通過游標(biāo)連接生成具有形式(&1,……,a k)的輸出元組,包括查詢所需的所有 連接屬性。最后層級輸出為跳過樹形連接的輸出。在完成關(guān)于Aj+1的每個游標(biāo)連接之后, 控制返回至對A j的游標(biāo)連接,其中,屬性A」的下一個匹配值被識別并且對A j+1的新游標(biāo)連 接被啟動。當(dāng)A1的最后匹配值被處理并且最外游標(biāo)連接完成時,算法結(jié)束。
[0019] 如果在跳過樹形連接中連接屬性的順序Ord =〈Αρ……、