專利名稱::行與列數(shù)據(jù)庫(kù)表在原生方向上的混合聯(lián)接的制作方法
技術(shù)領(lǐng)域:
:本發(fā)明涉及在數(shù)據(jù)庫(kù)中存儲(chǔ)數(shù)據(jù),尤其是涉及處理數(shù)據(jù)庫(kù)查詢。
背景技術(shù):
:除非在本文中指出,否則在該部分描述的解決方案并非本申請(qǐng)要求保護(hù)的內(nèi)容的現(xiàn)有技術(shù),而且并通過被包括在該部分中而被認(rèn)定為是現(xiàn)有技術(shù)。數(shù)據(jù)庫(kù)是以結(jié)構(gòu)化方式存儲(chǔ)數(shù)據(jù)的電子存檔系統(tǒng)。數(shù)據(jù)庫(kù)的基本存儲(chǔ)結(jié)構(gòu)是表。數(shù)據(jù)庫(kù)可以包括多個(gè)表,并且每個(gè)表可以保存特定類型的信息。數(shù)據(jù)庫(kù)表按照水平的行與垂直的列來存儲(chǔ)和組織數(shù)據(jù)。行一般對(duì)應(yīng)于真實(shí)世界的實(shí)體或關(guān)系,其在表中代表各個(gè)記錄。列可以指示那些實(shí)體或關(guān)系的特定屬性,例如“姓名”、“地址”或“電話號(hào)碼”。例如,公司X可以具有包含列出其客戶的姓名、地址和電話號(hào)碼的“客戶”表的數(shù)據(jù)庫(kù)。每一行可以代表單個(gè)客戶,并且列可以代表每個(gè)客戶的姓名、地址和電話號(hào)碼。數(shù)據(jù)庫(kù)通常被存儲(chǔ)在一維的計(jì)算機(jī)存儲(chǔ)器中。因此,二維數(shù)據(jù)庫(kù)表必須被映射到要存儲(chǔ)在數(shù)據(jù)庫(kù)內(nèi)的一維數(shù)據(jù)結(jié)構(gòu)。一種映射方案包括在數(shù)據(jù)庫(kù)內(nèi)對(duì)表進(jìn)行逐行存儲(chǔ)(即,面向行的存儲(chǔ)模型)。這種方案將關(guān)于單個(gè)實(shí)體的信息保存在一起。例如,逐行存儲(chǔ)可以首先存儲(chǔ)關(guān)于第一個(gè)客戶的所有信息,然后存儲(chǔ)關(guān)于第二個(gè)客戶的所有信息,諸如此類??商鎿Q地,可以在數(shù)據(jù)庫(kù)內(nèi)對(duì)表進(jìn)行逐列存儲(chǔ)(即,面向列的存儲(chǔ)模型)。這種方案將不同實(shí)體的類似屬性保存在一起。例如,逐列存儲(chǔ)可以首先存儲(chǔ)所有的客戶名稱,然后存儲(chǔ)所有的客戶地址,諸如此類。通常,必須按照與數(shù)據(jù)存儲(chǔ)相同的方式從表中訪問數(shù)據(jù)。也就是說,傳統(tǒng)的計(jì)算機(jī)存儲(chǔ)技術(shù)需要能夠訪問特定類型的存儲(chǔ)模型的專用查詢算子。例如,行查詢算子被用來處理在數(shù)據(jù)庫(kù)中以行格式存儲(chǔ)模型存儲(chǔ)的數(shù)據(jù),且列查詢算子被用來處理以列格式存儲(chǔ)模型存儲(chǔ)的數(shù)據(jù)。因而,選擇使用哪一種存儲(chǔ)模型常常取決于將如何使用數(shù)據(jù)。面向行的存儲(chǔ)模型一般很適合用于事務(wù)性查詢,而面向列的存儲(chǔ)模型一般很適合用于分析性查詢。因此,傳統(tǒng)的查詢處理方案與被查詢的數(shù)據(jù)庫(kù)的基本存儲(chǔ)模型緊密相關(guān)。然而,實(shí)際上,以列格式存儲(chǔ)模型存儲(chǔ)某些數(shù)據(jù)的數(shù)據(jù)庫(kù)可能被要求處理涉及那些數(shù)據(jù)的事務(wù)性查詢,或是以行格式存儲(chǔ)模型存儲(chǔ)某些數(shù)據(jù)的數(shù)據(jù)庫(kù)可能被要求處理涉及那些數(shù)據(jù)的分析性查詢。例如,以行格式存儲(chǔ)模型存儲(chǔ)數(shù)據(jù)的數(shù)據(jù)庫(kù)可能接收需要數(shù)據(jù)的事務(wù)性和分析性處理的混合的查詢集合。響應(yīng)于這種混合的查詢集合,查詢引擎可以設(shè)法執(zhí)行混合聯(lián)接(join)操作。在2010年12月30日提交了標(biāo)題為“ProcessingDatabaseQueriesUsingFormatConversions”的美國(guó)專利申請(qǐng)N0.12/982,673,并且為此其整體通過參考被并入于此。該專利申請(qǐng)描述了以基于轉(zhuǎn)換的方式來間接執(zhí)行混合聯(lián)接。根據(jù)這種解決方案的某些實(shí)施例,行表數(shù)據(jù)被轉(zhuǎn)換成列格式,然后在列引擎中執(zhí)行聯(lián)接,或者列表數(shù)據(jù)被轉(zhuǎn)換成行格式,然后在行引擎中執(zhí)行聯(lián)接。然而,混合聯(lián)接的轉(zhuǎn)換開銷對(duì)于性能和存儲(chǔ)器消耗并非是無關(guān)緊要的。因此,在涉及性能臨界負(fù)荷的情況下可能不希望使用基于轉(zhuǎn)換的混合聯(lián)接查詢。因此,本公開利用實(shí)現(xiàn)無轉(zhuǎn)換的原生混合聯(lián)接功能的系統(tǒng)和方法來解決此問題以及其他問題。
發(fā)明內(nèi)容數(shù)據(jù)庫(kù)的列與行表之間的混合聯(lián)接采用如下算法:即其識(shí)別行和列存儲(chǔ)二者,并能夠?qū)μ幱谠?native)形式(行或列)的數(shù)據(jù)執(zhí)行而無需方向之間的轉(zhuǎn)換。原生混合聯(lián)接算法訪問列表(columntable)的列詞典以用于高效的聯(lián)接處理。原生混合聯(lián)接算法也可以采用倒排索引(如果存在的話)來搜索具有給定值的記錄(例如,docid)。具體而言,原生混合聯(lián)接算法在列詞典中查找聯(lián)接條件,同時(shí)迭代行表(rowtable)并以流水線的方式返回匹配的記錄。一種計(jì)算機(jī)實(shí)現(xiàn)的方法,包括:在非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中訪問在應(yīng)用層語言中創(chuàng)建的數(shù)據(jù)庫(kù),所述數(shù)據(jù)庫(kù)包括行存儲(chǔ)表和列存儲(chǔ)表,所述列存儲(chǔ)表具有列詞典;迭代行表內(nèi)的記錄;使列引擎參考所述列詞典以獲得聯(lián)接條件;以及返回匹配的記錄以創(chuàng)建聯(lián)接表,所述聯(lián)接表包括來自處于原生狀態(tài)的行存儲(chǔ)表和列存儲(chǔ)表的數(shù)據(jù)。一個(gè)非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)的實(shí)施例包含用于執(zhí)行方法的計(jì)算機(jī)程序,所述方法包括:在非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中訪問在應(yīng)用層語言中創(chuàng)建的數(shù)據(jù)庫(kù),所述數(shù)據(jù)庫(kù)包括行存儲(chǔ)表和列存儲(chǔ)表,所述列存儲(chǔ)表具有列詞典;迭代行表內(nèi)的記錄;使列引擎參考所述列詞典以獲得聯(lián)接條件;以及返回匹配的記錄以創(chuàng)建聯(lián)接表,所述聯(lián)接表包括來自處于原生狀態(tài)的行存儲(chǔ)表和列存儲(chǔ)表的數(shù)據(jù)。一種計(jì)算機(jī)系統(tǒng)的實(shí)施例,包括:一個(gè)或多個(gè)處理器;能夠運(yùn)行在所述計(jì)算機(jī)系統(tǒng)上的軟件程序,所述軟件程序被配置成:在非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中訪問在應(yīng)用層語言中創(chuàng)建的數(shù)據(jù)庫(kù),所述數(shù)據(jù)庫(kù)包括行存儲(chǔ)表和列存儲(chǔ)表,所述列存儲(chǔ)表具有列詞典;迭代行表內(nèi)的記錄;使列引擎參考所述列詞典以獲得聯(lián)接條件;以及返回匹配的記錄以創(chuàng)建聯(lián)接表,所述聯(lián)接表包括來自處于原生狀態(tài)的行存儲(chǔ)表和列存儲(chǔ)表的數(shù)據(jù)。一些實(shí)施例還可以包括:參考所述列表的倒排索引以獲得聯(lián)接條件。根據(jù)一些實(shí)施例,參考所述列詞典以獲得聯(lián)接條件可以包括:創(chuàng)建中間結(jié)構(gòu)。在一些實(shí)施例中,所述中間結(jié)構(gòu)可以包括來自所述列存儲(chǔ)表的值與來自所述行存儲(chǔ)表的行標(biāo)識(shí)之間的映射。在一些實(shí)施例中,所述聯(lián)接條件可以包括外鍵(foreignkey)聯(lián)接,以使得所述行表的列不包含重復(fù)值。在一些實(shí)施例中,所述聯(lián)接條件可以包括N對(duì)M聯(lián)接,并且還包括維持來自行表的關(guān)于迭代值的哈希表,以避免對(duì)同一值參考列詞典。以下詳細(xì)的說明和附圖提供了對(duì)本發(fā)明的本質(zhì)和優(yōu)點(diǎn)的更好的理解。圖1示出根據(jù)實(shí)施例的混合聯(lián)接的高度簡(jiǎn)化示意圖。圖2示出外鍵混合聯(lián)接的一個(gè)實(shí)施例的簡(jiǎn)化示意圖。圖3示出根據(jù)示例的要被查詢的數(shù)據(jù)庫(kù)。圖3A是示出根據(jù)混合聯(lián)接算法的實(shí)施例的步驟的流程圖。圖3B-3I是原生混合聯(lián)接算法的各種步驟的簡(jiǎn)化示意圖。圖4示出外鍵N對(duì)M混合聯(lián)接的一個(gè)實(shí)施例的簡(jiǎn)化示意5描述關(guān)于原生混合聯(lián)接和基于轉(zhuǎn)換的混合聯(lián)接的相對(duì)耗用時(shí)間與基數(shù)比。圖6圖示被配置成實(shí)現(xiàn)根據(jù)實(shí)施例的原生混合聯(lián)接的專用計(jì)算機(jī)制的硬件。圖7示出計(jì)算機(jī)系統(tǒng)的示例。圖8示出詞典編碼的列表中列的簡(jiǎn)化物理表示。具體實(shí)施例方式這里描述的是關(guān)于數(shù)據(jù)庫(kù)內(nèi)的列與行表之間的混合聯(lián)接操作的性能優(yōu)化的技術(shù)。根據(jù)一個(gè)實(shí)施例,數(shù)據(jù)庫(kù)列與行表之間的混合聯(lián)接采用如下算法:即其知曉行與列存儲(chǔ)二者,并能夠?qū)μ幱谠问降臄?shù)據(jù)直接執(zhí)行而無需進(jìn)行方向之間的轉(zhuǎn)換。列表包括關(guān)于每一列的列詞典。可選地,詞典包含倒排索引,以搜索具有給定值的記錄(例如docid)。原生混合聯(lián)接算法采用列詞典和倒排索引,以用于高效的聯(lián)接處理。特別是,原生混合聯(lián)接算法在列詞典中查找聯(lián)接條件,同時(shí)迭代行表并以流水線的方式返回匹配的記錄。圖1示出根據(jù)實(shí)施例的混合聯(lián)接算法100的功能的通用視圖。在第一步驟102中,迭代行表104內(nèi)的記錄。第二步驟106包括針對(duì)每一個(gè)聯(lián)接條件在列表108中的列詞典查找。在第三步驟110中,返回匹配的記錄。圖2表示在其中存在倒排索引且倒排索引可用的情況下,在外鍵混合聯(lián)接(I對(duì)N)算法的上下文中的混合聯(lián)接的實(shí)施例的細(xì)節(jié)。對(duì)于外鍵(FK)聯(lián)接,可以假設(shè)行表的聯(lián)接列不具有重復(fù)值。因此,能夠?qū)τ讷@取的行表記錄中的每一值來訪問列詞典。根據(jù)FK混合聯(lián)接算法200的第一步驟202,從行表206中獲取N個(gè)記錄205。在此,獲取的記錄具有值為“Bravo'“Charlie”和“Apple”。在第二步驟208中,參考列詞典210以為聯(lián)接列的每一個(gè)獲取的記錄提供值標(biāo)識(shí)(vid)。根據(jù)該信息,可以創(chuàng)建中間結(jié)構(gòu)以供稍后使用。例如,圖2示出列詞典的值id(vid,也是“值-1d(value-1d)”)與來自行表的行id(rs_rid)之間的映射212(〈vid,rs_rid>)。在第三步驟214中,通過參考倒排索引216,根據(jù)值-1d而獲得列表的docid。由此,匹配的列表記錄中的使用的列可以被具體化。具體化匹配的列表記錄中的使用的列的原因是,避免在父算子中針對(duì)每個(gè)列訪問從列詞典中檢索值。最后,在第四步驟220中,<rs_rid,cs_rid>對(duì)被放入中間結(jié)果緩沖器222中。找到具有vid的對(duì)應(yīng)的rs_rid,同時(shí)掃描匹配的docid。具體化聯(lián)接的記錄的使用的列(docid)。圖3-31是圖示在公司目錄的具體上下文中使用混合聯(lián)接操作的示例的簡(jiǎn)化圖。特別是,如圖3所示,在數(shù)據(jù)庫(kù)中存儲(chǔ)的信息包括部門名稱(dname)、部門位置(location)和雇員姓名(ename)。部門名稱和部門位置在行存儲(chǔ)表300中被存儲(chǔ)為列。為行表中的每一行指定行標(biāo)識(shí)符(rid)。雇員姓名(ename)和部門名稱(dname)在列存儲(chǔ)表302中被存儲(chǔ)為列。為列表中的每一行指定文件標(biāo)識(shí)符(doc_id)。列詞典304也被存儲(chǔ)為列表的一部分。列詞典304包括一列中不同的值與每個(gè)不同的值的值id(vid)之間的映射。倒排索引是一種可選結(jié)構(gòu),包括關(guān)于每個(gè)值id(vid)的記錄標(biāo)識(shí)符(doc_id)。倒排索引可以被用來快速查找與給定vid對(duì)應(yīng)的doc_id。在不存在倒排索引的情況下,可以通過掃描整個(gè)列并找到與給定vid匹配的doc_id來搜索doc_id。對(duì)于剛剛描述的數(shù)據(jù)庫(kù),用戶可以做出請(qǐng)求雇員位置的標(biāo)識(shí)的查詢。響應(yīng)于此,表需要聯(lián)接行存儲(chǔ)表與列存儲(chǔ)表。特別是,可以使用以下形式的聯(lián)接查詢309:權(quán)利要求1.一種計(jì)算機(jī)實(shí)現(xiàn)的方法,包括:在非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中訪問在應(yīng)用層語言中創(chuàng)建的數(shù)據(jù)庫(kù),所述數(shù)據(jù)庫(kù)包括行存儲(chǔ)表和列存儲(chǔ)表,所述列存儲(chǔ)表具有列詞典;迭代行表內(nèi)的記錄;使列引擎參考所述列詞典以獲得聯(lián)接條件;以及返回匹配的記錄以創(chuàng)建聯(lián)接表,所述聯(lián)接表包括來自處于原生狀態(tài)的行存儲(chǔ)表和列存儲(chǔ)表的數(shù)據(jù)。2.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,還包括:參考所述列表的倒排索引以獲得聯(lián)接條件。3.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,參考所述列詞典以獲得聯(lián)接條件包括:創(chuàng)建中間結(jié)構(gòu)。4.根據(jù)權(quán)利要求3所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,所述中間結(jié)構(gòu)包括:來自所述列存儲(chǔ)表的值與來自所述行存儲(chǔ)表的行標(biāo)識(shí)之間的映射。5.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,所述聯(lián)接條件包括外鍵聯(lián)接,以使得所述行表的列不具有重復(fù)值。6.根據(jù)權(quán)利要求1所述的計(jì)算機(jī)實(shí)現(xiàn)的方法,其中,所述聯(lián)接條件包括N對(duì)M聯(lián)接,所述方法還包括:維持關(guān)于來自行表的迭代值的哈希表,以避免針對(duì)同一值參考列詞典。7.一種非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),包含用于執(zhí)行方法的計(jì)算機(jī)程序,所述方法包括:在非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中訪問在應(yīng)用層語言中創(chuàng)建的數(shù)據(jù)庫(kù),所述數(shù)據(jù)庫(kù)包括行存儲(chǔ)表和列存儲(chǔ)表,所述列存儲(chǔ)表具有列詞典;迭代行表內(nèi)的記錄;使列引擎參考所述列詞典以獲得聯(lián)接條件;以及返回匹配的記錄以創(chuàng)建聯(lián)接表,所述聯(lián)接表包括來自處于原生狀態(tài)的行存儲(chǔ)表和列存儲(chǔ)表的數(shù)據(jù)。8.根據(jù)權(quán)利要求7所述的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),還包括:用于參考所述列表的倒排索引以獲得聯(lián)接條件的代碼。9.根據(jù)權(quán)利要求7所述的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,參考所述列詞典以獲得聯(lián)接條件包括創(chuàng)建中間結(jié)構(gòu)。10.根據(jù)權(quán)利要求9所述的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,所述中間結(jié)構(gòu)包括:來自所述列存儲(chǔ)表的值與來自所述行存儲(chǔ)表的行標(biāo)識(shí)之間的映射。11.根據(jù)權(quán)利要求7所述的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,所述聯(lián)接條件包括外鍵聯(lián)接,以使得所述行表的列不具有重復(fù)值。12.根據(jù)權(quán)利要求7所述的非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),其中,所述聯(lián)接條件包括N對(duì)M聯(lián)接,所述非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)還包括:用于維持關(guān)于來自行表的迭代值的哈希表以避免針對(duì)同一值參考列詞典的代碼。13.一種計(jì)算機(jī)系統(tǒng),包括:一個(gè)或更多個(gè)處理器;可運(yùn)行在所述計(jì)算機(jī)系統(tǒng)上的軟件程序,所述軟件程序被配置成:在非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)中訪問在應(yīng)用層語言中創(chuàng)建的數(shù)據(jù)庫(kù),所述數(shù)據(jù)庫(kù)包括行存儲(chǔ)表和列存儲(chǔ)表,所述列存儲(chǔ)表具有列詞典;迭代行表內(nèi)的記錄;使列引擎參考所述列詞典以獲得聯(lián)接條件;以及返回匹配的記錄以創(chuàng)建聯(lián)接表,所述聯(lián)接表包括來自處于原生狀態(tài)的行存儲(chǔ)表和列存儲(chǔ)表的數(shù)據(jù)。14.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)系統(tǒng),其中,所述軟件代碼被配置成參考所述列表的倒排索引以獲得聯(lián)接條件。15.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)系統(tǒng),其中,參考所述列詞典以獲得聯(lián)接條件包括創(chuàng)建中間結(jié)構(gòu)。16.根據(jù)權(quán)利要求15所述的計(jì)算機(jī)系統(tǒng),其中,所述中間結(jié)構(gòu)包括:來自所述列存儲(chǔ)表的值與來自所述行存儲(chǔ)表的行標(biāo)識(shí)之間的映射。17.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)系統(tǒng),其中,所述聯(lián)接條件包括外鍵聯(lián)接,以使得所述行表的列不具有重復(fù)值。18.根據(jù)權(quán)利要求13所述的計(jì)算機(jī)系統(tǒng),其中,所述聯(lián)接條件包括N對(duì)M聯(lián)接,所述非臨時(shí)性計(jì)算機(jī)可讀存儲(chǔ)介質(zhì)還包括:用于維持關(guān)于來自行表的迭代值的哈希表以避免針對(duì)同一值參考列詞典的代碼。全文摘要一種數(shù)據(jù)庫(kù)列與行表之間的混合聯(lián)接采用如下算法即其識(shí)別行與列存儲(chǔ)二者,并能夠?qū)μ幱谠螒B(tài)形式(行或列)的數(shù)據(jù)執(zhí)行而無需進(jìn)行方向之間的轉(zhuǎn)換。原生混合聯(lián)接算法訪問列表的列詞典以用高效的聯(lián)接過程。原生混合聯(lián)接算法也可以利用倒排索引(如果存在的話)來搜索具有給定值的記錄(例如,docid)。特別是,原生混合聯(lián)接算法在列詞典中查找聯(lián)接條件,同時(shí)迭代行表并以流水線的方式返回匹配的記錄。文檔編號(hào)G06F17/30GK103164507SQ201210461649公開日2013年6月19日申請(qǐng)日期2012年9月28日優(yōu)先權(quán)日2011年12月12日發(fā)明者Y·尹,C·鄭,S·K·車申請(qǐng)人:Sap股份公司