欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

用于事務高速緩存無效的原子可見性切換的制作方法

文檔序號:11519647閱讀:197來源:國知局
用于事務高速緩存無效的原子可見性切換的制造方法與工藝

相關申請的交叉引用

本申請要求于2015年11月24日提交的美國臨時專利申請no.62/259,405的權益,將其通過引用全文并入于此。



背景技術:

幾乎所有的商業(yè)數(shù)據(jù)庫系統(tǒng)依賴于高速緩存技術以改進性能。由于存儲器成本的降低以及計算速度的增加,今天數(shù)據(jù)庫可以很大。大數(shù)據(jù)庫可以做出對于特定信息查詢數(shù)據(jù)庫的計算集中處理。高速緩存機制已經(jīng)由數(shù)據(jù)庫系統(tǒng)使用以幫助減小查詢數(shù)據(jù)庫的計算復雜性。與占用更長時間來存取的存儲設備(比如基于磁盤的存儲設備)相反,高速緩存通常在可以快速地存取的存儲器(比如隨機存取存儲器(ram))中實現(xiàn)。高速緩存典型地存儲頻繁使用的數(shù)據(jù),并減小數(shù)據(jù)庫系統(tǒng)存取數(shù)據(jù)頁需要的時間。

高速緩存條目典型地取決于比如引用表或者視圖的其他數(shù)據(jù)。例如,查詢結果可以取決于多個引用表,其中一些可以被遞歸地存取。但是,數(shù)據(jù)庫系統(tǒng)內的事務可能使得表的條目被修改或者刪除。為了提供數(shù)據(jù)庫中數(shù)據(jù)的事務一致的快照,需要使與修改的表對應的高速緩存的內容無效。

附圖說明

附圖并入在這里且形成說明書的一部分。

圖1是根據(jù)示例實施例的在多個節(jié)點中包括多個高速緩存的共享磁盤數(shù)據(jù)庫系統(tǒng)的框圖。

圖2圖示根據(jù)示例實施例的數(shù)據(jù)庫管理系統(tǒng)。

圖3圖示根據(jù)示例實施例的高速緩存節(jié)點。

圖4是描述根據(jù)示例實施例的由高速緩存節(jié)點更新表時間戳和表時間戳查詢的處理的序列圖。

圖5是圖示根據(jù)示例實施例的用于在高速緩存節(jié)點處理讀取查詢的處理的流程圖。

圖6a是描述根據(jù)示例實施例的用于處理標識數(shù)據(jù)庫表的時間戳的請求的方法的流程圖。

圖6b是描述根據(jù)示例實施例的用于處理數(shù)據(jù)庫更新請求的方法的流程圖。

圖7是描述根據(jù)實施例的使高速緩存節(jié)點中的表時間戳的遠程副本無效的處理的序列圖。

圖8a和圖8b圖示根據(jù)實施例的兩個示例。

圖9是描述根據(jù)實施例的用于處理數(shù)據(jù)庫更新請求和在高速緩存節(jié)點的表時間戳的副本的無效處理的方法的流程圖。

圖10是描述根據(jù)實施例的用于在高速緩存節(jié)點更新表時間戳的副本的方法的流程圖。

圖11是對實現(xiàn)各種實施例有用的示例計算機系統(tǒng)。

在圖中,同樣的附圖標記通常指示相同或者類似的元件。另外,通常,附圖標記的最左邊的數(shù)字標識附圖標記首次出現(xiàn)的圖。

具體實施方式

提供高效的高速緩存無效機制是挑戰(zhàn)性的問題。高速緩存節(jié)點保存與高速緩存的數(shù)據(jù)相關聯(lián)的時間戳。該時間戳典型地與高速緩存節(jié)點中的所有條目相關聯(lián)。因此,如果單個表中的條目在源數(shù)據(jù)庫中被更新,則高速緩存節(jié)點中的全部表將具有過時的時間戳和將被無效。

在這里提供了系統(tǒng)、方法和/或計算機程序產(chǎn)品實施例,和/或其組合和子組合,用于使已經(jīng)在與源數(shù)據(jù)庫耦合的一個或多個高速緩存節(jié)點中高速緩存的數(shù)據(jù)無效。在這里公開的系統(tǒng)和方法通過消除不必要的高速緩存無效而改進高速緩存效率。

在實施例中,每一源表具有它自己的時間戳。該時間戳例如可以被保存為在源數(shù)據(jù)庫中源表的屬性。此外,在本實施例中,(在高速緩存節(jié)點中存儲的)每一高速緩存的實體也具有它自己的時間戳,其指示從來自源數(shù)據(jù)庫的一個或多個數(shù)據(jù)庫表檢索高速緩存的實體的時間戳。因此,在給定的高速緩存節(jié)點中,可以分開地使每一高速緩存的實體無效而不影響其他高速緩存的實體的有效性。

典型地,當在高速緩存節(jié)點中找到請求的結果(比如,但不限于,查詢結果、授權檢查的結果、從一個或多個表導出的索引、高速緩存查找的結果等)時,檢查與該請求結果相關聯(lián)的高速緩存的實體的時間戳。如果高速緩存的實體的時間戳小于源數(shù)據(jù)庫的最新時間戳,則確定高速緩存的實體包括過時的數(shù)據(jù),且不應該用于答復請求。

指向圖1,圖示了其中可以實現(xiàn)實施例的示例數(shù)據(jù)庫計算環(huán)境100。數(shù)據(jù)庫環(huán)境100包括數(shù)據(jù)庫管理系統(tǒng)(dbms)102和與dbms102通信的客戶端101。dbms102可以是在服務器上執(zhí)行且經(jīng)由以下描述的網(wǎng)絡(比如網(wǎng)絡103)可接入到客戶端102的系統(tǒng)。雖然客戶端101在圖1中表示為與dbms102分開的物理機器,但是這通過示例的方式呈現(xiàn),而不是限制。在附加的實施例中,客戶端101占據(jù)與dbms102相同的物理系統(tǒng)。在另外的實施例中,客戶端101是要求訪問dbms102的軟件應用。在另一實施例中,用戶可以操作客戶端101以請求訪問dbms102。遍及該說明書,術語客戶端和用戶將可互換地使用以指示手動地或者自動地訪問dbms102的任何硬件、軟件或者人類請求者,比如客戶端101。另外,客戶端101和dbms102兩者可以在計算機系統(tǒng),比如圖11中討論的示例計算機系統(tǒng)內執(zhí)行。

客戶端101和dbms102可以經(jīng)網(wǎng)絡103通信。網(wǎng)絡103可以是可以攜帶數(shù)據(jù)通信的任何網(wǎng)絡或者網(wǎng)絡的組合。這種網(wǎng)絡103可以包括,但不限于局域網(wǎng)、城市區(qū)域網(wǎng)和/或包括因特網(wǎng)的廣域網(wǎng)。

dbms102可以從客戶端101接收請求,比如查詢。該請求可以用于檢索、修改、附加或者以其他方式操縱或者訪問在dbms102和/或高速緩存節(jié)點104中存儲的數(shù)據(jù),如將相對于圖2進一步描述的。

為了加快對請求(比如查詢)的響應,dbms102中存儲的數(shù)據(jù)的副本(copy)可以存儲在一個或多個高速緩存節(jié)點,比如高速緩存節(jié)點104a-104c中(在這里統(tǒng)稱為高速緩存節(jié)點104)。雖然高速緩存節(jié)點104a-104c表示為遠離dbms102的物理機器,這是以示例的方式呈現(xiàn),而不是限制。雖然在如圖1所示的示例實施例中,高速緩存節(jié)點104a-104c經(jīng)由網(wǎng)絡103與dbms102通信,在附加的實施例中,一個或多個高速緩存節(jié)點104a-104c對于dbms102是本地的,例如,直接連接到dbms102。以下進一步具體地描述在高速緩存節(jié)點中存儲和訪問數(shù)據(jù)。

指向圖2,圖示了dbms102的示例組件。在一個示例中,dbms102可以包括服務器或者是服務器的一部分。例如,dbms102可以由處理邏輯實現(xiàn)和/或包括處理邏輯,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。dbms102包括查詢處理引擎201、dbms102中存儲的多個數(shù)據(jù)庫表215a-215n(也稱為源數(shù)據(jù)庫表)和全局(dbms-寬)提交(commit)id數(shù)據(jù)結構221(也稱為提交標識計數(shù)器)。dbms102進一步包括高速緩存管理器211、高速緩存無效器213和表更新跟蹤器223。將在下面依次描述這些組件中的每一個。

在一個示例中,為處理查詢,dbms102包括查詢處理引擎201,該查詢處理引擎201又包括解析器模塊203、執(zhí)行單元205和提交引擎207。以下相對于它們的功能描述查詢處理引擎組件,因為它屬于處理尋址到dbms102的查詢。

查詢可以由客戶端101使用符合查詢語言的語法發(fā)送到dbms102。在示例實施例中,查詢語言是結構化查詢語言(“sql”),但是可以是另一查詢語言。dbms102能夠根據(jù)查詢語言解釋查詢,且基于該解釋,生成到數(shù)據(jù)庫表215a-215n的請求。

查詢可以由用戶使用客戶端101或者由在客戶端101上執(zhí)行的應用生成。在接收時,dbms102開始處理查詢。一旦處理查詢,處理的查詢的結果以查詢結果從dbms102發(fā)送到客戶端101。

解析器模塊203解析所接收的查詢。在實施例中,解析器162可以將查詢轉換為表示查詢的格式的二叉樹數(shù)據(jù)結構。在其他實施例中,可以使用其他類型的數(shù)據(jù)結構。

當解析完成時,解析器模塊203將所解析的查詢傳遞到歸一化器231。歸一化器231可以歸一化所解析的查詢。例如,歸一化器231可以從解析的查詢消除冗余sql結構,和/或還對于解析的查詢執(zhí)行錯誤檢查,其確認解析的查詢中的表的名稱符合dbms102中存儲的表的名稱。歸一化器231也可以確認如由解析的查詢描述的dbms102中存儲的表當中的關系有效。

仍然考慮圖2,一旦完成歸一化,則歸一化器231將歸一化的查詢傳遞到編譯器233。編譯器233將歸一化的查詢編譯為機器可讀格式。編譯處理確定怎樣由dbms102執(zhí)行查詢。為了保證高效地執(zhí)行查詢,編譯器233可以執(zhí)行查詢優(yōu)化器235,以生成用于執(zhí)行查詢的訪問計劃。

查詢優(yōu)化器235分析該查詢和確定用于執(zhí)行查詢的查詢計劃。該查詢計劃根據(jù)查詢語義檢索和操縱dbms102中存儲的數(shù)據(jù)庫表中的信息。這可以包括選擇每一訪問的表的訪問方法,選擇對表執(zhí)行連接(join)操作的順序和選擇每一連接操作中要使用的連接方法。因為可能有使用這些操作的組合執(zhí)行給定查詢的多個策略,查詢優(yōu)化器235還可以包括生成和評估多個策略,從該多個策略中選擇執(zhí)行查詢的最好策略。

在實施例中,查詢優(yōu)化器235生成多個查詢計劃。一旦生成,則查詢優(yōu)化器235從多個查詢計劃選擇單個查詢計劃以執(zhí)行查詢。給出幾個示例,所選的查詢計劃可以是成本高效的計劃,使用dbms102中最小量的存儲器的查詢計劃,最快執(zhí)行的查詢計劃,或者以上的任何組合。

在實施例中,為了優(yōu)化器235生成和選擇查詢計劃,執(zhí)行單元205可以使用數(shù)據(jù)統(tǒng)計來估計特定的查詢計劃的計算成本。例如,可以考慮查詢計劃的大小(即,行數(shù))的估計以選擇高效的查詢計劃?;谠摴烙嫞樵儍?yōu)化器235從多個查詢計劃選擇執(zhí)行查詢的高效的查詢計劃。

作為其功能的一部分,查詢優(yōu)化器235還可以生成索引以保證來自dbms102中存儲的表的信息可以被快速地和高效地檢索。索引是所選的數(shù)據(jù)庫表字段的分類副本,其允許查詢快速地檢索信息和不必掃描整個數(shù)據(jù)庫來檢索信息的選擇。

在實施例中,代碼發(fā)生器237生成dbms103實現(xiàn)所選的高效的查詢計劃所需的代碼。執(zhí)行單元205執(zhí)行生成的代碼。

仍然考慮圖2,在dbms102接收的查詢可以包括讀取和/或寫入請求。雖然讀取請求僅檢索已經(jīng)在dbms102內的表(比如數(shù)據(jù)庫表215a-215n)中存儲的數(shù)據(jù),寫入請求需要關于一個或多個這些表的數(shù)據(jù)修改和/或數(shù)據(jù)刪除。提交引擎207用于處理寫入請求。在數(shù)據(jù)庫管理系統(tǒng)中,“提交”是指做出一組假定的永久改變。例如,在sql中,提交聲明(statement)結束數(shù)據(jù)庫管理系統(tǒng)內的事務,且做出對所有客戶端可見的所有改變。在sql中,通常格式是發(fā)布“開始工作”聲明,一個或多個sql聲明,且然后提交聲明。替代地,在sql中,可以發(fā)布“回滾(rollback)”聲明,其撤消從發(fā)布“開始工作”起執(zhí)行的所有工作。

注意到,雖然根據(jù)數(shù)據(jù)庫查詢圖示了該示例,但是本公開的實施例不限于數(shù)據(jù)庫查詢。本公開的實施例可以應用于來自客戶端101、高速緩存節(jié)點104等的任何請求。本公開的實施例可以應用于導出用于任何請求的一個或多個有關的表的任何方法。例如,該請求可以包括,但不限于比如授權檢查的數(shù)據(jù)的請求、從一個或多個表導出的索引的請求、高速緩存查找等。

在一個示例中,在事務期間,由查詢處理引擎201接收的改變請求可以存儲在數(shù)據(jù)修改日志中,其可以在數(shù)據(jù)修改時間寫入到非易失性日志存儲設備(例如,一個或多個磁盤)。提交日志可以是可以永久地標記成功地提交相應的事務且先前的寫入數(shù)據(jù)修改日志有效的日志。在一個示例中,當處理提交請求時,例如,提交引擎207可以將提交日志寫入到非易失性日志存儲設備。在那些改變的完成時,提交引擎207遞增提交id,比如提交id221,其是dbms寬的全局計數(shù)器。提交id221有效地跟蹤表215a-215n中數(shù)據(jù)的版本。表215a-215n中存儲的數(shù)據(jù)的舊版本可以存儲在dbms102中的分開的存儲空間,或者一個或多個高速緩存節(jié)點,比如104a-104c中,且在請求時被檢索。

仍然考慮圖2,dbms102另外包括一個或多個數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a-215n。數(shù)據(jù)庫表215a-215n中的每一個具有與其相關聯(lián)的表時間戳屬性,如由219a-219n指示的。該表時間戳典型地是指示已經(jīng)更新表的提交事務當中的最大提交id的計數(shù)器。該表時間戳可以基于提交id更新。用于每一數(shù)據(jù)庫表的表時間戳屬性可以存儲在數(shù)據(jù)庫表自身中,或者在比如如以下將要描述的表更新跟蹤器223的另一數(shù)據(jù)結構中,或者在與dbms102相關聯(lián)的任何其他數(shù)據(jù)結構中。另外,dbms102中存儲的每一表包括修改進行中計數(shù)器。注意到,本領域技術人員將理解可以代替地使用其他數(shù)據(jù)結構以實現(xiàn)與修改進行中計數(shù)器相同的功能,比如,但不限于標記、整數(shù)等。例如,數(shù)據(jù)庫表215a具有在其中存儲的修改進行中計數(shù)器217a,數(shù)據(jù)庫表215b具有在其中存儲的另一修改進行中計數(shù)器217b,等等。如將相對于圖4-圖10具體描述的,修改進行中計數(shù)器用于保證在一個或多個高速緩存節(jié)點(比如高速緩存節(jié)點104a-104c)的請求時,對于每一數(shù)據(jù)庫表提供最新的表時間戳信息。雖然修改進行中計數(shù)器數(shù)據(jù)結構示為存儲在數(shù)據(jù)庫表中,但是注意到這些修改進行中計數(shù)器數(shù)據(jù)結構可以存儲在與dbms102相關聯(lián)的其他數(shù)據(jù)結構中。在一個實施例中,每一源表具有它自己的表時間戳和它自己的修改進行中計數(shù)器。在本實施例中,(在高速緩存節(jié)點中存儲的)每一高速緩存的實體也具有它自己的時間戳,其指示從來自源數(shù)據(jù)庫的一個或多個數(shù)據(jù)庫表檢索高速緩存的實體的時間戳。在本實施例中,通過使用與每一表相關聯(lián)的表時間戳和修改進行中計數(shù)器,可以分開地使給定高速緩存節(jié)點中的每一高速緩存的實體無效而不影響其他高速緩存的實體的有效性。

仍然考慮圖2,dbms102進一步包括表更新跟蹤器223,其更新與已經(jīng)更新的每一數(shù)據(jù)庫表相關聯(lián)的時間戳。因為每一數(shù)據(jù)庫表具有分開的表時間戳,更新、刪除或者以其他方式修改一個數(shù)據(jù)庫表中存儲的信息,僅導致要影響(遞增)的該數(shù)據(jù)庫表的時間戳,且使其他數(shù)據(jù)庫表的時間戳保留原樣。例如,如果作為數(shù)據(jù)修改請求的結果,修改數(shù)據(jù)庫表215a中的數(shù)據(jù),則僅更新表時間戳219a。在另一示例中,如果修改與表215b相關聯(lián)的元數(shù)據(jù),則僅更新表時間戳219b。

根據(jù)一個示例,表時間跟蹤器223也可以配置為管理一個或多個高速緩存節(jié)點中一個或多個表時間戳219a-219n的副本。例如,當高速緩存節(jié)點104高速緩存來自數(shù)據(jù)庫表215a的高速緩存的實體時,高速緩存節(jié)點104可以向表時間跟蹤器223登記,以使得表時間跟蹤器223將在高速緩存節(jié)點104中保留表時間戳219a的副本,如以下更詳細地討論的。在該示例中,表時間跟蹤器223可以配置為當表時間戳219a被改變和/或正在被改變的過程中時,使高速緩存節(jié)點104中表時間戳219a的副本無效。在另一示例中,高速緩存的實體可以例如由于兩個或更多數(shù)據(jù)庫表215a-215n之間的相關性,而產(chǎn)生自與兩個或更多數(shù)據(jù)庫表215a-215n相關聯(lián)的請求結果(例如,查詢結果)。在該示例中,表時間跟蹤器223可以配置為當執(zhí)行對兩個或更多數(shù)據(jù)庫表215a-215n中的任意的更新時,使高速緩存節(jié)點104中的高速緩存的實體無效。在該示例中,表時間跟蹤器223將保留與在高速緩存節(jié)點104中的兩個或更多數(shù)據(jù)庫表215a-215n對應的兩個或更多表時間戳219a-219n的副本。在一個示例中,具有來自表215a-215n的高速緩存的結果的所有高速緩存節(jié)點可以向表時間跟蹤器223自動地登記,以使得表時間跟蹤器223將保留它們的表時間戳的副本。替代地,高速緩存節(jié)點可以決定是否向表時間跟蹤器223登記。與數(shù)據(jù)庫表215a-215n相關聯(lián)的表時間戳219a-219n可以存儲在表更新跟蹤器223中,且當更新時對相應的表做出改變。替代地,表時間戳219a-219n可以存儲在它們的相應的表中,且表更新跟蹤器223當對數(shù)據(jù)庫表做出改變時更新表時間戳。在該示例中,表時間戳219a-219n指示它們相應的表已經(jīng)被更新的最后時間。

本公開的實施例提供了用于更新表時間戳219a-219n和提交id221的新穎方法,以使得不從高速緩存節(jié)點(比如高速緩存節(jié)點104a-104c中的任意)提供過時數(shù)據(jù)。將相對于圖4-圖10具體描述該方法。

仍然考慮圖2,dbms102另外包括處理高速緩存管理器211。高速緩存管理器211保持在dbms102的布置下的所有高速緩存節(jié)點的列表。當高速緩存節(jié)點,例如,高速緩存節(jié)點104c被添加到服務dbms102時,高速緩存節(jié)點向高速緩存管理器211登記它自己。因此,高速緩存管理器211將高速緩存節(jié)點104c的名稱添加到它管理的所有高速緩存節(jié)點的列表。類似地,當高速緩存節(jié)點,例如,高速緩存節(jié)點104c從dbms102的布置去除時,它從高速緩存管理器211撤銷登記它自己。因此,高速緩存管理器211從它管理的高速緩存節(jié)點的列表去除高速緩存節(jié)點104c。高速緩存管理器211可以相對于它管理的高速緩存節(jié)點另外執(zhí)行其他服務,比如收集高速緩存使用統(tǒng)計和分布跨越高速緩存節(jié)點的可用存儲器預算。高速緩存管理器211可以另外允許以分布式方式的高速緩存節(jié)點間通信。

dbms102可以進一步包括高速緩存無效器213。當高速緩存條目被插入到高速緩存中時,它們可以與從屬的對象相關聯(lián)。如上所述,可以更新數(shù)據(jù)庫表215a-215n中存儲的對象。該更新可以尋址到元數(shù)據(jù)、數(shù)據(jù)或者特權,或者其他類型。在從屬的對象的更新時,高速緩存無效器213可以向高速緩存節(jié)點,比如高速緩存節(jié)點104通知改變。這些通知基于登記的相關性分派。為了更快的無效,高速緩存條目被標記為無效。這允許基于事務標識符的舊的快照的查找和無效高速緩存條目的異步無用數(shù)據(jù)收集??梢詫τ谔囟ǖ母咚倬彺鏃l目手動地觸發(fā)無效。另外,可以在對于其登記了相關性的數(shù)據(jù)的改變時觸發(fā)自動無效。當高速緩存條目被添加到高速緩存時可以指定這些相關性,且分解遞歸的相關性。相關性由標識符(例如,對象)、類型(例如,表)和改變標志(例如,元數(shù)據(jù)改變)描述。該類型和改變標志指導無效處理且用于過濾不相關的事件。作為非限制示例,用于sql視圖的高速緩存節(jié)點可以引用另一視圖和三個表。然后,該視圖和三個表將是從屬的對象。本公開的實施例可以遞歸地分解這些相關性低至表的級別,且在表的級別執(zhí)行更新跟蹤。

指向圖3,根據(jù)實施例圖示了具有在其中存儲的示例數(shù)據(jù)結構的高速緩存節(jié)點104(比如高速緩存節(jié)點104a、104b或者104c)。在一個示例中,高速緩存節(jié)點104可以包括服務器或者是服務器的一部分。例如,高速緩存節(jié)點104可以由處理邏輯實現(xiàn)和/或包括處理邏輯,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。高速緩存節(jié)點104包括一組高速緩存關鍵字301a-301m,相應的高速緩存的實體303a-303m,和相應的高速緩存的實體時間戳305a-305n。每一高速緩存的實體303a-303m包括反映在dbms102中找到的相應的一個或多個源數(shù)據(jù)庫表中找到的信息的高速緩存的請求結果(例如,高速緩存的查詢結果,授權檢查的高速緩存的結果,從一個或多個表導出的高速緩存的索引等)。例如,如圖所示,高速緩存關鍵字301a與對應于圖2中的數(shù)據(jù)庫表215a的高速緩存的實體303a相關聯(lián)。另外,與高速緩存關鍵字301a對應的高速緩存的實體303a另外包括高速緩存的實體時間戳305a,其反映從dbms102中的一個或多個源數(shù)據(jù)庫表檢索高速緩存的實體303a的時間。高速緩存關鍵字301a和/或高速緩存的實體303a可以引用任意數(shù)目的源表和/或源表片段。例如,高速緩存關鍵字301a和/或高速緩存的實體303a可以引用一個或多個表,且高速緩存的實體的該組引用表可以重疊。根據(jù)一個示例,高速緩存關鍵字301可以包括可用于標識和/或定位高速緩存的實體的信息。例如,高速緩存關鍵字301可以包括用于請求、查詢字符串、表對象標識符(oid)、分區(qū)oid等的指令。換句話說,當在一個示例中,對dbms102做出查詢,且查詢的結果在源表215a時,該結果的副本(也稱為復制品)也可以存儲在高速緩存的實體303a中。因此,對于進一步的查詢,該查詢可以指向高速緩存節(jié)點104,且在確定與查詢相關聯(lián)的關鍵字匹配高速緩存關鍵字301之后,可以代替表215a從高速緩存節(jié)點104和高速緩存的實體303a檢索該結果。

高速緩存節(jié)點104還可以存儲指示它已經(jīng)在其中高速緩存的每一源表的最新的表時間戳的信息。例如,如圖所示,表時間戳307a-307m對應于高速緩存的實體303a-303m,且保持dbms102中相應的源數(shù)據(jù)庫表的最新的時間戳的值。換句話說,高速緩存節(jié)點104中的表時間戳307a-307m可以是源節(jié)點(例如,dbms102)中表時間戳219a-219n的副本。當源表及其相應的高速緩存位于兩個不同工作節(jié)點時,每個表時間戳查找將涉及節(jié)點間通信。因此,在一個實施例中,表時間戳的副本存儲在高速緩存節(jié)點中,以減小節(jié)點間通信需要的時間。但是,這些表時間戳的副本需要被有高效地更新。在一個示例中,高速緩存節(jié)點104中的高速緩存的實體303a對應于源節(jié)點(例如,dbms102)中表215a中存儲的所有數(shù)據(jù)或者數(shù)據(jù)的子集。高速緩存的實體時間戳305a對應于高速緩存高速緩存的實體303a的時間戳。在該示例中,表時間戳307a包括當最后更新表215a時表時間戳217a的副本。在另一示例中,高速緩存節(jié)點104中的高速緩存的實體303b對應于源節(jié)點(例如,dbms102)中表215a和215b中存儲的數(shù)據(jù)的子集。如在先前示例,高速緩存的實體時間戳305b對應于高速緩存高速緩存的實體303b的時間戳。但是,與在先前示例中不同,這里高速緩存的實體303b的有效性將取決于在高速緩存節(jié)點104中存儲高速緩存的實體303b之后是否存在對表215a和215b中任何一個的任何更新。如上所述和將相對于圖7-圖10更詳細地討論的,源節(jié)點(例如,dbms102)的表更新跟蹤器223可以配置為控制表時間戳307a-307m的有效性??蛇x地,高速緩存節(jié)點104可以包括檢查在其中存儲的所有高速緩存的條目并刪除那些標記為無效的無用數(shù)據(jù)收集程序模塊。

在dbms中更新表時間戳和處理高速緩存查詢

圖4、圖5、圖6a和圖6b描述根據(jù)實施例,怎樣更新表時間戳,和處理請求,以在高速緩存節(jié)點上提供事務一致的快照。在一個示例中,包括表215a-215n的dbms102可以是包括源表的源節(jié)點,從該源表高速緩存高速緩存的實體。另外地或者替代地,源節(jié)點可以是任何處理邏輯,其可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,關于處理裝置執(zhí)行的指令)或者其組合,且可以包括從其高速緩存高速緩存的實體的源表。

指向圖4,根據(jù)實施例圖示了描述在dbms102中更新表時間戳,和由高速緩存節(jié)點從dbms102的表時間戳查詢的處理的示例序列圖400。為了促進描述該處理,通常參考先前引入到圖2中的數(shù)據(jù)結構。時間圖400可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。

在步驟401,且例如在時間戳10,源數(shù)據(jù)庫表1中存儲的數(shù)據(jù)的副本存儲在高速緩存節(jié)點104中,可能作為來自要求訪問和檢索數(shù)據(jù)庫表1的dbms102的查詢的結果。但是,該步驟401可以是存儲一個或多個源表中的任意和/或在一個或多個源表的任何片段中的數(shù)據(jù)的子集的任何請求的結果。高速緩存節(jié)點104以與圖3中示出的那些類似的數(shù)據(jù)結構,存儲具有高速緩存時間戳10的該數(shù)據(jù)。

一旦在403發(fā)布更新請求(例如,提交聲明/請求),需要修改在數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a中存儲的數(shù)據(jù),或者與該數(shù)據(jù)庫表相關聯(lián)的元數(shù)據(jù)。為處理此,在步驟407,遞增與數(shù)據(jù)庫表對應的修改進行中計數(shù)器(比如修改進行中計數(shù)器217a)的值。注意到,更新請求403可以包括對多于一個表的更新,且因此可以涉及多于一個修改進行中計數(shù)器。在步驟408,提交引擎207(作為示例)可以將提交日志(其可以是可以永久地標記成功地提交相應的事務且先前寫入數(shù)據(jù)修改日志有效的日志)寫入到長期存儲器存儲設備(例如,非易失性日志存儲設備,比如磁盤)。在一個示例中,該操作可能是費時的操作。在步驟409,提交id221的值遞增到下一時間戳,例如,11。

在405,具有時間戳11的請求q1從高速緩存節(jié)點104發(fā)布到源dbms102。該請求q1可以基于發(fā)送到高速緩存管理器的對高速緩存節(jié)點104的高速緩存查找。另外地或者替代地,請求q1可以基于對源節(jié)點的數(shù)據(jù)庫查詢。在一個示例中,請求q1可以基于源節(jié)點已經(jīng)指向(例如,轉發(fā))到高速緩存節(jié)點104的查詢。由于請求q1,在步驟411,高速緩存節(jié)點104可以請求dbms102以標識在其中存儲的一個或多個數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a的最新的時間戳。但是,由于更新請求(例如,提交聲明)403的發(fā)布,dbms102已經(jīng)在修改表215a的過程中。也就是,提交id221已經(jīng)被更新,但是表215a的表時間戳還未被更新。因此,在這種暫時狀態(tài),由dbms102返回到高速緩存節(jié)點104的任何時間戳信息將反映過時的信息。為了解決該問題,在步驟413,做出有效性檢查以標識修改進行中計數(shù)器217a是否大于零。如果修改進行中計數(shù)器217a的值確定為大于零,則指示數(shù)據(jù)庫表215a正在經(jīng)歷更新。因此,在時間戳10在高速緩存節(jié)點104中高速緩存的該數(shù)據(jù)庫表的先前的副本不再有效。

在步驟415,更新的表217a的表時間戳設置為等于提交id221的值。最終,在步驟417,關于影響在403發(fā)布的提交聲明的所有操作完成,且修改進行中計數(shù)器217a的值遞減回到零。

指向圖5,圖示了根據(jù)實施例描述用于在高速緩存節(jié)點104處理比如但不限于讀取查詢的請求的方法500的流程圖。方法500可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖500的方法。例如,可以使用高速緩存節(jié)點104實現(xiàn)流程圖500。流程圖500的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實施例中,流程圖500的方法的兩個或更多步驟可以彼此同時執(zhí)行。

該方法500開始于步驟501且移動到步驟503。在步驟503,高速緩存節(jié)點104接收比如讀取請求的請求。隨后,在步驟505,高速緩存節(jié)點104執(zhí)行查找以定位與讀取請求相關聯(lián)的高速緩存關鍵字。這可以通過搜索高速緩存節(jié)點104中存儲且圖3中示出的數(shù)據(jù)結構而做出。高速緩存關鍵字301a-301n可以是分類的、未分類的、存儲在散列表、鏈接表、雙鏈接表、樹或者其他數(shù)據(jù)結構中。因此,高速緩存節(jié)點104可以根據(jù)其中存儲它們的數(shù)據(jù)結構在所有高速緩存關鍵字301a-301n當中搜索高速緩存關鍵字。

在步驟507,高速緩存節(jié)點104做出檢查以確定查找是否成功。如果查找成功,則指示在讀取請求中請求的數(shù)據(jù)對象的副本存儲在高速緩存節(jié)點中的高速緩存的實體中,作為其結果,處理移動到步驟511。但是,如果在步驟507確定在高速緩存節(jié)點中沒有找到與讀取請求相關聯(lián)的高速緩存關鍵字,則處理移動到步驟509,且隨后在步驟520結束。

在步驟511-517,高速緩存節(jié)點104確定包括在請求(例如,讀取請求)中請求的對象的表的高速緩存的副本的時間戳是最新的或者舊的。在步驟511,高速緩存節(jié)點104檢索包括對象的高速緩存的實體的時間戳。在步驟513,高速緩存節(jié)點104發(fā)送請求到源513,以標識與一個或多個數(shù)據(jù)庫表中的每一個相關聯(lián)的最新的時間戳,該一個或多個數(shù)據(jù)庫表與包括對象的高速緩存的實體相關聯(lián)。在步驟515,高速緩存節(jié)點104可以執(zhí)行等待操作,直到從dbms102接收到響應為止。該等待可以具有預定上限,例如,2秒,之后,方法移動到指示高速緩存丟失的步驟509。

在高速緩存節(jié)點104從dbms102接收到響應之后,該方法移動到步驟517,其中,高速緩存節(jié)點104比較由dbms102返回的一個或多個數(shù)據(jù)庫表時間戳當中的最大值和與包括對象的高速緩存的實體對應的高速緩存的實體時間戳。如果確定一個或多個數(shù)據(jù)庫表時間戳的最大值大于高速緩存的實體時間戳,這意味著與高速緩存的實體相關聯(lián)的至少一個數(shù)據(jù)庫表的數(shù)據(jù)庫表時間戳大于高速緩存的實體時間戳。在該情況下,高速緩存對象確定為是舊的,且該方法移動到步驟509。但是,如果確定與高速緩存的實體相關聯(lián)的全部數(shù)據(jù)庫表時間戳具有與高速緩存的時間戳相同的值(即,一個或多個數(shù)據(jù)庫表時間戳當中的最大值與高速緩存的實體時間戳相同),則方法移動到步驟519,其中,響應于在步驟503接收的讀取查詢返回高速緩存的對象。在一個實施例中,如果與包括對象的高速緩存的實體相關聯(lián)的一個或多個源表未向例如表更新跟蹤器223登記,則高速緩存節(jié)點可能在步驟515沒有接收到響應,且該方法移動到指示高速緩存丟失的步驟509。另外地或者替代地,在未登記一個或多個源表的情況下,該方法在步驟517不能確定最大源表時間戳,因為高速緩存節(jié)點未接收到且將不具有所有請求的時間戳。在該示例中,該方法可以再次移動到指示高速緩存丟失的步驟509。根據(jù)一個示例,如以下討論的,如果未登記一個或多個源表,則源節(jié)點可以在發(fā)送表時間戳到高速緩存節(jié)點(在步驟515,高速緩存節(jié)點接收表時間戳)之前登記它們。

根據(jù)一個示例,例如客戶端101的讀取器具有指示讀取器請求查詢的最后時間的快照時間戳(sts)。當讀取器提交查詢時,快照時間戳可以比較與該查詢相關聯(lián)的高速緩存的實體時間戳。在一個實施例中,這些處理可以例如由引擎201、高速緩存管理器211等執(zhí)行。如果高速緩存的實體時間戳等于快照時間戳,則讀取器“看到”相同快照,且因此,可以批準從與查詢相關聯(lián)的高速緩存的實體獲得的查詢的結果的有效性。如果高速緩存的實體時間戳小于快照時間戳,且最大表時間戳小于或等于高速緩存的實體時間戳,則因為條目被高速緩存所以相關的表還未被更新,且因此可以批準請求的查詢的結果的有效性。

但是,如果高速緩存的實體時間戳小于快照時間戳且最大表時間戳大于高速緩存的實體時間戳,則已經(jīng)更新相關表但是讀取器不能“看到”它們,或者相關表已經(jīng)更新了多于一次。當該狀況發(fā)生時,可以拒絕請求的查詢的結果的有效性。在該情況下,存在高速緩存的實體可能對于讀取器是有效的可能性,且因此,存在錯誤拒絕的可能性。如果高速緩存的實體時間戳大于快照時間戳,則可以拒絕請求的查詢的結果的有效性。與先前情況類似,在該情況下,存在高速緩存的條目可能對于讀取器有效的可能性,且因此,存在錯誤拒絕的可能性。

指向圖6a,圖示了描述方法600的流程圖,該方法600用于處理標識比如dbms102的dbms中的比如表215a-215n中的任意的數(shù)據(jù)庫表的表時間戳的請求。方法600可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖600的方法。例如,流程圖600可以使用引擎201、表更新跟蹤器223或者dbms102的其他組件實現(xiàn)。流程圖600的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實施例中,流程圖620的方法的兩個或更多步驟可以彼此同時執(zhí)行。

方法600起始于步驟601且移動到步驟603。在步驟603,比如dbms102的源服務器從比如高速緩存節(jié)點104a的高速緩存節(jié)點接收標識dbms102中存儲的一個或多個源數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a的當前時間戳的請求。在一個示例中,在從高速緩存節(jié)點接收請求之后,源節(jié)點(例如,dbms102)可以確定高速緩存節(jié)點104a已經(jīng)請求的一個或多個源數(shù)據(jù)庫表是否向用于高速緩存的源節(jié)點登記。如果一個或多個源數(shù)據(jù)庫表已經(jīng)向用于高速緩存的源節(jié)點登記,則該方法可以繼續(xù)步驟605。但是,如果源節(jié)點確定一個或多個源數(shù)據(jù)庫表(高速緩存節(jié)點正在答復它的表時間戳)還未登記用于高速緩存,則源節(jié)點可以登記用于高速緩存的一個或多個源數(shù)據(jù)庫表。在一個示例中,比如圖8中的表801的表可用于向它的相應的一個或多個高速緩存節(jié)點登記一個或多個源數(shù)據(jù)庫表。在該示例中,源節(jié)點可以使用一個或多個高速緩存節(jié)點標識符(id),以向它的相應的一個或多個高速緩存節(jié)點登記一個或多個源數(shù)據(jù)庫表。在一個示例中,登記一個或多個源數(shù)據(jù)庫表也可以包括生成用于該一個或多個源數(shù)據(jù)庫表的相應的修改進行中計數(shù)器和/或表時間戳。在登記之后,該方法可以在步驟605繼續(xù)。

在步驟605,dbms102確定與數(shù)據(jù)庫表215a對應的修改進行中計數(shù)器,例如修改進行中計數(shù)器217a的值是否大于零。如果dbms102確定修改進行中計數(shù)器217a的值大于零,則指示數(shù)據(jù)庫表217a當前正在經(jīng)歷修改。因此,dbms102不發(fā)送對在步驟603接收的請求的任何響應,且該方法簡單地在步驟610結束。但是,如果在步驟605,確定修改進行中計數(shù)器等于零,則dbms102將與數(shù)據(jù)庫表217a相關聯(lián)的時間戳返回到高速緩存節(jié)點。該方法隨后在步驟610結束。注意到,雖然以一個表圖示了方法600,但該方法可以包括多于一個表,且因此,可以涉及多于一個修改進行中計數(shù)器。

指向圖6b,圖示了描述用于在dbms比如dbms102處理數(shù)據(jù)庫更新請求的方法620的流程圖。方法620可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖620的方法。例如,流程圖620可以使用引擎201、表更新跟蹤器223或者dbms102的其他組件實現(xiàn)。流程圖620的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實施例中,流程圖620的方法的兩個或更多步驟可以彼此同時執(zhí)行。

該方法起始于步驟621且移動到步驟623。在步驟623,dbms102接收用于更新存儲在數(shù)據(jù)庫表k(比如數(shù)據(jù)庫表215a)中的數(shù)據(jù),或者與該數(shù)據(jù)庫表k相關聯(lián)的元數(shù)據(jù)的請求。在步驟625,遞增修改進行中計數(shù)器的值。根據(jù)一個示例,表更新跟蹤器223可以配置為更新修改進行中計數(shù)器的值。

該方法隨后移動到步驟627,其中,提交引擎207(作為示例)可以將提交日志(其可以是可以永久地標記成功地提交相應的事務且先前寫入的數(shù)據(jù)修改日志有效的日志)寫入到長期存儲器存儲設備(例如,比如磁盤的非易失性日志存儲設備)。

隨后,該方法移動到步驟629,其中,遞增提交id(例如,提交id221)。此后,在步驟633,與數(shù)據(jù)庫表相關聯(lián)的時間戳(比如數(shù)據(jù)庫表時間戳219a)設置為等于提交id。在這點之后,不存在需要發(fā)生更多的數(shù)據(jù)修改動作。因此,在步驟633,修改進行中計數(shù)器遞減回到零,且方法在步驟637結束。根據(jù)一個示例,步驟625-633可以是事務提交的一部分,且步驟623可以在事務內重復。

高效的節(jié)點間高速緩存

圖7、圖8a、圖8b、圖9和圖10描述了根據(jù)實施例源表時間戳的本地副本如何可以存儲在高速緩存節(jié)點中和與源節(jié)點同步地使其無效。在一個示例中,包括表215a-215n的dbms102可以是包括源表的源節(jié)點,從該源表高速緩存高速緩存的實體。另外地或者替代地,源節(jié)點可以是任何處理邏輯,其可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,關于處理裝置執(zhí)行的指令)或者其組合,且可以包括從其高速緩存高速緩存的實體的源表。

指向圖7,根據(jù)實施例圖示了描述使高速緩存節(jié)點中的表時間戳的遠程副本無效的處理的示例序列圖700。為了促進描述該處理,通常參考先前引入到圖2和圖3中的數(shù)據(jù)結構。時間圖700可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。

在步驟717,dbms102接收更新表的更新請求(例如,提交請求)并執(zhí)行更新請求(例如,該提交請求)。在一個示例中,提交引擎207可以配置為執(zhí)行更新請求(例如,提交請求)。更新請求可以包括寫入事務。為處理此,在步驟701,dbms102例如通過表更新跟蹤器223遞增與數(shù)據(jù)庫表對應的修改進行中計數(shù)器,比如修改進行中計數(shù)器217a的值。在步驟703,提交引擎207(作為示例)可以將提交日志(其可以是可以永久地標記成功地提交相應的事務且先前寫入數(shù)據(jù)修改日志有效的日志)寫入到長期存儲器存儲設備(例如,非易失性日志存儲設備,比如磁盤)。在一個示例中,該操作可能是費時的操作。

在提交引擎207將提交日志寫入長期存儲器的時間期間,dbms102可以發(fā)送消息到高速緩存節(jié)點104,以使位于高速緩存節(jié)點104中的表時間戳的一個或多個副本無效。根據(jù)該示例性實施例,高速緩存節(jié)點104(如圖3描述的)包括表時間戳307a-307m,其存儲指示它已經(jīng)在其中高速緩存的每一表的最新表時間戳的信息。例如,表時間戳307a-307m對應于高速緩存的實體303a-303m,且保持dbms102中相應的源數(shù)據(jù)庫表215a-215n的最新時間戳的值。例如,高速緩存節(jié)點104中的表時間戳307a是dbms102中的表時間戳219a的副本。當提交請求717要求例如源表215a的改變時,當處理和完成提交請求時將更新表時間戳219a。因此,高速緩存104中表時間戳219a的副本–表時間戳307a–應該被無效(例如,標記為無效的或者刪除的)。但是,因為在提交717的結尾更新表時間戳219a,所以如果在該時間期間高速緩存104參考表時間戳307a,則高速緩存104將發(fā)現(xiàn)該表時間戳的錯誤的值。因此,該實施例設計用于一旦提交717開始則使表時間戳307a中的值無效。因此,在提交引擎207向長期存儲設備(例如,磁盤)執(zhí)行影響提交日志中的聲明的i/o操作的步驟703期間,dbms102發(fā)送消息705到高速緩存節(jié)點104以使表時間戳307的值無效。根據(jù)一個示例,705可以是從源節(jié)點102到高速緩存節(jié)點104的遠程呼叫。在該示例中,當網(wǎng)絡i/o操作(例如,到高速緩存節(jié)點104的遠程呼叫)與提交日志操作重疊時可以減小等待時間開銷。提交日志操作時間例如可以包括提交引擎207執(zhí)行磁盤i/o操作需要的時間。在一個實施例中,提交日志操作時間可以排除更新和存儲提交id221需要的時間。

在步驟707,高速緩存節(jié)點104響應于消息705使表時間戳307a無效。接下來高速緩存節(jié)點104發(fā)送消息709到dbms102,以指示已經(jīng)在高速緩存節(jié)點104中執(zhí)行了無效處理。根據(jù)一個示例,709可以是在高速緩存節(jié)點104使表時間戳307a無效之后對遠程呼叫705的響應。根據(jù)一個示例,消息709可以是成功指示符,以使得以分布的設置來避免具有未標記為無效的高速緩存節(jié)點。

在步驟711,dbms102將提交id221的值遞增到下一時間戳。根據(jù)一個示例,該步驟可以包括獲取提交id221的鎖定。在步驟713,dbms102將更新的表217a的表時間戳設置為等于提交id221的值。根據(jù)一個示例,該步驟可以包括獲取相應的表時間戳的鎖定。最終,在步驟715,完成關于影響在717發(fā)布的提交聲明的操作,且修改進行中計數(shù)器217a的值例如遞減回到零。根據(jù)一個示例,該步驟可以包括釋放提交id221和/或相應的表時間戳的鎖定。

雖然圖7圖示一個源102和一個高速緩存節(jié)點104,但注意到圖7的處理700可以在一個源102和多個高速緩存節(jié)點之間執(zhí)行。在該示例中,多個高速緩存節(jié)點已經(jīng)高速緩存了源表和/或取決于在處理700中正在更新的源表的高速緩存的實體。因此,源102通知這些多個高速緩存節(jié)點以使它們的表時間戳的副本無效。在該示例中,無效消息705可以多播到多個高速緩存節(jié)點。此外,雖然圖7圖示影響一個表的事務的提交,但注意到在事務的提交期間可以更新源(例如,dbms102)中的多個源表,且因此在處理700中可能涉及多個修改進行中計數(shù)器217。在該示例中,消息705可以包括用于對應于正在更新的源(例如,dbms102)中的多個源表的高速緩存節(jié)點104中的表時間戳的多個副本的無效消息。

圖8a和圖8b圖示根據(jù)實施例的分別在dbms102和高速緩存節(jié)點104中的兩個示例性表。根據(jù)此示例,表801可以存儲在dbms102內的高速緩存管理器211中。另外地或者替代地,表801可以存儲在dbms102內的其他位置中,例如,表更新跟蹤器223,且表801例如可以由表更新跟蹤器223管理。表803可以存儲在高速緩存節(jié)點104中。表801指示哪個高速緩存節(jié)點已經(jīng)高速緩存哪個表。可以使用表更新跟蹤器233填充和更新表801。根據(jù)一個示例,當高速緩存管理器211和/或無效器213將表登記為用于高速緩存相關時,可以保持表801。如上相對于圖2所述的,已經(jīng)高速緩存來自表215a-215n的查詢結果的所有高速緩存節(jié)點可以向表時間跟蹤器223自動地登記,以使得表時間跟蹤器223將保持它們的表時間戳的副本。替代地,高速緩存節(jié)點可以決定是否向表時間跟蹤器223登記。因此,源節(jié)點(例如,dbms102)例如通過表更新跟蹤器223,可以跟蹤包括對應于源表的高速緩存實體的高速緩存節(jié)點。通過跟蹤高速緩存節(jié)點,如果需要,源節(jié)點能夠使表時間戳的副本無效。

例如,表801圖示高速緩存節(jié)點3已經(jīng)高速緩存了具有對象id1442和1446的實體。當dbms102接收與特定的表相關聯(lián)的提交請求717時,dbms102在表801中查找以確定是否任何高速緩存節(jié)點已經(jīng)高速緩存了該特定的表。如果dbms102確定已經(jīng)由高速緩存節(jié)點高速緩存了該特定的表,則dbms102執(zhí)行圖7的方法700以使該高速緩存節(jié)點的表時間戳無效。在高速緩存節(jié)點104的表803存儲從其高速緩存的實體被高速緩存在高速緩存節(jié)點104中的表的對象id和它們的關聯(lián)的提交id。

指向圖9,圖示了描述方法900的流程圖,該方法900用于處理在比如dbms102的dbms的數(shù)據(jù)庫更新請求,和在高速緩存節(jié)點的表時間戳的副本的無效處理。方法900可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖900的方法。例如,流程圖900可以使用引擎201、提交引擎207、表更新跟蹤器223或者dbms102的其他組件中的至少一個實現(xiàn)。流程圖900的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實施例中,流程圖900的方法的兩個或更多步驟可以彼此同時執(zhí)行。

該方法起始于步驟901和移動到步驟903。在步驟903,dbms102接收用于更新存儲在數(shù)據(jù)庫表k(比如數(shù)據(jù)庫表215a)中的數(shù)據(jù),或者與該數(shù)據(jù)庫表k相關聯(lián)的元數(shù)據(jù)的請求。

在步驟905,遞增修改進行中計數(shù)器的值。根據(jù)一個示例,表更新跟蹤器223可以配置為更新修改進行中計數(shù)器的值。該方法隨后移動到步驟907,其中,dbms102發(fā)送消息到具有表k的副本和/或取決于表k的高速緩存實體的高速緩存節(jié)點,以使與在該高速緩存節(jié)點中的表k相關聯(lián)的表時間戳的副本無效。根據(jù)一個實施例,dbms102存儲比如表801的表。dbms102可以使用表801以確定哪個或哪些高速緩存節(jié)點具有源表k的副本和/或取決于源表k的高速緩存實體。在該示例中,在步驟907之前,dbms102可以使用表801以確定無效消息應該發(fā)送到的一個或多個高速緩存節(jié)點。

該方法隨后移動到步驟909,其中,提交引擎207(作為示例)可以將提交日志(可以是可以永久地標記成功地提交相應的事務且先前寫入的數(shù)據(jù)修改日志有效的日志)寫入到長期存儲器存儲設備(例如,比如磁盤的非易失性日志存儲設備)。注意到,雖然示出步驟907在步驟909之前,至少這兩個步驟可以以任何其他次序執(zhí)行,比如實質上同時執(zhí)行。通過實質上重疊這兩個操作,當網(wǎng)絡i/o操作(例如,遠程呼叫或者到高速緩存節(jié)點104的消息傳遞)與提交日志操作重疊時,可以減小等待時間開銷。

隨后,該方法移動到步驟911,其中,遞增提交id(例如,提交id221)。此后,在步驟913,與數(shù)據(jù)庫表相關聯(lián)的時間戳(比如數(shù)據(jù)庫表時間戳219a)設置為等于提交id。在這點之后,不需要發(fā)生更多的數(shù)據(jù)修改動作。因此,在步驟915,修改進行中計數(shù)器遞減回到零,且方法在步驟920結束。

指向圖10,圖示了描述根據(jù)實施例的用于更新在高速緩存節(jié)點的表時間戳的副本的方法1000的流程圖。方法1000可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖1000的方法。例如,流程圖1000可以使用高速緩存節(jié)點104實現(xiàn)。流程圖1000的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實施例中,流程圖1000的方法的兩個或更多步驟可以彼此同時執(zhí)行。

該方法1000起始于步驟1001和移動到步驟1003。在步驟1003,高速緩存節(jié)點104從源節(jié)點,比如dbms102接收無效消息。該無效消息用于使與表k相關聯(lián)的表時間戳的副本無效。例如,圖3的表時間戳307a與表215a的表時間戳219a相關聯(lián)。在正在更新表215a的同時(例如,如在圖9中討論的),高速緩存節(jié)點104在步驟1003接收無效消息以使高速緩存節(jié)點104表時間戳307a無效。

在步驟1005,高速緩存節(jié)點104使作為與表k相關聯(lián)的表時間戳219a的副本的表時間戳307a無效。在步驟1007,高速緩存節(jié)點1007可以將用于與表k相關聯(lián)的表時間戳的新值的請求發(fā)送到源節(jié)點,比如dbms102。在步驟1009,高速緩存節(jié)點104可以接收更新表時間戳且可以在表時間戳307a中存儲新的值。

圖11是其中可以實現(xiàn)實施例的示例計算機系統(tǒng)的框圖。例如,可以使用一個或多個公知的計算機系統(tǒng),比如圖11所示的計算機系統(tǒng)1100實現(xiàn)各種實施例。計算機系統(tǒng)1100可以是能夠執(zhí)行在這里描述的功能的任何公知的計算機,比如可從國際商業(yè)機器公司、apple、sun、hp、dell、sony、toshiba等得到的計算機。

計算機系統(tǒng)1100包括一個或多個處理器(也稱為中央處理單元,或者cpu),比如處理器1104。處理器1104連接到通信基本設施或者總線1106。

一個或多個處理器每個可以是圖形處理單元(gpu)。在實施例中,gpu是作為設計用于快速地處理在電子裝置上的數(shù)學集中的應用的專用電子電路的處理器。gpu可以具有對于大的數(shù)據(jù)塊,比如對計算機圖形應用普遍的數(shù)學集中的數(shù)據(jù)、圖像和視頻的并行處理高效的高度并行結構。

計算機系統(tǒng)1100還包括一個或多個用戶輸入/輸出裝置1103,比如監(jiān)視器、鍵盤、指示裝置等,其通過一個或多個用戶輸入/輸出接口1102與通信基本設施1106通信。

計算機系統(tǒng)1100還包括主存儲器或者主要存儲器1108,比如隨機存取存儲器(ram)。主存儲器1108可以包括一級或多級高速緩存。主存儲器1108在其中存儲控制邏輯(即,計算機軟件)和/或數(shù)據(jù)。

計算機系統(tǒng)1100還可以包括一個或多個次級存儲裝置或者存儲器1110。次級存儲器1110例如可以包括硬盤驅動器1112和/或可拆卸存儲裝置或者驅動器1114??刹鹦洞鎯︱寗悠?114可以是軟盤驅動器、磁帶驅動器、致密盤驅動器、光存儲裝置、磁帶備用裝置和/或任何其他存儲裝置/驅動器。

可拆卸存儲驅動器1114可以與可拆卸存儲單元1118互動??刹鹦洞鎯卧?118包括計算機可使用的或者可讀取的存儲裝置,具有在其上存儲的計算機軟件(控制邏輯)和/或數(shù)據(jù)。可拆卸存儲單元1118可以是軟盤、磁帶、致密盤、dvd、光存儲盤,和/或任何其他計算機數(shù)據(jù)存儲裝置??刹鹦洞鎯︱寗悠?114以公知的方式從可拆卸存儲單元1118讀取和/或寫入到可拆卸存儲單元1118。

根據(jù)示例性實施例,次級存儲器1110可以包括用于允許計算機程序和/或其他指令和/或數(shù)據(jù)由計算機系統(tǒng)1100訪問的其他裝置、手段或者其他方法。這種裝置、手段或者其他方法例如可以包括可拆卸存儲單元1122和接口1120??刹鹦洞鎯卧?122和接口1120的示例可以包括程序盒和盒式接口(比如在視頻游戲裝置中找到的)、可拆卸存儲器芯片(比如eprom或者prom)和關聯(lián)的插座、存儲棒和usb端口、存儲卡和關聯(lián)的存儲卡槽,和/或任何其他可拆卸存儲單元和關聯(lián)的接口。

計算機系統(tǒng)1100可以進一步包括通信或者網(wǎng)絡接口1124。通信接口1124使計算機系統(tǒng)1100能夠與遠程裝置、遠程網(wǎng)絡、遠程實體等(單獨地和集合地由附圖標記1128表示)的任何組合通信和互動。例如,通信接口1124可以允許計算機系統(tǒng)1100經(jīng)通信路徑1126與遠程裝置1128通信,該通信路徑1126可以是有線和/或無線的,且可以包括lan、wan、因特網(wǎng)等的任何組合。控制邏輯和/或數(shù)據(jù)可以經(jīng)由通信路徑1126發(fā)送到和從計算機系統(tǒng)1100發(fā)送。

在實施例中,包括有形的計算機可使用或者可讀介質的具有在其上存儲的控制邏輯(軟件)的有形的設備或者制造物在這里也被稱為計算機程序產(chǎn)品或者程序存儲裝置。這包括,但不限于計算機系統(tǒng)1100、主存儲器1108、次級存儲器1110和可拆卸存儲單元1118和1122,以及具體表現(xiàn)前述的任何組合的有形的制造物。這種控制邏輯當由一個或多個數(shù)據(jù)處理裝置(比如計算機系統(tǒng)1100)執(zhí)行時,使得這種數(shù)據(jù)處理裝置如在這里描述的操作。

基于本公開中包括的教導,對本領域技術人員很明顯如何使用除了圖11中示出的之外的數(shù)據(jù)處理裝置、計算機系統(tǒng)和/或計算機架構做出和使用實施例。具體來說,實施例可以以除了在這里描述的那些之外的軟件、硬件和/或操作系統(tǒng)實現(xiàn)來操作。

結論

要認識到具體實施方式部分,而不是

技術實現(xiàn)要素:
和摘要部分(如果有的話)意在用于解釋權利要求。發(fā)明內容和摘要部分(如果有的話)可以提出由發(fā)明人考慮的一個或多個,但不必是所有示例性實施例,且因此不意在以任何方式限制本公開或者所附權利要求。

雖然在這里已經(jīng)參考用于示例性領域和應用的示例性實施例描述了本公開,但是應當理解本公開不限于此。其他實施例和對其的修改是可能的,且在本公開的范圍和精神內。例如,且不限制該段落的普遍性,實施例不限于在圖中圖示和/或在這里描述的軟件、硬件、固件和/或實體。另外,實施例(無論是否在這里明確地描述)對超出在這里描述的示例的領域和應用具有重要的實用性。

已經(jīng)通過圖示指定功能的實現(xiàn)及其關系的功能構建塊的幫助在這里描述了實施例。這些功能構建塊的邊界在這里為了說明的方便而任意地限定??梢远x替代的邊界,只要適當?shù)貓?zhí)行指定的功能與關系(或其等效物)即可。此外,替代實施例可以使用不同于在這里描述的次序的次序執(zhí)行功能塊、步驟、操作、方法等。

在這里對“一個實施例”、“一實施例”、“示例實施例”或者類似短語的引用指示描述的實施例可以包括特定的特征、結構或者特性,但是每個實施例不必包括特定的特征、結構或者特性。此外,這種短語不必指示相同實施例。另外,當關于實施例描述特定的特征、結構或者特性時,將這種特征、結構或者特性并入到其他實施例中在本領域技術人員的認識內,而無論是否在這里明確地提到或者描述。

本公開的廣度和范圍不應該由任意以上描述的示例性實施例限制,而是應該僅根據(jù)下面的權利要求及其等效限定。

當前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
平邑县| 棋牌| 沛县| 文水县| 静安区| 五大连池市| 霍州市| 区。| 威信县| 绍兴县| 沂水县| 昌邑市| 沁阳市| 防城港市| 台北市| 安顺市| 长白| 镇康县| 唐海县| 开远市| 漯河市| 洛浦县| 灵璧县| 房产| 阜康市| 横山县| 长寿区| 专栏| 天水市| 重庆市| 安国市| 贵港市| 乌兰县| 梅河口市| 项城市| 武城县| 呈贡县| 上林县| 彩票| 高密市| 大竹县|