两个人的电影免费视频_国产精品久久久久久久久成人_97视频在线观看播放_久久这里只有精品777_亚洲熟女少妇二三区_4438x8成人网亚洲av_内谢国产内射夫妻免费视频_人妻精品久久久久中国字幕

數(shù)據(jù)庫表索引的制作方法

文檔序號(hào):11545230閱讀:240來源:國知局
數(shù)據(jù)庫表索引的制造方法與工藝

本發(fā)明一般而言涉及數(shù)據(jù)庫技術(shù)。更具體而言,本發(fā)明針對用于響應(yīng)于請求而訪問數(shù)據(jù)庫表的索引以及確定符合請求的數(shù)據(jù)庫表的最明確的數(shù)據(jù)記錄(行)。



背景技術(shù):

給數(shù)據(jù)庫表加索引以便以直接或加速的方式訪問數(shù)據(jù)記錄是已知的。索引是一種元數(shù)據(jù)結(jié)構(gòu),它提高了對數(shù)據(jù)庫表的數(shù)據(jù)檢索操作的速度,但是以維護(hù)索引數(shù)據(jù)結(jié)構(gòu)的存儲(chǔ)空間為代價(jià)。索引被用來快速定位數(shù)據(jù),而不必在每次數(shù)據(jù)庫表被訪問時(shí)搜索數(shù)據(jù)庫表中的每一行。索引可以利用數(shù)據(jù)庫表的一個(gè)或多個(gè)列來創(chuàng)建,從而為快速隨機(jī)查找和有序記錄的高效訪問都提供基礎(chǔ)。

各種數(shù)據(jù)庫相關(guān)的應(yīng)用中的特定任務(wù)是僅檢索數(shù)據(jù)庫表中作為滿足檢索請求的最明確行的行。因此,響應(yīng)于請求,數(shù)據(jù)庫應(yīng)用以最明確的方式確定數(shù)據(jù)庫表中對應(yīng)于輸入?yún)?shù)或標(biāo)準(zhǔn)的一行。為此,一般在數(shù)據(jù)庫表中給出行之間明確性的層次結(jié)構(gòu)。

用于確定數(shù)據(jù)庫表中最明確的一行的已知做法使用rete算法。rete算法是用于例如實(shí)現(xiàn)生產(chǎn)規(guī)則系統(tǒng)(例如,自動(dòng)規(guī)劃、專家系統(tǒng)和行動(dòng)選擇系統(tǒng))的模式匹配算法。它的使用是為了確定與輸入標(biāo)準(zhǔn)匹配的所有規(guī)則。之后,執(zhí)行所謂的“沖突解決”,其使用所確定的規(guī)則中的次序來識(shí)別要返回的一個(gè)規(guī)則。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目標(biāo)是提供特別促進(jìn)確定滿足檢索請求的輸入?yún)?shù)的一個(gè)最明確的數(shù)據(jù)庫表行的數(shù)據(jù)庫表索引。另一個(gè)目標(biāo)是提供具有特別緊湊的數(shù)據(jù)表示的數(shù)據(jù)庫表索引,從而最小化存儲(chǔ)器需求。另一個(gè)目標(biāo)是提供明確地解決現(xiàn)有技術(shù)水平的計(jì)算機(jī)系統(tǒng)的內(nèi)部體系架構(gòu)和存儲(chǔ)器維度并且被優(yōu)化以在處理器高速緩存中維護(hù)的數(shù)據(jù)庫表索引,從而促進(jìn)最明確的數(shù)據(jù)庫表行的高性能確定。還有一個(gè)目標(biāo)是提供使得能夠進(jìn)行確定性響應(yīng)處理的數(shù)據(jù)庫表索引。

根據(jù)一方面,通過確定數(shù)據(jù)庫表中最明確的一行的方法來解決這些目標(biāo)。數(shù)據(jù)庫表由計(jì)算機(jī)系統(tǒng)維護(hù)。數(shù)據(jù)庫表由多行和多列形成。數(shù)據(jù)庫表的行和列形成單元格。每個(gè)單元格包括至少一個(gè)值或者不包括值。計(jì)算機(jī)系統(tǒng)還維護(hù)用于數(shù)據(jù)庫表的索引。

索引包括用于數(shù)據(jù)庫表的每一列的相應(yīng)索引結(jié)構(gòu)。每個(gè)索引結(jié)構(gòu)包括兩種類型的子結(jié)構(gòu),即,用于在相應(yīng)列中出現(xiàn)的每個(gè)值的相應(yīng)指針元組陣列和與該列的沒有值的單元格相關(guān)的位圖。每個(gè)指針元組包括指示在列中出現(xiàn)的值之一的第一指針和指示該值在其中出現(xiàn)的數(shù)據(jù)庫表的行的第二指針。位圖指示相應(yīng)列中沒有值的所有單元格。索引還指示數(shù)據(jù)庫表的行的明確性次序。

確定最明確的一行的方法包括以下活動(dòng):

計(jì)算機(jī)系統(tǒng)接收指示與相應(yīng)輸入值相關(guān)聯(lián)的數(shù)據(jù)庫表的列的請求。然后,計(jì)算機(jī)系統(tǒng)以遞增方式針對請求中指示的每個(gè)列處理請求。對于每一列,計(jì)算機(jī)系統(tǒng)使用用于該列的索引結(jié)構(gòu)的位圖來維護(hù)數(shù)據(jù)庫表中在所考慮列的單元格中不包含值的所有行。此外,對于每一列,計(jì)算機(jī)系統(tǒng)使用用于該列的索引結(jié)構(gòu)的指針元組來過濾數(shù)據(jù)庫表中不包括相應(yīng)輸入值的所有行。在已經(jīng)處理了具有請求的相應(yīng)輸入值的所有列之后,計(jì)算機(jī)系統(tǒng)從剩余的行(即,在列的遞增處理期間沒有被過濾的行)中選擇明確性次序中最高的一行。最后,計(jì)算機(jī)系統(tǒng)返回所確定的行的至少一個(gè)單元格的值。

根據(jù)另一方面,提供了一種布置成執(zhí)行確定數(shù)據(jù)庫表中最明確的一行的相應(yīng)方法的計(jì)算機(jī)系統(tǒng)。

根據(jù)還有的另一方面,提供了一種用于指示計(jì)算機(jī)系統(tǒng)執(zhí)行確定數(shù)據(jù)庫表中最明確的一行的方法的計(jì)算機(jī)程序。

其它方面由從屬權(quán)利要求闡述。

附圖說明

本發(fā)明將參考附圖進(jìn)行描述。類似的標(biāo)號(hào)一般指示完全相同或功能相似的元件。

圖1示出了具有數(shù)據(jù)庫表的數(shù)據(jù)庫。

圖2是數(shù)據(jù)庫表和請求的通用例子。

圖3示出了如本文所述的索引的結(jié)構(gòu)。

圖4示出了用于圖2的數(shù)據(jù)庫表的索引的通用例子。

圖5給出了利用索引的請求處理的通用例子。

圖6是示例性請求處理的流程圖。

圖7示出了存儲(chǔ)器中的指針元組的陣列的示例性布置。

圖8示出了指針元組的陣列上的二分搜索。

圖9示出了示例性索引生成。

圖10是包括索引生成和最明確行確定的整個(gè)過程的高級流程圖。

圖11示意性地示出了計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中數(shù)據(jù)庫表和索引的維護(hù)。

圖12示出了作為數(shù)據(jù)庫表的例子的路由表。

圖13是實(shí)現(xiàn)數(shù)據(jù)庫的計(jì)算機(jī)系統(tǒng)和/或請求客戶端的內(nèi)部體系架構(gòu)的示例性示意圖。

具體實(shí)施方式

本文描述的索引促進(jìn)訪問由數(shù)據(jù)庫系統(tǒng)維護(hù)的數(shù)據(jù)庫表。本文使用的術(shù)語“數(shù)據(jù)庫”涵蓋以表的形式保存靜態(tài)或動(dòng)態(tài)數(shù)據(jù)的所有種類的數(shù)據(jù)存儲(chǔ)庫。這些種類的數(shù)據(jù)存儲(chǔ)庫包括例如關(guān)系數(shù)據(jù)庫系統(tǒng)(諸如oracle數(shù)據(jù)庫、microsoftsqlserver、microsoftaccess),諸如postgresql的對象關(guān)系數(shù)據(jù)庫系統(tǒng),諸如專家系統(tǒng)和動(dòng)作選擇系統(tǒng)引擎的生產(chǎn)規(guī)則系統(tǒng)(例如,維護(hù)用于技術(shù)設(shè)備的修復(fù)和維護(hù)動(dòng)作的專家系統(tǒng)),網(wǎng)絡(luò)和控制元件,諸如路由器(具有路由表),網(wǎng)絡(luò)管理節(jié)點(diǎn)(具有在表中維護(hù)的日志和/或控制數(shù)據(jù))或scada系統(tǒng)(也以表的形式維護(hù)日志和/或控制數(shù)據(jù)),以及在諸如microsoftexcel電子表格或制表符文本文件(例如,csv文件)等簡單表中保存數(shù)據(jù)的專有系統(tǒng)。

一般而言,數(shù)據(jù)庫在諸如數(shù)據(jù)庫服務(wù)器或網(wǎng)絡(luò)節(jié)點(diǎn)的計(jì)算機(jī)系統(tǒng)上實(shí)現(xiàn)。數(shù)據(jù)庫被布置成接收指定搜索標(biāo)準(zhǔn)(下文中稱為“輸入值”)的檢索請求(下文中簡稱為“請求”),以通過對照至少一個(gè)數(shù)據(jù)庫表檢查輸入值來處理請求、確定數(shù)據(jù)庫表中滿足輸入值的數(shù)據(jù)記錄并且返回這個(gè)數(shù)據(jù)記錄的一個(gè)或多個(gè)值。為此,數(shù)據(jù)庫使用任何類型的數(shù)據(jù)庫語言并且配備有本領(lǐng)域中已知的任何類型的通信接口。請求的發(fā)起者是例如查詢數(shù)據(jù)庫1的局域網(wǎng)(lan)中或遠(yuǎn)程網(wǎng)絡(luò)中的客戶端(計(jì)算機(jī)、移動(dòng)站、應(yīng)用等)。

如圖1所示,數(shù)據(jù)庫1維護(hù)至少一個(gè)數(shù)據(jù)庫表2。數(shù)據(jù)庫表2由多個(gè)行3和多個(gè)列4構(gòu)成。數(shù)據(jù)庫表的每個(gè)行3包括數(shù)據(jù)記錄,數(shù)據(jù)庫表的每個(gè)列4構(gòu)成數(shù)據(jù)記錄的屬性,一般是根據(jù)數(shù)據(jù)模型(諸如關(guān)系數(shù)據(jù)庫管理模型)。行3和列4的組合形成單元格5。一般而言,數(shù)據(jù)庫表2中可以存在任何數(shù)量的行3和列4。由于可以添加或刪除數(shù)據(jù)記錄,因此尤其是行3的數(shù)量是不固定,而且可能隨時(shí)間變化。數(shù)據(jù)庫2還可以包括重新定義或更改數(shù)據(jù)模型的機(jī)制,即,列的數(shù)量也可以改變。

數(shù)據(jù)庫表的單元格5或者包含至少一個(gè)值或者不包含值(圖2)。單元格中的值一般是根據(jù)如數(shù)據(jù)模型規(guī)定的為相應(yīng)列定義的數(shù)據(jù)類型。數(shù)據(jù)類型包括例如布爾(即,值為“真”和“假”)、整數(shù)、浮點(diǎn)數(shù)、字符、字符串、指針以及復(fù)雜的功能數(shù)據(jù)類型,諸如日期。在單元格5中可以存在多于一個(gè)值,即,單元格5可以包括值的向量或列表,例如,根據(jù)數(shù)據(jù)類型,以值的數(shù)組、記錄、集合、枚舉或的對象的形式。

沒有值的單元格5可以包括通配符,諸如null或*。這些通配符指定值不存在,即,相應(yīng)的單元格被認(rèn)為包括對于如數(shù)據(jù)模型規(guī)定的對應(yīng)列的數(shù)據(jù)類型所允許的值范圍的任何值。利用通配符的數(shù)據(jù)記錄的例子是ip路由表中的標(biāo)準(zhǔn)路由,其在目的地地址列中利用網(wǎng)絡(luò)地址“0.0.0.0”并在子網(wǎng)掩碼列中利用子網(wǎng)掩碼“0.0.0.0”作為用于任何可能的目的地ip地址的通配符(參見圖12的路由表例子)。

圖2示出了具有六個(gè)行3(即,六個(gè)數(shù)據(jù)記錄)和七個(gè)列4(即,數(shù)據(jù)記錄具有七個(gè)屬性)的數(shù)據(jù)庫表2的通用例子。這個(gè)示例性數(shù)據(jù)庫表的列定義了由行保持的數(shù)據(jù)記錄的任何類型的屬性。第一列4a定義數(shù)據(jù)記錄的鍵屬性。第一行3a定義例如在列4b至4f中具有通配符“*”的默認(rèn)數(shù)據(jù)記錄,并且最后一列4g中的“是”是布爾數(shù)據(jù)類型。因此,第一行3a指定“是”作為默認(rèn)響應(yīng)。其它行定義更明確的數(shù)據(jù)記錄。例如,第二行3b指定值“a,b”的元組作為第二列4b中的屬性,并且“否”作為數(shù)據(jù)記錄的最后一個(gè)屬性,而所有其它單元格包含通配符(忽略鍵列4a),即,用于這些屬性的任何值都落在行3b的數(shù)據(jù)記錄內(nèi)。例如,數(shù)據(jù)模型可以定義值f、g、h、i、j和k作為第三列4c的允許數(shù)據(jù)范圍。因此,第二數(shù)據(jù)記錄的第三單元格(行3b,列4c)中的通配符代表第二數(shù)據(jù)記錄的這個(gè)屬性的所有可能的值f、g、h、i、j和k.

數(shù)據(jù)庫表2一般存儲(chǔ)在計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中,例如存儲(chǔ)在主存儲(chǔ)器(ram)中。

如開頭所闡述的,本文描述的數(shù)據(jù)庫表索引尤其被布置成允許確定對應(yīng)于請求的最明確行。一般而言,比其它行包含更多通配符(即,更多單元格沒有值,更少單元格有值)的行被認(rèn)為比包括更少通配符(即,更少單元格沒有值,更多單元格有值)的行更不明確。換句話說,包括更一般數(shù)據(jù)記錄的行被定義為比具有更明確內(nèi)容的行更不明確,后者被定義為更明確。為了促進(jìn)確定與請求的輸入值匹配的最明確行,給出或建立數(shù)據(jù)庫表2的行之間的明確性次序??蛇x地,明確性次序在行的排序中是隱含的。例如,如在圖2所示的數(shù)據(jù)庫表的例子中,在表內(nèi)從不明確到非常明確對行進(jìn)行排序。在一些實(shí)施例中,明確定義明確性次序,例如,通過指示行的明確性的相應(yīng)級別的明確性列,諸如圖2中的數(shù)據(jù)庫表2的鍵列4a中的鍵值??蛇x地,明確性次序嚴(yán)格單調(diào),即,數(shù)據(jù)庫表的每一行具有唯一的明確性次序。在其它例子中,定義明確性類,并且多行可以共享共同的明確性級別。在后面的例子中,給出一種機(jī)制,以確保作為具有相同明確性級別的成員的多行中僅一行滿足請求中的輸入值,例如,行定義互斥的數(shù)據(jù)記錄,并且在請求中指示用于數(shù)據(jù)庫表的最小行數(shù)的值。

響應(yīng)于接收指示至少列和相應(yīng)輸入值的請求,數(shù)據(jù)庫1利用包括在請求中的輸入值來處理請求,并將該輸入值與數(shù)據(jù)庫表2進(jìn)行比較,以便確定滿足輸入值的最明確行。返回去參考圖2,接收通用示例性請求9。在圖2的例子中,明確性次序由列4a根據(jù)鍵值對行的排序來明確定義,行3a是最不明確的行(因?yàn)樗鍌€(gè)通配符,并且僅在列4g中有一個(gè)值),而行3f是最明確的值(因?yàn)樗话魏瓮ㄅ浞袉卧穸季哂兄?。在圖2的例子中,請求9指示五個(gè)列4b、4c、4d、4e和4f以及相應(yīng)的輸入值。數(shù)據(jù)庫1確定最后一行3f是對應(yīng)于請求9的最明確行,因?yàn)閱卧?b/3f中的值“a”與用于列4b的輸入值a匹配,單元格4c/3f中的值“f”與用于列4c的輸入值f匹配,單元格4d/3f中的值“p,r”與用于列4d的輸入值p匹配,單元4e/3f中的值“w”與用于列4e的輸入值w匹配,并且單元4f/3f中的值“z”與用于列4f的輸入值z匹配。也與請求9的輸入值6相對應(yīng)的另外兩行3a和3b不如行3f明確,因?yàn)樗鼈冊跀?shù)據(jù)庫表2的隱式定義的明確性次序中排名較低。

在確定最明確行3之后,返回最明確行的至少一個(gè)值(屬性)。在圖2的例子中,返回行3f的列4g的值,即,布爾值“否”。

與請求相對應(yīng)的最明確行的確定利用本文描述的索引10(圖3)。用于數(shù)據(jù)庫表2的索引包括以下組成部分:

-對于數(shù)據(jù)庫表的每一列4都有一個(gè)索引結(jié)構(gòu)11,對于該索引結(jié)構(gòu),請求中的輸入值是預(yù)期的。因此,索引結(jié)構(gòu)11在下文中也被稱為特定于列的索引結(jié)構(gòu)。每個(gè)特定于列的索引結(jié)構(gòu)11具有兩個(gè)元素,即

o指針元組12的陣列,及

o位圖13(如技術(shù)人員通常理解的,位圖是連續(xù)位的集合,即,位陣列)。

-指針元組12的陣列具有參考由相應(yīng)特定于列的索引結(jié)構(gòu)11所參考的列的列的單元格中的所有值的功能。陣列12中的每個(gè)指針元組14包括第一指針15和第二指針16。

o第一指針15參考(reference)包括在列中的值之一。該值存儲(chǔ)在托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中的某個(gè)特定位置。第一指針參考這個(gè)存儲(chǔ)器位置。

o第二指針16指示數(shù)據(jù)庫表2中出現(xiàn)該值的行。例如,該行由鍵值識(shí)別,鍵值也存儲(chǔ)在托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中的特定存儲(chǔ)器位置。第二指針參考這個(gè)存儲(chǔ)器位置。

因此,包括在陣列12中的指針元組14的數(shù)量對應(yīng)于由相應(yīng)特定于列的索引結(jié)構(gòu)11參考的列中出現(xiàn)的值的數(shù)量。

-位圖13指定由相應(yīng)特定于列的索引結(jié)構(gòu)11參考的列中那些不具有值(即,包括通配符)的單元格。因此,位圖13也被稱為“無值位圖”。無值位圖13中的位數(shù)對應(yīng)于數(shù)據(jù)庫表2的行3的數(shù)量。

圖4示出了索引10的例子。圖4所示的示例性索引涉及圖2的通用數(shù)據(jù)庫表例子。圖4所示的索引10由對應(yīng)于圖2的數(shù)據(jù)庫表2的列4b至4f的五個(gè)索引結(jié)構(gòu)11組成,對這些列預(yù)期輸入值6(在圖2的例子中具有布爾數(shù)據(jù)類型的列4g不能被請求–這個(gè)列的值是返回值)。每個(gè)索引結(jié)構(gòu)11包含指針元組的陣列12和無值位圖13。

每一個(gè)特定于列的索引結(jié)構(gòu)11中的指針元組的陣列12構(gòu)成包括在數(shù)據(jù)庫表2的相應(yīng)列中的所有值的緊湊列表。例如,索引結(jié)構(gòu)11b中的陣列12b列出出現(xiàn)在列4b中的所有值a、b和c的存在。值a出現(xiàn)在具有鍵值r2、r4和r6的行中,值b出現(xiàn)在具有鍵值r2和r5的行中,值c出現(xiàn)在具有鍵值r3和r4的行中(參見圖2)。如上面所提到的,指針元組中的第一指針參考計(jì)算機(jī)存儲(chǔ)器中的值a、b和c的相應(yīng)存儲(chǔ)器地址,而指針元組中的第二指針指示對應(yīng)的行,即,在這個(gè)例子中參考行鍵值。對于索引結(jié)構(gòu)11c至11f中的其它陣列12c至12f也是如此。

可選地,陣列12中的指針元組14通過由第一指針參考的值排序。在圖4中,例如,陣列12b中的指針元組通過出現(xiàn)在列4b中的值a、b和c排序。因此,陣列12b中的前三個(gè)指針元組定義值a在列4b中的出現(xiàn),接下來的兩個(gè)指針元組定義值b在列4b中的出現(xiàn),并且兩個(gè)最后指針元組定義值c在列4b中的出現(xiàn)。當(dāng)利用索引10例如對指針元組執(zhí)行線性搜索時(shí),對陣列12內(nèi)的指針元組14進(jìn)行排序促進(jìn)了高效的存儲(chǔ)器訪問,因?yàn)楫?dāng)處理定義值的出現(xiàn)的第一指針元組時(shí),相應(yīng)的值僅需要從存儲(chǔ)器加載一次,然后在例如處理器高速緩存中可用于仍然與相同的值相關(guān)的后續(xù)指針元組。對指針元組14進(jìn)行排序還促進(jìn)對在一些實(shí)施例中使用的指針元組的二分搜索(下面參考圖8進(jìn)一步解釋)。

位圖13提供了數(shù)據(jù)庫表2中沒有值的單元格的出現(xiàn)的緊湊表示。每個(gè)位圖13包括六個(gè)位,與圖2的例子中的數(shù)據(jù)庫表2中的行3的數(shù)量一致。通過定義,相應(yīng)位圖中的位的序列對應(yīng)于具有鍵值r1至r6的行的序列,即,每個(gè)位圖13中的第一位指的是具有鍵值r1的行,每個(gè)位圖中的第二位指的是具有鍵值r2的行,依此類推,并且每個(gè)位圖13中的最后一位指的是具有鍵值r6的最后一行。在圖4的例子中,被設(shè)置為“1”的位表示相應(yīng)列中沒有值(即,具有通配符)的所有行,而被設(shè)置為“0”的位表示相應(yīng)列中具有值(即,沒有通配符)的行。例如,位圖13b指示列4b中僅第一行(鍵值r1)不包括值,而其它行(鍵值r2至r6)包括值。這以類似的方式適用于對于列4c至4f中的無值單元格的其它位圖13c至13f。

如上所述的索引10表示特別緊湊的元數(shù)據(jù)結(jié)構(gòu)(當(dāng)與當(dāng)前已知的現(xiàn)有技術(shù)索引相比時(shí))。沒有值的單元格的位置不被存儲(chǔ)為指針元組14,而是以減少指針元組14的數(shù)量的位圖13的形式存儲(chǔ)。一個(gè)指針元組14的尺寸總是2的冪。例如,在現(xiàn)代64位存儲(chǔ)器體系架構(gòu)中指針具有8字節(jié)的尺寸,相當(dāng)于一個(gè)指針元組14是16字節(jié)的尺寸。由于對于2的冪大小的數(shù)字的整數(shù)乘法比對于不是2的冪大小的數(shù)字更加高效,因此索引10中的隨機(jī)訪問是高效的。對于某些類別的數(shù)據(jù)庫表(例如,具有1000個(gè)條目或更少條目的表),索引10將適合放在l1和/或l2cpu高速緩存中,并且因此可以使其在非??焖僭L問的存儲(chǔ)器中永久可用,并且因此有總體改進(jìn)的請求處理和行確定的性能。此外,索引10促進(jìn)用于確定最明確行的二分搜索算法,如下面(參考圖8)將進(jìn)一步描述的。

索引10還指示數(shù)據(jù)庫表2的行3的明確性次序。為這種指示設(shè)想了各種方式。例如,如上面參考圖2所提到的,數(shù)據(jù)庫表2本身已經(jīng)根據(jù)其明確性次序進(jìn)行了排序,例如,從最低到最高明確性(也參見圖9中的活動(dòng)38和圖10中的活動(dòng)17)。在此類實(shí)施例中,數(shù)據(jù)庫表行的明確性次序隱含地存在于無值位圖13內(nèi)的索引10中。如上面所解釋的,無值位圖13包括用于數(shù)據(jù)庫表2的每一行3的位并且位圖13中的位的次序?qū)?yīng)于數(shù)據(jù)庫表2的行3的次序。因此,位圖13中相應(yīng)的第一位指的是第一行(例如,圖2中的行3a),該行是例如最不明確的行,并且無值位圖13中相應(yīng)的最后一位指的是最后一行(例如,圖2中的行3f),該行是例如數(shù)據(jù)庫表2的最明確行。在其它實(shí)施例中,數(shù)據(jù)庫表2的行不是通過明確性排序,而是索引10包括定義行3的明確性次序的單獨(dú)數(shù)據(jù)結(jié)構(gòu)。例如,當(dāng)生成索引10(參見圖9中的活動(dòng)44)時(shí),權(quán)重值7(參見圖3)與行3相關(guān)聯(lián),并且作為定義索引7內(nèi)行3的明確性次序的元數(shù)據(jù)被明顯地維持。

響應(yīng)于接收到請求9,托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)利用索引10如下確定最明確行。一般而言,對于在請求9中指示的每一列(以及相應(yīng)的輸入值6),執(zhí)行按列處理請求的遞增過程。

從請求9中指示的第一列4(圖2的例子中具有輸入值“a”的列4b)開始,計(jì)算機(jī)系統(tǒng)使用用于第一列的索引結(jié)構(gòu)11的位圖13(在圖2的例子中具有位圖13b的索引結(jié)構(gòu)11b),以確保數(shù)據(jù)庫表2中不包含值的所有行3不被丟棄,因?yàn)檫@些行包括涵蓋任何輸入值的通配符。因此,在圖2和4的例子中,行r1(在位圖13b中由“1”指示)被明確地維持。就此,不關(guān)于位圖13b中標(biāo)記有“0”的其它行做出維持或丟棄的決定。

接下來,除了根據(jù)無值位圖利用來維持行之外,用于第一列的索引結(jié)構(gòu)11(在圖2的例子中具有指針元組12b的陣列的索引結(jié)構(gòu)11b)的指針元組14被用來維護(hù)包括相應(yīng)輸入值(圖2的例子中的輸入值“a”)的所有行3并且過濾掉數(shù)據(jù)庫表1中不包括輸入值6的所有行3。在圖2和4的例子中,維持在列4b中包括值“a”的所有行(即,行r2、r4和r6),而丟棄不包含輸入值“a”的其余行(行r3和r5)。

在一些實(shí)施例中,貫穿這個(gè)遞增過程簿記(book-keeping)維持和丟棄決定是基于指示仍然維持的行和已經(jīng)丟棄的行的附加臨時(shí)位圖(被稱為結(jié)果位圖,在下面進(jìn)一步詳細(xì)描述)的。

對于在請求9中指示的每個(gè)列4,重復(fù)這個(gè)過程。在每次迭代時(shí),丟棄數(shù)據(jù)庫表2的零個(gè)、一個(gè)或多個(gè)行3。在請求9中指示的所有列4都已經(jīng)被處理之后,符合請求中指示的輸入值的一個(gè)或多個(gè)行3保留。然后計(jì)算機(jī)系統(tǒng)通過利用索引10從剩余行中選擇明確性次序最高的一行3。在圖2和4的例子中,行3a、3b和3f(即,具有鍵值r1、r2和r6的行)滿足圖2中所示的示例性請求9的輸入值6。最明確行是行3f(鍵值r6)。在圖2和4的例子中,明確性次序通過也在索引10中(在位圖13中,以及在下面描述的結(jié)果位圖中)反映的行的排序來給出。因此,在圖2和4的例子中,計(jì)算機(jī)系統(tǒng)挑選具有最高鍵值的剩余行(其在位圖13中和下面描述的結(jié)果位圖中位于最右側(cè))。

接下來,參考圖5描述遞增請求處理和行確定過程的實(shí)現(xiàn)例。這個(gè)例子再次重新使用圖2的示例性數(shù)據(jù)庫表2和如圖4中所示的對應(yīng)索引10,后者在圖5的左手側(cè)繪出。一般而言,請求處理例基于兩個(gè)附加位圖來利用指針元組14和無值位圖,即,列位圖23和結(jié)果位圖25。列位圖23和結(jié)果位圖25都包括對應(yīng)于數(shù)據(jù)庫表2中的行數(shù)的位數(shù)。列位圖23的目的是在通過列4和請求9中指示的對應(yīng)輸入值6的每次迭代期間指示數(shù)據(jù)庫表2中包括相應(yīng)輸入值的那些行3。結(jié)果位圖25的目的是貫穿整個(gè)遞增請求處理指示數(shù)據(jù)庫表中仍然是有可能滿足包括在請求9中的所有輸入值6的候選行的剩余行3并且,同時(shí),指示數(shù)據(jù)庫表2中已經(jīng)被過濾掉的所有行3,因?yàn)樗鼈儾慌c一個(gè)或多個(gè)輸入值6相對應(yīng)。

請求處理開始于初始化結(jié)果位圖25,例如,將結(jié)果位圖25的所有位設(shè)置成“1”,而每個(gè)“1”指示與結(jié)果位圖25中的相應(yīng)位相關(guān)聯(lián)的行3尚未被過濾掉,即,仍然是有可能滿足包括在請求9中的所有輸入值6的候選行。因此,在請求處理開始時(shí),數(shù)據(jù)庫表2的所有行3都是有效候選。

接下來,通過關(guān)于第一列和相應(yīng)輸入值6(在圖2和4的例子中:具有輸入值6b=“a”的列4b)的第一次迭代,這由利用相應(yīng)索引結(jié)構(gòu)(在這里:索引結(jié)構(gòu)11b)的兩個(gè)活動(dòng)形成。第一活動(dòng)涉及確定數(shù)據(jù)庫表2的哪些行3滿足當(dāng)前輸入值6b。第二活動(dòng)涉及貫穿所有迭代被維持的剩余候選行的簿記。

關(guān)于第一活動(dòng),列位圖23b利用在當(dāng)前迭代期間考慮的列4的無值位圖13(在這里:列4b,無值位圖13b)的位值來初始化。因此,在該例中,列位圖23b被設(shè)置成1-0-0-0-0-0并且因此指示行3a(鍵值r1)被明確地維持(因?yàn)樗诹?b中包括通配符)。接下來,對于包括輸入值“a”的所有行,搜遍指針元組12b的陣列。在一些實(shí)施例中,這個(gè)搜索是二分搜索(以下參考圖8進(jìn)一步解釋)。關(guān)于其它實(shí)施例,這個(gè)搜索是線性搜索。在該例中,在指針元組12b的陣列中的搜索產(chǎn)生具有鍵值r2、r4和r6的行在當(dāng)前考慮的列4b中包括“a”。因此,對應(yīng)于已經(jīng)被確定為包括輸入值6b的行的列位圖23b中的位也被設(shè)置成“1”,因?yàn)樗鼈儩M足第一輸入值6b并且因此被維持。因此,在該例中,列位圖23b的第二、第四和第六位被設(shè)置成“1”,現(xiàn)在列位圖23b被設(shè)置成1-1-0-1-0-1,意味著第一、第二、第四和第六行(鍵值r1、r2、r4和r6)仍然是候選行,而第三和第五行(鍵值r3和r5)被過濾掉。就此,列位圖23b對于當(dāng)前迭代指示滿足包括在請求9中的第一輸入值6b的所有行。

關(guān)于第二活動(dòng),所建立的列位圖23b與結(jié)果位圖25的當(dāng)前版本組合,以便將當(dāng)前迭代的行確定結(jié)果包括到候選行的整體簿記中。在該例中,所有剩余候選行都由設(shè)置成“1”的位指示,而所有過濾掉的行由設(shè)置成“0”的位指示。因此,在列位圖23b與結(jié)果位圖25的當(dāng)前版本之間執(zhí)行邏輯按位and操作,從而導(dǎo)致結(jié)果位圖的更新版本25b。因此,在該例中,結(jié)果位圖的更新版本25b被設(shè)置成1-1-0-1-0-1。

這結(jié)束了關(guān)于請求9中指示的第一列和對應(yīng)的輸入值6的第一次迭代。以相同的方式執(zhí)行后續(xù)的迭代。再次,在每次后續(xù)迭代期間,列位圖23利用相應(yīng)無值位圖的位值(在該例中,無值位圖13c至13f,列位圖的初始化版本23c至23f)被重新初始化。然后,搜索指針元組的相應(yīng)陣列(在該例中,陣列12c至12f)包括在請求9中的相應(yīng)輸入值(在該例中,輸入值6c至6f)的出現(xiàn)。在列位圖23中將與包括相應(yīng)輸入值6的行相對應(yīng)的相應(yīng)位設(shè)置成“1”。列位圖的相應(yīng)結(jié)果版本23c-23f通過按位and運(yùn)算與結(jié)果位圖的相應(yīng)當(dāng)前版本25c-25f組合。

在該例中,結(jié)果位圖25f的最終版本指示第一行、第二行和第六行滿足包括在請求9中的所有輸入值6。請求處理的最后活動(dòng)涉及在迭代結(jié)束之后選擇剩余行中的最明確行。為此,利用索引10中明確性次序的指示。在該例中,明確性次序是通過數(shù)據(jù)庫表2的行3的排序給出的,這在無值位圖13中、列位圖23中和結(jié)果位圖25中的位(對應(yīng)于行)的序列中反映。因此,在該例中,剩余候選行中最明確行由結(jié)果位圖的最終版本25f中最右邊的“1”(標(biāo)號(hào)27)給出。

雖然這個(gè)請求處理涉及具有復(fù)雜度o(n)的多個(gè)操作,但是它具有若干有利的技術(shù)特性。僅需要有限量的存儲(chǔ)器空間來執(zhí)行操作。兩個(gè)附加位圖(列位圖23和結(jié)果位圖25)包括與數(shù)據(jù)庫表2的行數(shù)相對應(yīng)的多個(gè)位。因此,對于具有1024行的數(shù)據(jù)庫表,列位圖23和結(jié)果位圖25各自具有128字節(jié)的尺寸。此外,請求處理是確定性的,因?yàn)閿?shù)據(jù)庫列迭代的次數(shù)分別由數(shù)據(jù)庫表的列和請求中指示的列的數(shù)量來預(yù)定。因此,對于具有一定數(shù)量的行的數(shù)據(jù)庫表,每個(gè)請求處理的響應(yīng)時(shí)間是確定性的。

此外,減少了用于從指針元組12的陣列搜索輸入值6的存在的查找操作和值比較操作(將輸入值與由相應(yīng)的第一指針15參考的值進(jìn)行比較)的次數(shù),這有利于位圖操作(諸如邏輯按位and運(yùn)算)。雖然位圖操作涉及o(n)次操作,但是n相對較小(對應(yīng)于行3的數(shù)量),并且位圖操作一般充分利用現(xiàn)代計(jì)算機(jī)硬件的能力。例如,64位體系架構(gòu)的各個(gè)匯編指令一次處理64位。此外,本請求處理具體地適用于配備有ooo(無序)計(jì)算單元的cpu,其具有在單個(gè)核心上每個(gè)時(shí)鐘周期執(zhí)行若干計(jì)算的能力,只要那些計(jì)算之間沒有依賴性。后一條件適用于位圖操作,因?yàn)樵诹形粓D23和結(jié)果位圖25之間的整個(gè)and操作內(nèi)每位的每個(gè)單獨(dú)and操作彼此獨(dú)立。

為了位圖操作的增加部分而減少搜索和查找操作的部分也具體地針對cpu的向量擴(kuò)展布置,尤其是cpu配備了sse2(流simd擴(kuò)展,simd=單指令多數(shù)據(jù))指令集以便提供在一條匯編指令中處理128位的能力,配備了avx2(高級向量擴(kuò)展)指令集以便在一條匯編指令中處理256位,或者avx-512(例如,intel的“knightslanding”一代)以便在一條匯編指令中啟用512位處理。例如,對于后一指令集,對于具有1000行的數(shù)據(jù)庫表2,在列位圖23和結(jié)果位圖25之間的按位and操作可以在兩個(gè)cpu周期內(nèi)執(zhí)行。

這個(gè)請求處理的操作通過圖6的流程圖可視化。首先,在20,托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)接收請求9。響應(yīng)于請求接收,在22初始化結(jié)果位圖25。然后,執(zhí)行遞增過程24。在針對每一列和在請求9中指示的相應(yīng)輸入值6的逐列迭代中,基于相應(yīng)的無值位圖13,在24a初始化列位圖23。然后,在24b,搜索指針元組的陣列12,以尋找包括相應(yīng)輸入值6的當(dāng)前列4的所有行3,并且相應(yīng)地更新列位圖23。然后,在24c,列位圖23和結(jié)果位圖25的當(dāng)前版本被組合,例如,通過邏輯按位and運(yùn)算,以便獲得更新的結(jié)果位圖。在以這種遞增方式處理了請求9中指示的所有列4和相應(yīng)輸入值6之后,在26選擇在結(jié)果位圖25的最終版本中指示的剩余行中的最明確行。最后,在35,返回所確定的最明確行的至少一個(gè)值。還有可能結(jié)果位圖在請求處理的最后一次迭代之后僅包含“0”位。在這種情況下,數(shù)據(jù)庫表的所有行都不滿足請求,因此返回值是“不匹配”值。

在一些實(shí)施例中,無值位圖13中的位指派是相反的(與圖4的例子相比),即,設(shè)置成“0”的位表示相應(yīng)列中沒有值(即,具有通配符)的所有行,而設(shè)置成“1”的位表示相應(yīng)列中具有值(即,沒有通配符)的行。在這些實(shí)施例中,列位圖23和結(jié)果位圖25中的位指派也被反轉(zhuǎn),即,列位圖23中設(shè)置成“0”的所有位指示所考慮的列包括相應(yīng)輸入值6的行3,并且結(jié)果位圖25中的每個(gè)“0”指示與相應(yīng)位相關(guān)聯(lián)的行3尚未被過濾掉,即,仍然是有可能滿足包括在請求9中的所有輸入值6的候選行。因此,在這些實(shí)施例中,列位圖23和結(jié)果位圖25通過按位邏輯or運(yùn)算組合。

在一些實(shí)施例中,遞增請求處理(圖6中的活動(dòng)24)以及,特別地,搜索指針元組的陣列12以尋找輸入值的存在(圖6中的活動(dòng)24b)包括在指針元組14內(nèi)的二分搜索被連續(xù)地存儲(chǔ)在托管數(shù)據(jù)庫1(圖7和8)的計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器中。圖7示出了指針元組14的通用例子,其在托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)的存儲(chǔ)器28中的某個(gè)位置處連續(xù)存儲(chǔ)。如由圖7的示意性表示可視化的,每個(gè)單指針元組14被連續(xù)地布置在存儲(chǔ)器28中指針元組12的陣列內(nèi),其間沒有間隙。指針元組14在存儲(chǔ)器28中的這種布置促進(jìn)對第n個(gè)指針元組(即,關(guān)于陣列12的任何任意指針元組)的直接訪問,并因此促進(jìn)對請求9的每次按列迭代的二分搜索。

圖8示出了用于圖6的活動(dòng)24b的通用二分搜索例。如上面參考圖4所提到的,陣列12內(nèi)的指針元組14通過由第一指針15參考的值排序(對于列4的相應(yīng)數(shù)據(jù)類型排序,例如,對于字符和字符串的字母次序),從而使得能夠?qū)χ羔樤M14執(zhí)行二分搜索。根據(jù)分治原則,二分搜索算法進(jìn)入陣列12的中間并且檢查由位于陣列12中間的指針元組14d的第一指針15d參考的值是否對應(yīng)于輸入值6。因此,在圖8的例子中,輸入值“a”與由第一指針15d參考的值“d”進(jìn)行比較。如果輸入值6低于由所考慮的第一指針15參考的值,則在上半部分(圖8中的陣列12的左半部分,即,具有第一指針15b)中重復(fù)相同的過程。如果輸入值6大于由所考慮的第一指針15參考的值,則在陣列12的下半部分中(圖8中的陣列12的右半部分,即,具有第一指針15f)重復(fù)相同的過程。

如由圖4和5的例子所示,有可能多個(gè)第一指針15參考相同的值。在圖7和8的例子中,第一指針15a和15b都參考值“a”。因此,如果輸入值6與由當(dāng)前在二分搜索的特定階段所考慮的第一指針15參考的值之間的比較示出兩個(gè)值相等,則二分搜索在該點(diǎn)處尚未終止。相反,二分搜索繼續(xù)確定也參考輸入值6的潛在的另外的指針元組14和第一指針15。因此,在發(fā)現(xiàn)輸入值6與由第一指針15參考的值之間的匹配之后,檢查位于當(dāng)前考慮的指針元組的左邊和右邊的相鄰指針元組14(只要它們存在),直到確定輸入值6與由相應(yīng)的第一指針參考的值之間的不匹配,或者算法到達(dá)之前已經(jīng)考慮過的指針元組14。在圖8的例子中,第一指針15b的檢查(在檢查第一指針15d之后執(zhí)行)產(chǎn)生輸入值“a”與由第一指針15b參考的值“a”之間的匹配。在這種情況下,然后確定第一指針15a和15c是否也參考值“a”。這對于第一指針15a是肯定的,而對于第一指針15c是否定的。因此,圖8的例子中的二分搜索8在已經(jīng)發(fā)現(xiàn)值“a”存在于所考慮的列4的行r1和r4中之后終止。在二分搜索的執(zhí)行期間已經(jīng)檢查了第一指針15d、15b、15a和15c。

由一些實(shí)施例采用的二分搜索具有o(logn)的計(jì)算復(fù)雜度,因此一般而言更高效,因?yàn)槔缇€性搜索具有復(fù)雜度o(n)。在一些實(shí)施例中,二分搜索以遞歸方式實(shí)現(xiàn)。在其它實(shí)施例中,二分搜索以迭代方式實(shí)現(xiàn)。

在一些實(shí)施例中,托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)被布置成從數(shù)據(jù)庫表2生成索引10。索引在數(shù)據(jù)庫表2第一次建立之后生成并且隨后響應(yīng)于數(shù)據(jù)庫表2的變化(諸如單元格5中的一個(gè)或多個(gè)值的改變、一個(gè)或多個(gè)值被通配符替換或者反過來、添加或刪除行3或列4,等等)生成。

一般而言,索引生成包括為數(shù)據(jù)庫表2的每一列4建立索引結(jié)構(gòu)11,對于這些列,請求9可以包括輸入值6。與索引10的結(jié)構(gòu)相對應(yīng),這個(gè)過程主要包括兩個(gè)活動(dòng),即,每個(gè)索引結(jié)構(gòu)11的無值位圖13的初始化和建立,并且利用指針元組14中相應(yīng)的第一指針15和第二指針16建立指針元組的陣列12。

索引生成的例子由圖9示出。可選地,對于具有通過使數(shù)據(jù)庫表2的行3根據(jù)明確性次序排序而給出的明確或隱含明確性次序的實(shí)施例,在38,數(shù)據(jù)庫表2的行被排序(如果這沒有預(yù)先完成的話)。一般而言,數(shù)據(jù)庫表的行的排序取決于每一行3中沒有值(即,具有通配符)的單元格的數(shù)量和/或行3的單元格5中的值的明確性。更具體而言,在一些實(shí)施例中,數(shù)據(jù)庫表2的行3被加權(quán)。每個(gè)單元格有助于行的權(quán)重,其中沒有值的行添加比具有至少一個(gè)值的每個(gè)單元格更少的權(quán)重,并且在一些更具體的實(shí)施例中,具有更大量的值/更明確的值的單元格將向行添加比具有更少量的值/更不明確的值的單元格更少的權(quán)重。具有完全相同權(quán)重值的行的序列以任意方式選擇。在一些實(shí)施例中,明確性次序的指示由指示經(jīng)排序的行的唯一行次序給出,諸如在圖2的例子中(列4a)。這種行次序指示可以充當(dāng)數(shù)據(jù)庫表2的主鍵。

然后,實(shí)際的索引生成以可以由請求9參考的第一無值位圖13(例如,回頭參考圖4b的例子,涉及列4b的位圖13b)的初始化開始。位圖初始化涉及在例如托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)的主存儲(chǔ)器中例如分配所需的存儲(chǔ)器量并且例如將位圖13中的所有位最初設(shè)置成指示列4中沒有單元格沒有值的“0”。然后,在40,用指針元組填充指針元組的陣列12(例如,圖4的陣列12b)。對于出現(xiàn)在所考慮的列4的行3中的每個(gè)值,有一個(gè)指針元組14被添加到陣列12。在41,無值位圖13被更新,以便反映列中沒有值的所有單元格。例如,對應(yīng)于沒有值的單元格的所有位被設(shè)置成“1”??蛇x地,在42,通過由相應(yīng)的第一指針15參考的值來對陣列12中的指針元組14進(jìn)行排序。在那時(shí),用于第一列的索引結(jié)構(gòu)11(即,例如,在圖4的例子中的索引結(jié)構(gòu)11b)完全生成。在43,檢查數(shù)據(jù)庫表2是否具有要為其建立索引結(jié)構(gòu)11的另一列。如果這是肯定的,則以相同的方式對這個(gè)另一列4(例如,圖4的例子中的列4c)重復(fù)活動(dòng)39至42,直到已經(jīng)為在請求9中指示的數(shù)據(jù)庫表的所有列4生成索引結(jié)構(gòu)11。

可選地,在沒有經(jīng)排序的行3的實(shí)施例中(即,未執(zhí)行活動(dòng)38),在44創(chuàng)建明確指示行3的明確性次序的權(quán)重值7的陣列。在允許若干行共享相同權(quán)重值并且具有相同權(quán)重的若干行與請求9相對應(yīng)的實(shí)施例中,具有相同權(quán)重的行中的任意一行被選擇為最明確行,或者給出僅允許具有相同權(quán)重的行的不相交的(disjoint)值組合的機(jī)制,其效果是在特定權(quán)重級別總是只有一行與請求9相對應(yīng)。

圖10給出由托管具有至少一個(gè)數(shù)據(jù)庫表2的數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)執(zhí)行的整個(gè)過程的示例性高級流程。在17,數(shù)據(jù)庫表的行被排序,以便構(gòu)成在索引10中反映的行的明確性次序。在18,生成索引10(參見圖9的例子)。在稍后的時(shí)間點(diǎn),計(jì)算機(jī)系統(tǒng)接收請求9,該請求指示用于數(shù)據(jù)庫表2的列4的至少一個(gè)輸入值6。在19,基于索引10來處理請求,以便確定與請求9的(一個(gè)或多個(gè))輸入值相對應(yīng)的數(shù)據(jù)庫表2的所有行3,例如,通過圖6中所示的活動(dòng)22和遞增活動(dòng)24。在34,通過利用在索引10中反映的明確性次序,從作為活動(dòng)19的輸出的剩余行中選擇最明確行,例如,以圖6所示的活動(dòng)26的方式。在21,返回所選擇的最明確行的一個(gè)或多個(gè)值。

圖11繪出了在托管數(shù)據(jù)庫1的計(jì)算機(jī)系統(tǒng)100的存儲(chǔ)器內(nèi)的數(shù)據(jù)庫1的各種數(shù)據(jù)的布置。計(jì)算機(jī)系統(tǒng)100具有可尋址存儲(chǔ)器30,其包括例如計(jì)算機(jī)系統(tǒng)100的主存儲(chǔ)器或操作存儲(chǔ)器(ram)。計(jì)算機(jī)系統(tǒng)100在可尋址存儲(chǔ)器30中維持?jǐn)?shù)據(jù)庫表2,在一些實(shí)施例中是在ram中。請求處理和最明確行的確定由中央處理單元(cpu)31執(zhí)行。cpu31包括至少一級處理器高速緩存32,在一些實(shí)施例中包括具有不同尺寸和訪問速度的至少三級(l1高速緩存、l2高速緩存、l3高速緩存)。具有用于數(shù)據(jù)庫表2的列4的索引結(jié)構(gòu)11的索引10也位于計(jì)算機(jī)系統(tǒng)100的可尋址存儲(chǔ)器30中,在一些實(shí)施例中位于至少一個(gè)處理器高速緩存級別之一當(dāng)中。

本文給出的索引實(shí)現(xiàn)就存儲(chǔ)器要求/緊湊性而言優(yōu)于其它索引機(jī)制,如從以下與現(xiàn)有技術(shù)的索引實(shí)現(xiàn)的比較將變得清楚的。比較是基于具有1024行和5列的數(shù)據(jù)庫表2,其可以經(jīng)受具有任意值的請求9。被用于比較的數(shù)據(jù)庫表包括66%無值單元格數(shù)量、10%具有多于一個(gè)值的單元格數(shù)量的典型比率,以及這些值的平均尺寸。相同的數(shù)據(jù)庫表2被用于要比較的所有實(shí)現(xiàn)。本文給出的索引實(shí)現(xiàn)與給數(shù)據(jù)庫表行加索引的兩種其它已知方式進(jìn)行比較:

-紅黑樹(red-blacktree),這是一種已知的用于加索引的相關(guān)數(shù)據(jù)結(jié)構(gòu)。實(shí)現(xiàn)基于c++std::map,具有g(shù)cc4.3.2stl。

-b-樹(b-tree),這是用于加索引的另一個(gè)相關(guān)數(shù)據(jù)結(jié)構(gòu),被用來改善存儲(chǔ)器中或盤上的數(shù)據(jù)位置。實(shí)現(xiàn)是基于“klib”的有吸引力的混亂(attractivechaos),已知其具有良好的性能(參見https://github.com/attractivechaos/klib/blob/master/kbtree.h)。選擇256個(gè)項(xiàng)的聚集因子,這是效率和緊湊性之間的良好折衷。

這三種做法示出用于不同索引的以下存儲(chǔ)器占用(所有值以字節(jié)表示)(1字節(jié)的精度):

當(dāng)前技術(shù)發(fā)展水平的intelcpu的l1高速緩存的尺寸為32kb。因此,如本文針對具有1024及更多的數(shù)據(jù)庫表2給出的索引10的每個(gè)索引結(jié)構(gòu)適合這個(gè)尺寸的l1高速緩存,而對于紅黑樹和b樹實(shí)現(xiàn)不是這種情況。

當(dāng)前可用的l2高速緩存的尺寸是256kb。因此,本文針對具有1024及更多的數(shù)據(jù)庫表2給出的索引10的所有索引結(jié)構(gòu)一起適合這個(gè)尺寸的l2高速緩存,而對于紅黑樹實(shí)現(xiàn)不是這種情況。雖然具有1024行的數(shù)據(jù)庫表2的基于b樹的索引適合這個(gè)尺寸的l2高速緩存,但是在l2高速緩存中實(shí)際上沒有剩余空間用于數(shù)據(jù)庫表2的值和簿記數(shù)據(jù)結(jié)構(gòu)(諸如列位圖23和結(jié)果位圖25)。

雖然對于上面比較的所有三種索引實(shí)現(xiàn),完整的索引元數(shù)據(jù)和完整的數(shù)據(jù)庫表2都適合l3高速緩存(幾mb,取決于cpu模型),但是應(yīng)當(dāng)指出,l3高速緩存在cpu核心之間共享并且經(jīng)受同步開銷。因此,對l3高速緩存的訪問一般比對l1高速緩存的訪問(一般慢10至20倍)和對l2高速緩存的訪問(一般慢4至8倍)慢得多。因此,本文給出的索引10中固有的存儲(chǔ)器緊湊性允許在l1和/或l2高速緩存中維持完整的索引或至少索引的顯著增加的部分(與上面提到的其它兩個(gè)已知的索引實(shí)現(xiàn)相比),這構(gòu)成請求處理機(jī)制的實(shí)質(zhì)上增加的性能,以便確定與請求9相對應(yīng)的數(shù)據(jù)庫表2的最明確行。

本文給出的索引10和基于索引10的請求處理機(jī)制可以應(yīng)用到各種不同的數(shù)據(jù)庫和類似數(shù)據(jù)庫的系統(tǒng),例如具有路由表的路由器。圖12示出了ip路由器(即,位于osi參考模型的網(wǎng)絡(luò)層的路由器)的示例性路由表33,但是本索引10也可應(yīng)用到任何其它或更明確類型的路由器,諸如邏輯路由器和軟件路由器(例如,企業(yè)服務(wù)總線,esb)、硬件路由器和主干路由器、高端交換機(jī)、dsl路由器、wifi路由器等。

圖12的路由表33是數(shù)據(jù)庫表2的簡單例子,具有五行五列。列從左到右定義目的地地址、子網(wǎng)掩碼、下一跳(例如,下一個(gè)路由器)、路由器的輸出網(wǎng)絡(luò)接口以及度量指示。如技術(shù)人員所知,目的地地址和子網(wǎng)掩碼一起形成網(wǎng)絡(luò)地址(子網(wǎng)掩碼指示構(gòu)成網(wǎng)絡(luò)地址的前綴位范圍,而其余位形成主機(jī)地址)。傳入的要路由到目的地的ip分組形成請求9。路由器檢查傳入的ip分組的目的地ip地址并對照路由表33對其進(jìn)行檢查。在這點(diǎn)上,路由器確定路由表中具有涵蓋傳入的ip分組的目的地地址的網(wǎng)絡(luò)地址(即,第一列中的目的地地址與第二列中的子網(wǎng)掩碼重疊)的最明確行33。具有至少一個(gè)表示目的地網(wǎng)絡(luò)地址(由與路由表33的第二列中的子網(wǎng)掩碼重疊的第一列的目的地地址形成)的索引結(jié)構(gòu)11的索引10和上面詳細(xì)描述的請求處理被用來執(zhí)行與傳入的請求中的目的地ip地址相對應(yīng)的最明確行的這種確定。例如,具有目的地地址192.168.1.23的ip分組被辨別為指向網(wǎng)絡(luò)192.168.1.0/24(24=子網(wǎng)掩碼225.225.225.0),即,第四行是與這個(gè)請求9相對應(yīng)的路由表33的最明確行。另一方面,對于具有目的地號(hào)為123.123.123.123的ip分組,指定標(biāo)準(zhǔn)路由的路由表33的第一行將被確定為與這個(gè)請求9相對應(yīng)的路由表33的最明確行。因此,這個(gè)ip分組將經(jīng)由輸出網(wǎng)絡(luò)接口192.168.1.2被路由到下一跳192.168.1.1。

本文給出的索引10和基于索引10的請求處理機(jī)制也適用于其它數(shù)據(jù)庫或類似數(shù)據(jù)庫的系統(tǒng),諸如具有過濾表(例如,具有或不具有狀態(tài)檢查的分組過濾器、代理過濾器、內(nèi)容過濾器)的防火墻、生產(chǎn)引擎、規(guī)則引擎(例如,指定用于技術(shù)設(shè)備的任何種類的錯(cuò)誤癥狀的修復(fù)過程的修復(fù)存儲(chǔ)庫)、流引擎、事務(wù)驗(yàn)證引擎等。

因此,計(jì)算機(jī)系統(tǒng)100是例如托管防火墻的網(wǎng)絡(luò)節(jié)點(diǎn),在這種情況下,數(shù)據(jù)庫表2是過濾表,請求9是傳入的數(shù)據(jù)分組,并且過濾表的每一行構(gòu)成用于允許或防止傳入的數(shù)據(jù)分組朝目的地被轉(zhuǎn)發(fā)的過濾規(guī)則。傳入的數(shù)據(jù)分組(例如,攜帶tcp或upd片段的ip分組,其攜帶應(yīng)用層分組,諸如http請求)的值(諸如源和目的地ip地址、源和目的地端口地址)以及數(shù)據(jù)分組的特性(諸如數(shù)據(jù)分組是否屬于現(xiàn)有連接)對照由過濾表的行定義的過濾規(guī)則進(jìn)行檢查。過濾表包括例如具有可能的目的地地址(諸如ip地址和/或端口地址)的至少一個(gè)目的地列,例如具有可能的源地址(諸如ip地址和/或端口地址)的一個(gè)或多個(gè)源列,例如具有指定傳入的數(shù)據(jù)分組的特性的值(諸如“已建立”指的是屬于已建立的連接的分組)的一個(gè)或多個(gè)列以及具有指示傳入數(shù)據(jù)分組是要轉(zhuǎn)發(fā)還是要丟棄的布爾值的列。最適用的(即,最明確的)過濾規(guī)則(即,行)是基于數(shù)據(jù)分組中的輸入值6確定的并且最后提及的列的對應(yīng)值(即,是或否=接受或拒絕)被返回。

在計(jì)算機(jī)系統(tǒng)100是例如規(guī)則引擎的情況下,數(shù)據(jù)庫表2是規(guī)則表并且規(guī)則表的每一行構(gòu)成回答請求的規(guī)則。規(guī)則表的列定義規(guī)則的標(biāo)準(zhǔn)。定義特定規(guī)則標(biāo)準(zhǔn)的請求的輸入值6對照規(guī)則表進(jìn)行檢查,確定符合輸入值6的最明確的規(guī)則并返回所確定的規(guī)則表的最明確行的所請求的返回值。

最后,圖13是計(jì)算機(jī)系統(tǒng)100的圖解表示,其提供具有至少一個(gè)數(shù)據(jù)庫表2的數(shù)據(jù)庫1的功能。數(shù)據(jù)庫1可以包括指令集,以使計(jì)算機(jī)系統(tǒng)執(zhí)行如上所述由數(shù)據(jù)庫表1執(zhí)行的任何方法和活動(dòng)。計(jì)算機(jī)系統(tǒng)100包括處理器101、主存儲(chǔ)器102和網(wǎng)絡(luò)接口設(shè)備103,它們經(jīng)由總線104彼此通信。處理器101包括保持索引10的至少一部分的至少一個(gè)cpu高速緩存,如圖11和圖13中所示。主存儲(chǔ)器102包括數(shù)據(jù)庫1(即,實(shí)現(xiàn)數(shù)據(jù)庫系統(tǒng)的執(zhí)行軟件以及至少一個(gè)數(shù)據(jù)庫表2),并且可選地,數(shù)據(jù)庫表2的部分也被保持在處理器101的cpu高速緩存中。可選地,計(jì)算機(jī)系統(tǒng)100還可以包括靜態(tài)存儲(chǔ)器105和盤驅(qū)動(dòng)單元106。視頻顯示器107、字母數(shù)字輸入設(shè)備108和光標(biāo)控制設(shè)備109構(gòu)成人機(jī)接口,以便操作計(jì)算機(jī)系統(tǒng)100。網(wǎng)絡(luò)接口設(shè)備103是將數(shù)據(jù)庫1連接到向數(shù)據(jù)庫1發(fā)出請求9的任何數(shù)量和種類的客戶端設(shè)備和應(yīng)用的有線和/或無線接口。客戶端可以駐留在互聯(lián)網(wǎng)和/或任何其它網(wǎng)絡(luò)上。網(wǎng)絡(luò)接口設(shè)備103利用諸如http/tcp/ip協(xié)議棧、ieee802.11和/或?qū)S猛ㄐ艆f(xié)議之類的標(biāo)準(zhǔn)通信協(xié)議。體現(xiàn)上述方法中任何一個(gè)或全部的指令集(即,軟件)110完全或至少部分地駐留在機(jī)器可讀介質(zhì)中或機(jī)器可讀介質(zhì)上,例如主存儲(chǔ)器102和/或具有至少一個(gè)cpu高速緩存的處理器101。除其它之外,指令尤其可以實(shí)現(xiàn)數(shù)據(jù)庫1處理傳入的請求9的功能,以確定與請求9相對應(yīng)的數(shù)據(jù)庫表2的最明確行3,如圖6中所示,以及圖9的索引生成。軟件110駐留在其上的機(jī)器可讀介質(zhì)還可以是作為盤驅(qū)動(dòng)單元106的一部分的非易失性數(shù)據(jù)載體111(例如,不可移動(dòng)磁性硬盤或者光學(xué)或磁性可移動(dòng)盤)。軟件110還可以經(jīng)由互聯(lián)網(wǎng)通過網(wǎng)絡(luò)接口設(shè)備103作為傳播信號(hào)112被發(fā)送或接收。

雖然本文已經(jīng)描述了根據(jù)本發(fā)明的教導(dǎo)構(gòu)造的某些產(chǎn)品和方法,但是本專利的覆蓋范圍不限于此。相反,本專利覆蓋字面上或按等同原則完全落入所附權(quán)利要求書的范圍內(nèi)的本發(fā)明的教導(dǎo)的所有實(shí)施例。

當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會(huì)獲得點(diǎn)贊!
1
莒南县| 亚东县| 英德市| 天长市| 安义县| 泰安市| 青河县| 内丘县| 灌云县| 中阳县| 潜江市| 隆子县| 苏州市| 莱州市| 奉化市| 广州市| 当雄县| 钟山县| 安平县| 大英县| 潞城市| 海淀区| 保康县| 疏勒县| 平邑县| 安阳县| 巴里| 龙州县| 安西县| 门头沟区| 巴里| 洛浦县| 梁山县| 盐山县| 承德市| 荆门市| 台中市| 弋阳县| 永清县| 大连市| 文山县|