相關(guān)申請的交叉引用
本申請要求于2015年11月24日提交的美國臨時(shí)專利申請no.62/259,405的權(quán)益,將其通過引用全文并入于此。
背景技術(shù):
幾乎所有的商業(yè)數(shù)據(jù)庫系統(tǒng)依賴于高速緩存技術(shù)以改進(jìn)性能。由于存儲(chǔ)器成本的降低以及計(jì)算速度的增加,今天數(shù)據(jù)庫可以很大。大數(shù)據(jù)庫可以做出對(duì)于特定信息查詢數(shù)據(jù)庫的計(jì)算集中處理。高速緩存機(jī)制已經(jīng)由數(shù)據(jù)庫系統(tǒng)使用以幫助減小查詢數(shù)據(jù)庫的計(jì)算復(fù)雜性。與占用更長時(shí)間來存取的存儲(chǔ)設(shè)備(比如基于磁盤的存儲(chǔ)設(shè)備)相反,高速緩存通常在可以快速地存取的存儲(chǔ)器(比如隨機(jī)存取存儲(chǔ)器(ram))中實(shí)現(xiàn)。高速緩存典型地存儲(chǔ)頻繁使用的數(shù)據(jù),并減小數(shù)據(jù)庫系統(tǒng)存取數(shù)據(jù)頁需要的時(shí)間。
高速緩存條目典型地取決于比如引用表或者視圖的其他數(shù)據(jù)。例如,查詢結(jié)果可以取決于多個(gè)引用表,其中一些可以被遞歸地存取。但是,數(shù)據(jù)庫系統(tǒng)內(nèi)的事務(wù)可能使得表的條目被修改或者刪除。為了提供數(shù)據(jù)庫中數(shù)據(jù)的事務(wù)一致的快照,需要使與修改的表對(duì)應(yīng)的高速緩存的內(nèi)容無效。
附圖說明
附圖并入在這里且形成說明書的一部分。
圖1是根據(jù)示例實(shí)施例的在多個(gè)節(jié)點(diǎn)中包括多個(gè)高速緩存的共享磁盤數(shù)據(jù)庫系統(tǒng)的框圖。
圖2圖示根據(jù)示例實(shí)施例的數(shù)據(jù)庫管理系統(tǒng)。
圖3圖示根據(jù)示例實(shí)施例的高速緩存節(jié)點(diǎn)。
圖4是描述根據(jù)示例實(shí)施例的由高速緩存節(jié)點(diǎn)更新表時(shí)間戳和表時(shí)間戳查詢的處理的序列圖。
圖5是圖示根據(jù)示例實(shí)施例的用于在高速緩存節(jié)點(diǎn)處理讀取查詢的處理的流程圖。
圖6a是描述根據(jù)示例實(shí)施例的用于處理標(biāo)識(shí)數(shù)據(jù)庫表的時(shí)間戳的請求的方法的流程圖。
圖6b是描述根據(jù)示例實(shí)施例的用于處理數(shù)據(jù)庫更新請求的方法的流程圖。
圖7是描述根據(jù)實(shí)施例的使高速緩存節(jié)點(diǎn)中的表時(shí)間戳的遠(yuǎn)程副本無效的處理的序列圖。
圖8a和圖8b圖示根據(jù)實(shí)施例的兩個(gè)示例。
圖9是描述根據(jù)實(shí)施例的用于處理數(shù)據(jù)庫更新請求和在高速緩存節(jié)點(diǎn)的表時(shí)間戳的副本的無效處理的方法的流程圖。
圖10是描述根據(jù)實(shí)施例的用于在高速緩存節(jié)點(diǎn)更新表時(shí)間戳的副本的方法的流程圖。
圖11是對(duì)實(shí)現(xiàn)各種實(shí)施例有用的示例計(jì)算機(jī)系統(tǒng)。
在圖中,同樣的附圖標(biāo)記通常指示相同或者類似的元件。另外,通常,附圖標(biāo)記的最左邊的數(shù)字標(biāo)識(shí)附圖標(biāo)記首次出現(xiàn)的圖。
具體實(shí)施方式
提供高效的高速緩存無效機(jī)制是挑戰(zhàn)性的問題。高速緩存節(jié)點(diǎn)保存與高速緩存的數(shù)據(jù)相關(guān)聯(lián)的時(shí)間戳。該時(shí)間戳典型地與高速緩存節(jié)點(diǎn)中的所有條目相關(guān)聯(lián)。因此,如果單個(gè)表中的條目在源數(shù)據(jù)庫中被更新,則高速緩存節(jié)點(diǎn)中的全部表將具有過時(shí)的時(shí)間戳和將被無效。
在這里提供了系統(tǒng)、方法和/或計(jì)算機(jī)程序產(chǎn)品實(shí)施例,和/或其組合和子組合,用于使已經(jīng)在與源數(shù)據(jù)庫耦合的一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)中高速緩存的數(shù)據(jù)無效。在這里公開的系統(tǒng)和方法通過消除不必要的高速緩存無效而改進(jìn)高速緩存效率。
在實(shí)施例中,每一源表具有它自己的時(shí)間戳。該時(shí)間戳例如可以被保存為在源數(shù)據(jù)庫中源表的屬性。此外,在本實(shí)施例中,(在高速緩存節(jié)點(diǎn)中存儲(chǔ)的)每一高速緩存的實(shí)體也具有它自己的時(shí)間戳,其指示從來自源數(shù)據(jù)庫的一個(gè)或多個(gè)數(shù)據(jù)庫表檢索高速緩存的實(shí)體的時(shí)間戳。因此,在給定的高速緩存節(jié)點(diǎn)中,可以分開地使每一高速緩存的實(shí)體無效而不影響其他高速緩存的實(shí)體的有效性。
典型地,當(dāng)在高速緩存節(jié)點(diǎn)中找到請求的結(jié)果(比如,但不限于,查詢結(jié)果、授權(quán)檢查的結(jié)果、從一個(gè)或多個(gè)表導(dǎo)出的索引、高速緩存查找的結(jié)果等)時(shí),檢查與該請求結(jié)果相關(guān)聯(lián)的高速緩存的實(shí)體的時(shí)間戳。如果高速緩存的實(shí)體的時(shí)間戳小于源數(shù)據(jù)庫的最新時(shí)間戳,則確定高速緩存的實(shí)體包括過時(shí)的數(shù)據(jù),且不應(yīng)該用于答復(fù)請求。
指向圖1,圖示了其中可以實(shí)現(xiàn)實(shí)施例的示例數(shù)據(jù)庫計(jì)算環(huán)境100。數(shù)據(jù)庫環(huán)境100包括數(shù)據(jù)庫管理系統(tǒng)(dbms)102和與dbms102通信的客戶端101。dbms102可以是在服務(wù)器上執(zhí)行且經(jīng)由以下描述的網(wǎng)絡(luò)(比如網(wǎng)絡(luò)103)可接入到客戶端102的系統(tǒng)。雖然客戶端101在圖1中表示為與dbms102分開的物理機(jī)器,但是這通過示例的方式呈現(xiàn),而不是限制。在附加的實(shí)施例中,客戶端101占據(jù)與dbms102相同的物理系統(tǒng)。在另外的實(shí)施例中,客戶端101是要求訪問dbms102的軟件應(yīng)用。在另一實(shí)施例中,用戶可以操作客戶端101以請求訪問dbms102。遍及該說明書,術(shù)語客戶端和用戶將可互換地使用以指示手動(dòng)地或者自動(dòng)地訪問dbms102的任何硬件、軟件或者人類請求者,比如客戶端101。另外,客戶端101和dbms102兩者可以在計(jì)算機(jī)系統(tǒng),比如圖11中討論的示例計(jì)算機(jī)系統(tǒng)內(nèi)執(zhí)行。
客戶端101和dbms102可以經(jīng)網(wǎng)絡(luò)103通信。網(wǎng)絡(luò)103可以是可以攜帶數(shù)據(jù)通信的任何網(wǎng)絡(luò)或者網(wǎng)絡(luò)的組合。這種網(wǎng)絡(luò)103可以包括,但不限于局域網(wǎng)、城市區(qū)域網(wǎng)和/或包括因特網(wǎng)的廣域網(wǎng)。
dbms102可以從客戶端101接收請求,比如查詢。該請求可以用于檢索、修改、附加或者以其他方式操縱或者訪問在dbms102和/或高速緩存節(jié)點(diǎn)104中存儲(chǔ)的數(shù)據(jù),如將相對(duì)于圖2進(jìn)一步描述的。
為了加快對(duì)請求(比如查詢)的響應(yīng),dbms102中存儲(chǔ)的數(shù)據(jù)的副本(copy)可以存儲(chǔ)在一個(gè)或多個(gè)高速緩存節(jié)點(diǎn),比如高速緩存節(jié)點(diǎn)104a-104c中(在這里統(tǒng)稱為高速緩存節(jié)點(diǎn)104)。雖然高速緩存節(jié)點(diǎn)104a-104c表示為遠(yuǎn)離dbms102的物理機(jī)器,這是以示例的方式呈現(xiàn),而不是限制。雖然在如圖1所示的示例實(shí)施例中,高速緩存節(jié)點(diǎn)104a-104c經(jīng)由網(wǎng)絡(luò)103與dbms102通信,在附加的實(shí)施例中,一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)104a-104c對(duì)于dbms102是本地的,例如,直接連接到dbms102。以下進(jìn)一步具體地描述在高速緩存節(jié)點(diǎn)中存儲(chǔ)和訪問數(shù)據(jù)。
指向圖2,圖示了dbms102的示例組件。在一個(gè)示例中,dbms102可以包括服務(wù)器或者是服務(wù)器的一部分。例如,dbms102可以由處理邏輯實(shí)現(xiàn)和/或包括處理邏輯,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。dbms102包括查詢處理引擎201、dbms102中存儲(chǔ)的多個(gè)數(shù)據(jù)庫表215a-215n(也稱為源數(shù)據(jù)庫表)和全局(dbms-寬)提交(commit)id數(shù)據(jù)結(jié)構(gòu)221(也稱為提交標(biāo)識(shí)計(jì)數(shù)器)。dbms102進(jìn)一步包括高速緩存管理器211、高速緩存無效器213和表更新跟蹤器223。將在下面依次描述這些組件中的每一個(gè)。
在一個(gè)示例中,為處理查詢,dbms102包括查詢處理引擎201,該查詢處理引擎201又包括解析器模塊203、執(zhí)行單元205和提交引擎207。以下相對(duì)于它們的功能描述查詢處理引擎組件,因?yàn)樗鼘儆谔幚韺ぶ返絛bms102的查詢。
查詢可以由客戶端101使用符合查詢語言的語法發(fā)送到dbms102。在示例實(shí)施例中,查詢語言是結(jié)構(gòu)化查詢語言(“sql”),但是可以是另一查詢語言。dbms102能夠根據(jù)查詢語言解釋查詢,且基于該解釋,生成到數(shù)據(jù)庫表215a-215n的請求。
查詢可以由用戶使用客戶端101或者由在客戶端101上執(zhí)行的應(yīng)用生成。在接收時(shí),dbms102開始處理查詢。一旦處理查詢,處理的查詢的結(jié)果以查詢結(jié)果從dbms102發(fā)送到客戶端101。
解析器模塊203解析所接收的查詢。在實(shí)施例中,解析器162可以將查詢轉(zhuǎn)換為表示查詢的格式的二叉樹數(shù)據(jù)結(jié)構(gòu)。在其他實(shí)施例中,可以使用其他類型的數(shù)據(jù)結(jié)構(gòu)。
當(dāng)解析完成時(shí),解析器模塊203將所解析的查詢傳遞到歸一化器231。歸一化器231可以歸一化所解析的查詢。例如,歸一化器231可以從解析的查詢消除冗余sql結(jié)構(gòu),和/或還對(duì)于解析的查詢執(zhí)行錯(cuò)誤檢查,其確認(rèn)解析的查詢中的表的名稱符合dbms102中存儲(chǔ)的表的名稱。歸一化器231也可以確認(rèn)如由解析的查詢描述的dbms102中存儲(chǔ)的表當(dāng)中的關(guān)系有效。
仍然考慮圖2,一旦完成歸一化,則歸一化器231將歸一化的查詢傳遞到編譯器233。編譯器233將歸一化的查詢編譯為機(jī)器可讀格式。編譯處理確定怎樣由dbms102執(zhí)行查詢。為了保證高效地執(zhí)行查詢,編譯器233可以執(zhí)行查詢優(yōu)化器235,以生成用于執(zhí)行查詢的訪問計(jì)劃。
查詢優(yōu)化器235分析該查詢和確定用于執(zhí)行查詢的查詢計(jì)劃。該查詢計(jì)劃根據(jù)查詢語義檢索和操縱dbms102中存儲(chǔ)的數(shù)據(jù)庫表中的信息。這可以包括選擇每一訪問的表的訪問方法,選擇對(duì)表執(zhí)行連接(join)操作的順序和選擇每一連接操作中要使用的連接方法。因?yàn)榭赡苡惺褂眠@些操作的組合執(zhí)行給定查詢的多個(gè)策略,查詢優(yōu)化器235還可以包括生成和評(píng)估多個(gè)策略,從該多個(gè)策略中選擇執(zhí)行查詢的最好策略。
在實(shí)施例中,查詢優(yōu)化器235生成多個(gè)查詢計(jì)劃。一旦生成,則查詢優(yōu)化器235從多個(gè)查詢計(jì)劃選擇單個(gè)查詢計(jì)劃以執(zhí)行查詢。給出幾個(gè)示例,所選的查詢計(jì)劃可以是成本高效的計(jì)劃,使用dbms102中最小量的存儲(chǔ)器的查詢計(jì)劃,最快執(zhí)行的查詢計(jì)劃,或者以上的任何組合。
在實(shí)施例中,為了優(yōu)化器235生成和選擇查詢計(jì)劃,執(zhí)行單元205可以使用數(shù)據(jù)統(tǒng)計(jì)來估計(jì)特定的查詢計(jì)劃的計(jì)算成本。例如,可以考慮查詢計(jì)劃的大小(即,行數(shù))的估計(jì)以選擇高效的查詢計(jì)劃?;谠摴烙?jì),查詢優(yōu)化器235從多個(gè)查詢計(jì)劃選擇執(zhí)行查詢的高效的查詢計(jì)劃。
作為其功能的一部分,查詢優(yōu)化器235還可以生成索引以保證來自dbms102中存儲(chǔ)的表的信息可以被快速地和高效地檢索。索引是所選的數(shù)據(jù)庫表字段的分類副本,其允許查詢快速地檢索信息和不必掃描整個(gè)數(shù)據(jù)庫來檢索信息的選擇。
在實(shí)施例中,代碼發(fā)生器237生成dbms103實(shí)現(xiàn)所選的高效的查詢計(jì)劃所需的代碼。執(zhí)行單元205執(zhí)行生成的代碼。
仍然考慮圖2,在dbms102接收的查詢可以包括讀取和/或?qū)懭胝埱?。雖然讀取請求僅檢索已經(jīng)在dbms102內(nèi)的表(比如數(shù)據(jù)庫表215a-215n)中存儲(chǔ)的數(shù)據(jù),寫入請求需要關(guān)于一個(gè)或多個(gè)這些表的數(shù)據(jù)修改和/或數(shù)據(jù)刪除。提交引擎207用于處理寫入請求。在數(shù)據(jù)庫管理系統(tǒng)中,“提交”是指做出一組假定的永久改變。例如,在sql中,提交聲明(statement)結(jié)束數(shù)據(jù)庫管理系統(tǒng)內(nèi)的事務(wù),且做出對(duì)所有客戶端可見的所有改變。在sql中,通常格式是發(fā)布“開始工作”聲明,一個(gè)或多個(gè)sql聲明,且然后提交聲明。替代地,在sql中,可以發(fā)布“回滾(rollback)”聲明,其撤消從發(fā)布“開始工作”起執(zhí)行的所有工作。
注意到,雖然根據(jù)數(shù)據(jù)庫查詢圖示了該示例,但是本公開的實(shí)施例不限于數(shù)據(jù)庫查詢。本公開的實(shí)施例可以應(yīng)用于來自客戶端101、高速緩存節(jié)點(diǎn)104等的任何請求。本公開的實(shí)施例可以應(yīng)用于導(dǎo)出用于任何請求的一個(gè)或多個(gè)有關(guān)的表的任何方法。例如,該請求可以包括,但不限于比如授權(quán)檢查的數(shù)據(jù)的請求、從一個(gè)或多個(gè)表導(dǎo)出的索引的請求、高速緩存查找等。
在一個(gè)示例中,在事務(wù)期間,由查詢處理引擎201接收的改變請求可以存儲(chǔ)在數(shù)據(jù)修改日志中,其可以在數(shù)據(jù)修改時(shí)間寫入到非易失性日志存儲(chǔ)設(shè)備(例如,一個(gè)或多個(gè)磁盤)。提交日志可以是可以永久地標(biāo)記成功地提交相應(yīng)的事務(wù)且先前的寫入數(shù)據(jù)修改日志有效的日志。在一個(gè)示例中,當(dāng)處理提交請求時(shí),例如,提交引擎207可以將提交日志寫入到非易失性日志存儲(chǔ)設(shè)備。在那些改變的完成時(shí),提交引擎207遞增提交id,比如提交id221,其是dbms寬的全局計(jì)數(shù)器。提交id221有效地跟蹤表215a-215n中數(shù)據(jù)的版本。表215a-215n中存儲(chǔ)的數(shù)據(jù)的舊版本可以存儲(chǔ)在dbms102中的分開的存儲(chǔ)空間,或者一個(gè)或多個(gè)高速緩存節(jié)點(diǎn),比如104a-104c中,且在請求時(shí)被檢索。
仍然考慮圖2,dbms102另外包括一個(gè)或多個(gè)數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a-215n。數(shù)據(jù)庫表215a-215n中的每一個(gè)具有與其相關(guān)聯(lián)的表時(shí)間戳屬性,如由219a-219n指示的。該表時(shí)間戳典型地是指示已經(jīng)更新表的提交事務(wù)當(dāng)中的最大提交id的計(jì)數(shù)器。該表時(shí)間戳可以基于提交id更新。用于每一數(shù)據(jù)庫表的表時(shí)間戳屬性可以存儲(chǔ)在數(shù)據(jù)庫表自身中,或者在比如如以下將要描述的表更新跟蹤器223的另一數(shù)據(jù)結(jié)構(gòu)中,或者在與dbms102相關(guān)聯(lián)的任何其他數(shù)據(jù)結(jié)構(gòu)中。另外,dbms102中存儲(chǔ)的每一表包括修改進(jìn)行中計(jì)數(shù)器。注意到,本領(lǐng)域技術(shù)人員將理解可以代替地使用其他數(shù)據(jù)結(jié)構(gòu)以實(shí)現(xiàn)與修改進(jìn)行中計(jì)數(shù)器相同的功能,比如,但不限于標(biāo)記、整數(shù)等。例如,數(shù)據(jù)庫表215a具有在其中存儲(chǔ)的修改進(jìn)行中計(jì)數(shù)器217a,數(shù)據(jù)庫表215b具有在其中存儲(chǔ)的另一修改進(jìn)行中計(jì)數(shù)器217b,等等。如將相對(duì)于圖4-圖10具體描述的,修改進(jìn)行中計(jì)數(shù)器用于保證在一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)(比如高速緩存節(jié)點(diǎn)104a-104c)的請求時(shí),對(duì)于每一數(shù)據(jù)庫表提供最新的表時(shí)間戳信息。雖然修改進(jìn)行中計(jì)數(shù)器數(shù)據(jù)結(jié)構(gòu)示為存儲(chǔ)在數(shù)據(jù)庫表中,但是注意到這些修改進(jìn)行中計(jì)數(shù)器數(shù)據(jù)結(jié)構(gòu)可以存儲(chǔ)在與dbms102相關(guān)聯(lián)的其他數(shù)據(jù)結(jié)構(gòu)中。在一個(gè)實(shí)施例中,每一源表具有它自己的表時(shí)間戳和它自己的修改進(jìn)行中計(jì)數(shù)器。在本實(shí)施例中,(在高速緩存節(jié)點(diǎn)中存儲(chǔ)的)每一高速緩存的實(shí)體也具有它自己的時(shí)間戳,其指示從來自源數(shù)據(jù)庫的一個(gè)或多個(gè)數(shù)據(jù)庫表檢索高速緩存的實(shí)體的時(shí)間戳。在本實(shí)施例中,通過使用與每一表相關(guān)聯(lián)的表時(shí)間戳和修改進(jìn)行中計(jì)數(shù)器,可以分開地使給定高速緩存節(jié)點(diǎn)中的每一高速緩存的實(shí)體無效而不影響其他高速緩存的實(shí)體的有效性。
仍然考慮圖2,dbms102進(jìn)一步包括表更新跟蹤器223,其更新與已經(jīng)更新的每一數(shù)據(jù)庫表相關(guān)聯(lián)的時(shí)間戳。因?yàn)槊恳粩?shù)據(jù)庫表具有分開的表時(shí)間戳,更新、刪除或者以其他方式修改一個(gè)數(shù)據(jù)庫表中存儲(chǔ)的信息,僅導(dǎo)致要影響(遞增)的該數(shù)據(jù)庫表的時(shí)間戳,且使其他數(shù)據(jù)庫表的時(shí)間戳保留原樣。例如,如果作為數(shù)據(jù)修改請求的結(jié)果,修改數(shù)據(jù)庫表215a中的數(shù)據(jù),則僅更新表時(shí)間戳219a。在另一示例中,如果修改與表215b相關(guān)聯(lián)的元數(shù)據(jù),則僅更新表時(shí)間戳219b。
根據(jù)一個(gè)示例,表時(shí)間跟蹤器223也可以配置為管理一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)中一個(gè)或多個(gè)表時(shí)間戳219a-219n的副本。例如,當(dāng)高速緩存節(jié)點(diǎn)104高速緩存來自數(shù)據(jù)庫表215a的高速緩存的實(shí)體時(shí),高速緩存節(jié)點(diǎn)104可以向表時(shí)間跟蹤器223登記,以使得表時(shí)間跟蹤器223將在高速緩存節(jié)點(diǎn)104中保留表時(shí)間戳219a的副本,如以下更詳細(xì)地討論的。在該示例中,表時(shí)間跟蹤器223可以配置為當(dāng)表時(shí)間戳219a被改變和/或正在被改變的過程中時(shí),使高速緩存節(jié)點(diǎn)104中表時(shí)間戳219a的副本無效。在另一示例中,高速緩存的實(shí)體可以例如由于兩個(gè)或更多數(shù)據(jù)庫表215a-215n之間的相關(guān)性,而產(chǎn)生自與兩個(gè)或更多數(shù)據(jù)庫表215a-215n相關(guān)聯(lián)的請求結(jié)果(例如,查詢結(jié)果)。在該示例中,表時(shí)間跟蹤器223可以配置為當(dāng)執(zhí)行對(duì)兩個(gè)或更多數(shù)據(jù)庫表215a-215n中的任意的更新時(shí),使高速緩存節(jié)點(diǎn)104中的高速緩存的實(shí)體無效。在該示例中,表時(shí)間跟蹤器223將保留與在高速緩存節(jié)點(diǎn)104中的兩個(gè)或更多數(shù)據(jù)庫表215a-215n對(duì)應(yīng)的兩個(gè)或更多表時(shí)間戳219a-219n的副本。在一個(gè)示例中,具有來自表215a-215n的高速緩存的結(jié)果的所有高速緩存節(jié)點(diǎn)可以向表時(shí)間跟蹤器223自動(dòng)地登記,以使得表時(shí)間跟蹤器223將保留它們的表時(shí)間戳的副本。替代地,高速緩存節(jié)點(diǎn)可以決定是否向表時(shí)間跟蹤器223登記。與數(shù)據(jù)庫表215a-215n相關(guān)聯(lián)的表時(shí)間戳219a-219n可以存儲(chǔ)在表更新跟蹤器223中,且當(dāng)更新時(shí)對(duì)相應(yīng)的表做出改變。替代地,表時(shí)間戳219a-219n可以存儲(chǔ)在它們的相應(yīng)的表中,且表更新跟蹤器223當(dāng)對(duì)數(shù)據(jù)庫表做出改變時(shí)更新表時(shí)間戳。在該示例中,表時(shí)間戳219a-219n指示它們相應(yīng)的表已經(jīng)被更新的最后時(shí)間。
本公開的實(shí)施例提供了用于更新表時(shí)間戳219a-219n和提交id221的新穎方法,以使得不從高速緩存節(jié)點(diǎn)(比如高速緩存節(jié)點(diǎn)104a-104c中的任意)提供過時(shí)數(shù)據(jù)。將相對(duì)于圖4-圖10具體描述該方法。
仍然考慮圖2,dbms102另外包括處理高速緩存管理器211。高速緩存管理器211保持在dbms102的布置下的所有高速緩存節(jié)點(diǎn)的列表。當(dāng)高速緩存節(jié)點(diǎn),例如,高速緩存節(jié)點(diǎn)104c被添加到服務(wù)dbms102時(shí),高速緩存節(jié)點(diǎn)向高速緩存管理器211登記它自己。因此,高速緩存管理器211將高速緩存節(jié)點(diǎn)104c的名稱添加到它管理的所有高速緩存節(jié)點(diǎn)的列表。類似地,當(dāng)高速緩存節(jié)點(diǎn),例如,高速緩存節(jié)點(diǎn)104c從dbms102的布置去除時(shí),它從高速緩存管理器211撤銷登記它自己。因此,高速緩存管理器211從它管理的高速緩存節(jié)點(diǎn)的列表去除高速緩存節(jié)點(diǎn)104c。高速緩存管理器211可以相對(duì)于它管理的高速緩存節(jié)點(diǎn)另外執(zhí)行其他服務(wù),比如收集高速緩存使用統(tǒng)計(jì)和分布跨越高速緩存節(jié)點(diǎn)的可用存儲(chǔ)器預(yù)算。高速緩存管理器211可以另外允許以分布式方式的高速緩存節(jié)點(diǎn)間通信。
dbms102可以進(jìn)一步包括高速緩存無效器213。當(dāng)高速緩存條目被插入到高速緩存中時(shí),它們可以與從屬的對(duì)象相關(guān)聯(lián)。如上所述,可以更新數(shù)據(jù)庫表215a-215n中存儲(chǔ)的對(duì)象。該更新可以尋址到元數(shù)據(jù)、數(shù)據(jù)或者特權(quán),或者其他類型。在從屬的對(duì)象的更新時(shí),高速緩存無效器213可以向高速緩存節(jié)點(diǎn),比如高速緩存節(jié)點(diǎn)104通知改變。這些通知基于登記的相關(guān)性分派。為了更快的無效,高速緩存條目被標(biāo)記為無效。這允許基于事務(wù)標(biāo)識(shí)符的舊的快照的查找和無效高速緩存條目的異步無用數(shù)據(jù)收集??梢詫?duì)于特定的高速緩存條目手動(dòng)地觸發(fā)無效。另外,可以在對(duì)于其登記了相關(guān)性的數(shù)據(jù)的改變時(shí)觸發(fā)自動(dòng)無效。當(dāng)高速緩存條目被添加到高速緩存時(shí)可以指定這些相關(guān)性,且分解遞歸的相關(guān)性。相關(guān)性由標(biāo)識(shí)符(例如,對(duì)象)、類型(例如,表)和改變標(biāo)志(例如,元數(shù)據(jù)改變)描述。該類型和改變標(biāo)志指導(dǎo)無效處理且用于過濾不相關(guān)的事件。作為非限制示例,用于sql視圖的高速緩存節(jié)點(diǎn)可以引用另一視圖和三個(gè)表。然后,該視圖和三個(gè)表將是從屬的對(duì)象。本公開的實(shí)施例可以遞歸地分解這些相關(guān)性低至表的級(jí)別,且在表的級(jí)別執(zhí)行更新跟蹤。
指向圖3,根據(jù)實(shí)施例圖示了具有在其中存儲(chǔ)的示例數(shù)據(jù)結(jié)構(gòu)的高速緩存節(jié)點(diǎn)104(比如高速緩存節(jié)點(diǎn)104a、104b或者104c)。在一個(gè)示例中,高速緩存節(jié)點(diǎn)104可以包括服務(wù)器或者是服務(wù)器的一部分。例如,高速緩存節(jié)點(diǎn)104可以由處理邏輯實(shí)現(xiàn)和/或包括處理邏輯,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。高速緩存節(jié)點(diǎn)104包括一組高速緩存關(guān)鍵字301a-301m,相應(yīng)的高速緩存的實(shí)體303a-303m,和相應(yīng)的高速緩存的實(shí)體時(shí)間戳305a-305n。每一高速緩存的實(shí)體303a-303m包括反映在dbms102中找到的相應(yīng)的一個(gè)或多個(gè)源數(shù)據(jù)庫表中找到的信息的高速緩存的請求結(jié)果(例如,高速緩存的查詢結(jié)果,授權(quán)檢查的高速緩存的結(jié)果,從一個(gè)或多個(gè)表導(dǎo)出的高速緩存的索引等)。例如,如圖所示,高速緩存關(guān)鍵字301a與對(duì)應(yīng)于圖2中的數(shù)據(jù)庫表215a的高速緩存的實(shí)體303a相關(guān)聯(lián)。另外,與高速緩存關(guān)鍵字301a對(duì)應(yīng)的高速緩存的實(shí)體303a另外包括高速緩存的實(shí)體時(shí)間戳305a,其反映從dbms102中的一個(gè)或多個(gè)源數(shù)據(jù)庫表檢索高速緩存的實(shí)體303a的時(shí)間。高速緩存關(guān)鍵字301a和/或高速緩存的實(shí)體303a可以引用任意數(shù)目的源表和/或源表片段。例如,高速緩存關(guān)鍵字301a和/或高速緩存的實(shí)體303a可以引用一個(gè)或多個(gè)表,且高速緩存的實(shí)體的該組引用表可以重疊。根據(jù)一個(gè)示例,高速緩存關(guān)鍵字301可以包括可用于標(biāo)識(shí)和/或定位高速緩存的實(shí)體的信息。例如,高速緩存關(guān)鍵字301可以包括用于請求、查詢字符串、表對(duì)象標(biāo)識(shí)符(oid)、分區(qū)oid等的指令。換句話說,當(dāng)在一個(gè)示例中,對(duì)dbms102做出查詢,且查詢的結(jié)果在源表215a時(shí),該結(jié)果的副本(也稱為復(fù)制品)也可以存儲(chǔ)在高速緩存的實(shí)體303a中。因此,對(duì)于進(jìn)一步的查詢,該查詢可以指向高速緩存節(jié)點(diǎn)104,且在確定與查詢相關(guān)聯(lián)的關(guān)鍵字匹配高速緩存關(guān)鍵字301之后,可以代替表215a從高速緩存節(jié)點(diǎn)104和高速緩存的實(shí)體303a檢索該結(jié)果。
高速緩存節(jié)點(diǎn)104還可以存儲(chǔ)指示它已經(jīng)在其中高速緩存的每一源表的最新的表時(shí)間戳的信息。例如,如圖所示,表時(shí)間戳307a-307m對(duì)應(yīng)于高速緩存的實(shí)體303a-303m,且保持dbms102中相應(yīng)的源數(shù)據(jù)庫表的最新的時(shí)間戳的值。換句話說,高速緩存節(jié)點(diǎn)104中的表時(shí)間戳307a-307m可以是源節(jié)點(diǎn)(例如,dbms102)中表時(shí)間戳219a-219n的副本。當(dāng)源表及其相應(yīng)的高速緩存位于兩個(gè)不同工作節(jié)點(diǎn)時(shí),每個(gè)表時(shí)間戳查找將涉及節(jié)點(diǎn)間通信。因此,在一個(gè)實(shí)施例中,表時(shí)間戳的副本存儲(chǔ)在高速緩存節(jié)點(diǎn)中,以減小節(jié)點(diǎn)間通信需要的時(shí)間。但是,這些表時(shí)間戳的副本需要被有高效地更新。在一個(gè)示例中,高速緩存節(jié)點(diǎn)104中的高速緩存的實(shí)體303a對(duì)應(yīng)于源節(jié)點(diǎn)(例如,dbms102)中表215a中存儲(chǔ)的所有數(shù)據(jù)或者數(shù)據(jù)的子集。高速緩存的實(shí)體時(shí)間戳305a對(duì)應(yīng)于高速緩存高速緩存的實(shí)體303a的時(shí)間戳。在該示例中,表時(shí)間戳307a包括當(dāng)最后更新表215a時(shí)表時(shí)間戳217a的副本。在另一示例中,高速緩存節(jié)點(diǎn)104中的高速緩存的實(shí)體303b對(duì)應(yīng)于源節(jié)點(diǎn)(例如,dbms102)中表215a和215b中存儲(chǔ)的數(shù)據(jù)的子集。如在先前示例,高速緩存的實(shí)體時(shí)間戳305b對(duì)應(yīng)于高速緩存高速緩存的實(shí)體303b的時(shí)間戳。但是,與在先前示例中不同,這里高速緩存的實(shí)體303b的有效性將取決于在高速緩存節(jié)點(diǎn)104中存儲(chǔ)高速緩存的實(shí)體303b之后是否存在對(duì)表215a和215b中任何一個(gè)的任何更新。如上所述和將相對(duì)于圖7-圖10更詳細(xì)地討論的,源節(jié)點(diǎn)(例如,dbms102)的表更新跟蹤器223可以配置為控制表時(shí)間戳307a-307m的有效性??蛇x地,高速緩存節(jié)點(diǎn)104可以包括檢查在其中存儲(chǔ)的所有高速緩存的條目并刪除那些標(biāo)記為無效的無用數(shù)據(jù)收集程序模塊。
在dbms中更新表時(shí)間戳和處理高速緩存查詢
圖4、圖5、圖6a和圖6b描述根據(jù)實(shí)施例,怎樣更新表時(shí)間戳,和處理請求,以在高速緩存節(jié)點(diǎn)上提供事務(wù)一致的快照。在一個(gè)示例中,包括表215a-215n的dbms102可以是包括源表的源節(jié)點(diǎn),從該源表高速緩存高速緩存的實(shí)體。另外地或者替代地,源節(jié)點(diǎn)可以是任何處理邏輯,其可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,關(guān)于處理裝置執(zhí)行的指令)或者其組合,且可以包括從其高速緩存高速緩存的實(shí)體的源表。
指向圖4,根據(jù)實(shí)施例圖示了描述在dbms102中更新表時(shí)間戳,和由高速緩存節(jié)點(diǎn)從dbms102的表時(shí)間戳查詢的處理的示例序列圖400。為了促進(jìn)描述該處理,通常參考先前引入到圖2中的數(shù)據(jù)結(jié)構(gòu)。時(shí)間圖400可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。
在步驟401,且例如在時(shí)間戳10,源數(shù)據(jù)庫表1中存儲(chǔ)的數(shù)據(jù)的副本存儲(chǔ)在高速緩存節(jié)點(diǎn)104中,可能作為來自要求訪問和檢索數(shù)據(jù)庫表1的dbms102的查詢的結(jié)果。但是,該步驟401可以是存儲(chǔ)一個(gè)或多個(gè)源表中的任意和/或在一個(gè)或多個(gè)源表的任何片段中的數(shù)據(jù)的子集的任何請求的結(jié)果。高速緩存節(jié)點(diǎn)104以與圖3中示出的那些類似的數(shù)據(jù)結(jié)構(gòu),存儲(chǔ)具有高速緩存時(shí)間戳10的該數(shù)據(jù)。
一旦在403發(fā)布更新請求(例如,提交聲明/請求),需要修改在數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a中存儲(chǔ)的數(shù)據(jù),或者與該數(shù)據(jù)庫表相關(guān)聯(lián)的元數(shù)據(jù)。為處理此,在步驟407,遞增與數(shù)據(jù)庫表對(duì)應(yīng)的修改進(jìn)行中計(jì)數(shù)器(比如修改進(jìn)行中計(jì)數(shù)器217a)的值。注意到,更新請求403可以包括對(duì)多于一個(gè)表的更新,且因此可以涉及多于一個(gè)修改進(jìn)行中計(jì)數(shù)器。在步驟408,提交引擎207(作為示例)可以將提交日志(其可以是可以永久地標(biāo)記成功地提交相應(yīng)的事務(wù)且先前寫入數(shù)據(jù)修改日志有效的日志)寫入到長期存儲(chǔ)器存儲(chǔ)設(shè)備(例如,非易失性日志存儲(chǔ)設(shè)備,比如磁盤)。在一個(gè)示例中,該操作可能是費(fèi)時(shí)的操作。在步驟409,提交id221的值遞增到下一時(shí)間戳,例如,11。
在405,具有時(shí)間戳11的請求q1從高速緩存節(jié)點(diǎn)104發(fā)布到源dbms102。該請求q1可以基于發(fā)送到高速緩存管理器的對(duì)高速緩存節(jié)點(diǎn)104的高速緩存查找。另外地或者替代地,請求q1可以基于對(duì)源節(jié)點(diǎn)的數(shù)據(jù)庫查詢。在一個(gè)示例中,請求q1可以基于源節(jié)點(diǎn)已經(jīng)指向(例如,轉(zhuǎn)發(fā))到高速緩存節(jié)點(diǎn)104的查詢。由于請求q1,在步驟411,高速緩存節(jié)點(diǎn)104可以請求dbms102以標(biāo)識(shí)在其中存儲(chǔ)的一個(gè)或多個(gè)數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a的最新的時(shí)間戳。但是,由于更新請求(例如,提交聲明)403的發(fā)布,dbms102已經(jīng)在修改表215a的過程中。也就是,提交id221已經(jīng)被更新,但是表215a的表時(shí)間戳還未被更新。因此,在這種暫時(shí)狀態(tài),由dbms102返回到高速緩存節(jié)點(diǎn)104的任何時(shí)間戳信息將反映過時(shí)的信息。為了解決該問題,在步驟413,做出有效性檢查以標(biāo)識(shí)修改進(jìn)行中計(jì)數(shù)器217a是否大于零。如果修改進(jìn)行中計(jì)數(shù)器217a的值確定為大于零,則指示數(shù)據(jù)庫表215a正在經(jīng)歷更新。因此,在時(shí)間戳10在高速緩存節(jié)點(diǎn)104中高速緩存的該數(shù)據(jù)庫表的先前的副本不再有效。
在步驟415,更新的表217a的表時(shí)間戳設(shè)置為等于提交id221的值。最終,在步驟417,關(guān)于影響在403發(fā)布的提交聲明的所有操作完成,且修改進(jìn)行中計(jì)數(shù)器217a的值遞減回到零。
指向圖5,圖示了根據(jù)實(shí)施例描述用于在高速緩存節(jié)點(diǎn)104處理比如但不限于讀取查詢的請求的方法500的流程圖。方法500可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖500的方法。例如,可以使用高速緩存節(jié)點(diǎn)104實(shí)現(xiàn)流程圖500。流程圖500的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實(shí)施例中,流程圖500的方法的兩個(gè)或更多步驟可以彼此同時(shí)執(zhí)行。
該方法500開始于步驟501且移動(dòng)到步驟503。在步驟503,高速緩存節(jié)點(diǎn)104接收比如讀取請求的請求。隨后,在步驟505,高速緩存節(jié)點(diǎn)104執(zhí)行查找以定位與讀取請求相關(guān)聯(lián)的高速緩存關(guān)鍵字。這可以通過搜索高速緩存節(jié)點(diǎn)104中存儲(chǔ)且圖3中示出的數(shù)據(jù)結(jié)構(gòu)而做出。高速緩存關(guān)鍵字301a-301n可以是分類的、未分類的、存儲(chǔ)在散列表、鏈接表、雙鏈接表、樹或者其他數(shù)據(jù)結(jié)構(gòu)中。因此,高速緩存節(jié)點(diǎn)104可以根據(jù)其中存儲(chǔ)它們的數(shù)據(jù)結(jié)構(gòu)在所有高速緩存關(guān)鍵字301a-301n當(dāng)中搜索高速緩存關(guān)鍵字。
在步驟507,高速緩存節(jié)點(diǎn)104做出檢查以確定查找是否成功。如果查找成功,則指示在讀取請求中請求的數(shù)據(jù)對(duì)象的副本存儲(chǔ)在高速緩存節(jié)點(diǎn)中的高速緩存的實(shí)體中,作為其結(jié)果,處理移動(dòng)到步驟511。但是,如果在步驟507確定在高速緩存節(jié)點(diǎn)中沒有找到與讀取請求相關(guān)聯(lián)的高速緩存關(guān)鍵字,則處理移動(dòng)到步驟509,且隨后在步驟520結(jié)束。
在步驟511-517,高速緩存節(jié)點(diǎn)104確定包括在請求(例如,讀取請求)中請求的對(duì)象的表的高速緩存的副本的時(shí)間戳是最新的或者舊的。在步驟511,高速緩存節(jié)點(diǎn)104檢索包括對(duì)象的高速緩存的實(shí)體的時(shí)間戳。在步驟513,高速緩存節(jié)點(diǎn)104發(fā)送請求到源513,以標(biāo)識(shí)與一個(gè)或多個(gè)數(shù)據(jù)庫表中的每一個(gè)相關(guān)聯(lián)的最新的時(shí)間戳,該一個(gè)或多個(gè)數(shù)據(jù)庫表與包括對(duì)象的高速緩存的實(shí)體相關(guān)聯(lián)。在步驟515,高速緩存節(jié)點(diǎn)104可以執(zhí)行等待操作,直到從dbms102接收到響應(yīng)為止。該等待可以具有預(yù)定上限,例如,2秒,之后,方法移動(dòng)到指示高速緩存丟失的步驟509。
在高速緩存節(jié)點(diǎn)104從dbms102接收到響應(yīng)之后,該方法移動(dòng)到步驟517,其中,高速緩存節(jié)點(diǎn)104比較由dbms102返回的一個(gè)或多個(gè)數(shù)據(jù)庫表時(shí)間戳當(dāng)中的最大值和與包括對(duì)象的高速緩存的實(shí)體對(duì)應(yīng)的高速緩存的實(shí)體時(shí)間戳。如果確定一個(gè)或多個(gè)數(shù)據(jù)庫表時(shí)間戳的最大值大于高速緩存的實(shí)體時(shí)間戳,這意味著與高速緩存的實(shí)體相關(guān)聯(lián)的至少一個(gè)數(shù)據(jù)庫表的數(shù)據(jù)庫表時(shí)間戳大于高速緩存的實(shí)體時(shí)間戳。在該情況下,高速緩存對(duì)象確定為是舊的,且該方法移動(dòng)到步驟509。但是,如果確定與高速緩存的實(shí)體相關(guān)聯(lián)的全部數(shù)據(jù)庫表時(shí)間戳具有與高速緩存的時(shí)間戳相同的值(即,一個(gè)或多個(gè)數(shù)據(jù)庫表時(shí)間戳當(dāng)中的最大值與高速緩存的實(shí)體時(shí)間戳相同),則方法移動(dòng)到步驟519,其中,響應(yīng)于在步驟503接收的讀取查詢返回高速緩存的對(duì)象。在一個(gè)實(shí)施例中,如果與包括對(duì)象的高速緩存的實(shí)體相關(guān)聯(lián)的一個(gè)或多個(gè)源表未向例如表更新跟蹤器223登記,則高速緩存節(jié)點(diǎn)可能在步驟515沒有接收到響應(yīng),且該方法移動(dòng)到指示高速緩存丟失的步驟509。另外地或者替代地,在未登記一個(gè)或多個(gè)源表的情況下,該方法在步驟517不能確定最大源表時(shí)間戳,因?yàn)楦咚倬彺婀?jié)點(diǎn)未接收到且將不具有所有請求的時(shí)間戳。在該示例中,該方法可以再次移動(dòng)到指示高速緩存丟失的步驟509。根據(jù)一個(gè)示例,如以下討論的,如果未登記一個(gè)或多個(gè)源表,則源節(jié)點(diǎn)可以在發(fā)送表時(shí)間戳到高速緩存節(jié)點(diǎn)(在步驟515,高速緩存節(jié)點(diǎn)接收表時(shí)間戳)之前登記它們。
根據(jù)一個(gè)示例,例如客戶端101的讀取器具有指示讀取器請求查詢的最后時(shí)間的快照時(shí)間戳(sts)。當(dāng)讀取器提交查詢時(shí),快照時(shí)間戳可以比較與該查詢相關(guān)聯(lián)的高速緩存的實(shí)體時(shí)間戳。在一個(gè)實(shí)施例中,這些處理可以例如由引擎201、高速緩存管理器211等執(zhí)行。如果高速緩存的實(shí)體時(shí)間戳等于快照時(shí)間戳,則讀取器“看到”相同快照,且因此,可以批準(zhǔn)從與查詢相關(guān)聯(lián)的高速緩存的實(shí)體獲得的查詢的結(jié)果的有效性。如果高速緩存的實(shí)體時(shí)間戳小于快照時(shí)間戳,且最大表時(shí)間戳小于或等于高速緩存的實(shí)體時(shí)間戳,則因?yàn)闂l目被高速緩存所以相關(guān)的表還未被更新,且因此可以批準(zhǔn)請求的查詢的結(jié)果的有效性。
但是,如果高速緩存的實(shí)體時(shí)間戳小于快照時(shí)間戳且最大表時(shí)間戳大于高速緩存的實(shí)體時(shí)間戳,則已經(jīng)更新相關(guān)表但是讀取器不能“看到”它們,或者相關(guān)表已經(jīng)更新了多于一次。當(dāng)該狀況發(fā)生時(shí),可以拒絕請求的查詢的結(jié)果的有效性。在該情況下,存在高速緩存的實(shí)體可能對(duì)于讀取器是有效的可能性,且因此,存在錯(cuò)誤拒絕的可能性。如果高速緩存的實(shí)體時(shí)間戳大于快照時(shí)間戳,則可以拒絕請求的查詢的結(jié)果的有效性。與先前情況類似,在該情況下,存在高速緩存的條目可能對(duì)于讀取器有效的可能性,且因此,存在錯(cuò)誤拒絕的可能性。
指向圖6a,圖示了描述方法600的流程圖,該方法600用于處理標(biāo)識(shí)比如dbms102的dbms中的比如表215a-215n中的任意的數(shù)據(jù)庫表的表時(shí)間戳的請求。方法600可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖600的方法。例如,流程圖600可以使用引擎201、表更新跟蹤器223或者dbms102的其他組件實(shí)現(xiàn)。流程圖600的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實(shí)施例中,流程圖620的方法的兩個(gè)或更多步驟可以彼此同時(shí)執(zhí)行。
方法600起始于步驟601且移動(dòng)到步驟603。在步驟603,比如dbms102的源服務(wù)器從比如高速緩存節(jié)點(diǎn)104a的高速緩存節(jié)點(diǎn)接收標(biāo)識(shí)dbms102中存儲(chǔ)的一個(gè)或多個(gè)源數(shù)據(jù)庫表,比如數(shù)據(jù)庫表215a的當(dāng)前時(shí)間戳的請求。在一個(gè)示例中,在從高速緩存節(jié)點(diǎn)接收請求之后,源節(jié)點(diǎn)(例如,dbms102)可以確定高速緩存節(jié)點(diǎn)104a已經(jīng)請求的一個(gè)或多個(gè)源數(shù)據(jù)庫表是否向用于高速緩存的源節(jié)點(diǎn)登記。如果一個(gè)或多個(gè)源數(shù)據(jù)庫表已經(jīng)向用于高速緩存的源節(jié)點(diǎn)登記,則該方法可以繼續(xù)步驟605。但是,如果源節(jié)點(diǎn)確定一個(gè)或多個(gè)源數(shù)據(jù)庫表(高速緩存節(jié)點(diǎn)正在答復(fù)它的表時(shí)間戳)還未登記用于高速緩存,則源節(jié)點(diǎn)可以登記用于高速緩存的一個(gè)或多個(gè)源數(shù)據(jù)庫表。在一個(gè)示例中,比如圖8中的表801的表可用于向它的相應(yīng)的一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)登記一個(gè)或多個(gè)源數(shù)據(jù)庫表。在該示例中,源節(jié)點(diǎn)可以使用一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)標(biāo)識(shí)符(id),以向它的相應(yīng)的一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)登記一個(gè)或多個(gè)源數(shù)據(jù)庫表。在一個(gè)示例中,登記一個(gè)或多個(gè)源數(shù)據(jù)庫表也可以包括生成用于該一個(gè)或多個(gè)源數(shù)據(jù)庫表的相應(yīng)的修改進(jìn)行中計(jì)數(shù)器和/或表時(shí)間戳。在登記之后,該方法可以在步驟605繼續(xù)。
在步驟605,dbms102確定與數(shù)據(jù)庫表215a對(duì)應(yīng)的修改進(jìn)行中計(jì)數(shù)器,例如修改進(jìn)行中計(jì)數(shù)器217a的值是否大于零。如果dbms102確定修改進(jìn)行中計(jì)數(shù)器217a的值大于零,則指示數(shù)據(jù)庫表217a當(dāng)前正在經(jīng)歷修改。因此,dbms102不發(fā)送對(duì)在步驟603接收的請求的任何響應(yīng),且該方法簡單地在步驟610結(jié)束。但是,如果在步驟605,確定修改進(jìn)行中計(jì)數(shù)器等于零,則dbms102將與數(shù)據(jù)庫表217a相關(guān)聯(lián)的時(shí)間戳返回到高速緩存節(jié)點(diǎn)。該方法隨后在步驟610結(jié)束。注意到,雖然以一個(gè)表圖示了方法600,但該方法可以包括多于一個(gè)表,且因此,可以涉及多于一個(gè)修改進(jìn)行中計(jì)數(shù)器。
指向圖6b,圖示了描述用于在dbms比如dbms102處理數(shù)據(jù)庫更新請求的方法620的流程圖。方法620可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖620的方法。例如,流程圖620可以使用引擎201、表更新跟蹤器223或者dbms102的其他組件實(shí)現(xiàn)。流程圖620的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實(shí)施例中,流程圖620的方法的兩個(gè)或更多步驟可以彼此同時(shí)執(zhí)行。
該方法起始于步驟621且移動(dòng)到步驟623。在步驟623,dbms102接收用于更新存儲(chǔ)在數(shù)據(jù)庫表k(比如數(shù)據(jù)庫表215a)中的數(shù)據(jù),或者與該數(shù)據(jù)庫表k相關(guān)聯(lián)的元數(shù)據(jù)的請求。在步驟625,遞增修改進(jìn)行中計(jì)數(shù)器的值。根據(jù)一個(gè)示例,表更新跟蹤器223可以配置為更新修改進(jìn)行中計(jì)數(shù)器的值。
該方法隨后移動(dòng)到步驟627,其中,提交引擎207(作為示例)可以將提交日志(其可以是可以永久地標(biāo)記成功地提交相應(yīng)的事務(wù)且先前寫入的數(shù)據(jù)修改日志有效的日志)寫入到長期存儲(chǔ)器存儲(chǔ)設(shè)備(例如,比如磁盤的非易失性日志存儲(chǔ)設(shè)備)。
隨后,該方法移動(dòng)到步驟629,其中,遞增提交id(例如,提交id221)。此后,在步驟633,與數(shù)據(jù)庫表相關(guān)聯(lián)的時(shí)間戳(比如數(shù)據(jù)庫表時(shí)間戳219a)設(shè)置為等于提交id。在這點(diǎn)之后,不存在需要發(fā)生更多的數(shù)據(jù)修改動(dòng)作。因此,在步驟633,修改進(jìn)行中計(jì)數(shù)器遞減回到零,且方法在步驟637結(jié)束。根據(jù)一個(gè)示例,步驟625-633可以是事務(wù)提交的一部分,且步驟623可以在事務(wù)內(nèi)重復(fù)。
高效的節(jié)點(diǎn)間高速緩存
圖7、圖8a、圖8b、圖9和圖10描述了根據(jù)實(shí)施例源表時(shí)間戳的本地副本如何可以存儲(chǔ)在高速緩存節(jié)點(diǎn)中和與源節(jié)點(diǎn)同步地使其無效。在一個(gè)示例中,包括表215a-215n的dbms102可以是包括源表的源節(jié)點(diǎn),從該源表高速緩存高速緩存的實(shí)體。另外地或者替代地,源節(jié)點(diǎn)可以是任何處理邏輯,其可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,關(guān)于處理裝置執(zhí)行的指令)或者其組合,且可以包括從其高速緩存高速緩存的實(shí)體的源表。
指向圖7,根據(jù)實(shí)施例圖示了描述使高速緩存節(jié)點(diǎn)中的表時(shí)間戳的遠(yuǎn)程副本無效的處理的示例序列圖700。為了促進(jìn)描述該處理,通常參考先前引入到圖2和圖3中的數(shù)據(jù)結(jié)構(gòu)。時(shí)間圖700可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。
在步驟717,dbms102接收更新表的更新請求(例如,提交請求)并執(zhí)行更新請求(例如,該提交請求)。在一個(gè)示例中,提交引擎207可以配置為執(zhí)行更新請求(例如,提交請求)。更新請求可以包括寫入事務(wù)。為處理此,在步驟701,dbms102例如通過表更新跟蹤器223遞增與數(shù)據(jù)庫表對(duì)應(yīng)的修改進(jìn)行中計(jì)數(shù)器,比如修改進(jìn)行中計(jì)數(shù)器217a的值。在步驟703,提交引擎207(作為示例)可以將提交日志(其可以是可以永久地標(biāo)記成功地提交相應(yīng)的事務(wù)且先前寫入數(shù)據(jù)修改日志有效的日志)寫入到長期存儲(chǔ)器存儲(chǔ)設(shè)備(例如,非易失性日志存儲(chǔ)設(shè)備,比如磁盤)。在一個(gè)示例中,該操作可能是費(fèi)時(shí)的操作。
在提交引擎207將提交日志寫入長期存儲(chǔ)器的時(shí)間期間,dbms102可以發(fā)送消息到高速緩存節(jié)點(diǎn)104,以使位于高速緩存節(jié)點(diǎn)104中的表時(shí)間戳的一個(gè)或多個(gè)副本無效。根據(jù)該示例性實(shí)施例,高速緩存節(jié)點(diǎn)104(如圖3描述的)包括表時(shí)間戳307a-307m,其存儲(chǔ)指示它已經(jīng)在其中高速緩存的每一表的最新表時(shí)間戳的信息。例如,表時(shí)間戳307a-307m對(duì)應(yīng)于高速緩存的實(shí)體303a-303m,且保持dbms102中相應(yīng)的源數(shù)據(jù)庫表215a-215n的最新時(shí)間戳的值。例如,高速緩存節(jié)點(diǎn)104中的表時(shí)間戳307a是dbms102中的表時(shí)間戳219a的副本。當(dāng)提交請求717要求例如源表215a的改變時(shí),當(dāng)處理和完成提交請求時(shí)將更新表時(shí)間戳219a。因此,高速緩存104中表時(shí)間戳219a的副本–表時(shí)間戳307a–應(yīng)該被無效(例如,標(biāo)記為無效的或者刪除的)。但是,因?yàn)樵谔峤?17的結(jié)尾更新表時(shí)間戳219a,所以如果在該時(shí)間期間高速緩存104參考表時(shí)間戳307a,則高速緩存104將發(fā)現(xiàn)該表時(shí)間戳的錯(cuò)誤的值。因此,該實(shí)施例設(shè)計(jì)用于一旦提交717開始則使表時(shí)間戳307a中的值無效。因此,在提交引擎207向長期存儲(chǔ)設(shè)備(例如,磁盤)執(zhí)行影響提交日志中的聲明的i/o操作的步驟703期間,dbms102發(fā)送消息705到高速緩存節(jié)點(diǎn)104以使表時(shí)間戳307的值無效。根據(jù)一個(gè)示例,705可以是從源節(jié)點(diǎn)102到高速緩存節(jié)點(diǎn)104的遠(yuǎn)程呼叫。在該示例中,當(dāng)網(wǎng)絡(luò)i/o操作(例如,到高速緩存節(jié)點(diǎn)104的遠(yuǎn)程呼叫)與提交日志操作重疊時(shí)可以減小等待時(shí)間開銷。提交日志操作時(shí)間例如可以包括提交引擎207執(zhí)行磁盤i/o操作需要的時(shí)間。在一個(gè)實(shí)施例中,提交日志操作時(shí)間可以排除更新和存儲(chǔ)提交id221需要的時(shí)間。
在步驟707,高速緩存節(jié)點(diǎn)104響應(yīng)于消息705使表時(shí)間戳307a無效。接下來高速緩存節(jié)點(diǎn)104發(fā)送消息709到dbms102,以指示已經(jīng)在高速緩存節(jié)點(diǎn)104中執(zhí)行了無效處理。根據(jù)一個(gè)示例,709可以是在高速緩存節(jié)點(diǎn)104使表時(shí)間戳307a無效之后對(duì)遠(yuǎn)程呼叫705的響應(yīng)。根據(jù)一個(gè)示例,消息709可以是成功指示符,以使得以分布的設(shè)置來避免具有未標(biāo)記為無效的高速緩存節(jié)點(diǎn)。
在步驟711,dbms102將提交id221的值遞增到下一時(shí)間戳。根據(jù)一個(gè)示例,該步驟可以包括獲取提交id221的鎖定。在步驟713,dbms102將更新的表217a的表時(shí)間戳設(shè)置為等于提交id221的值。根據(jù)一個(gè)示例,該步驟可以包括獲取相應(yīng)的表時(shí)間戳的鎖定。最終,在步驟715,完成關(guān)于影響在717發(fā)布的提交聲明的操作,且修改進(jìn)行中計(jì)數(shù)器217a的值例如遞減回到零。根據(jù)一個(gè)示例,該步驟可以包括釋放提交id221和/或相應(yīng)的表時(shí)間戳的鎖定。
雖然圖7圖示一個(gè)源102和一個(gè)高速緩存節(jié)點(diǎn)104,但注意到圖7的處理700可以在一個(gè)源102和多個(gè)高速緩存節(jié)點(diǎn)之間執(zhí)行。在該示例中,多個(gè)高速緩存節(jié)點(diǎn)已經(jīng)高速緩存了源表和/或取決于在處理700中正在更新的源表的高速緩存的實(shí)體。因此,源102通知這些多個(gè)高速緩存節(jié)點(diǎn)以使它們的表時(shí)間戳的副本無效。在該示例中,無效消息705可以多播到多個(gè)高速緩存節(jié)點(diǎn)。此外,雖然圖7圖示影響一個(gè)表的事務(wù)的提交,但注意到在事務(wù)的提交期間可以更新源(例如,dbms102)中的多個(gè)源表,且因此在處理700中可能涉及多個(gè)修改進(jìn)行中計(jì)數(shù)器217。在該示例中,消息705可以包括用于對(duì)應(yīng)于正在更新的源(例如,dbms102)中的多個(gè)源表的高速緩存節(jié)點(diǎn)104中的表時(shí)間戳的多個(gè)副本的無效消息。
圖8a和圖8b圖示根據(jù)實(shí)施例的分別在dbms102和高速緩存節(jié)點(diǎn)104中的兩個(gè)示例性表。根據(jù)此示例,表801可以存儲(chǔ)在dbms102內(nèi)的高速緩存管理器211中。另外地或者替代地,表801可以存儲(chǔ)在dbms102內(nèi)的其他位置中,例如,表更新跟蹤器223,且表801例如可以由表更新跟蹤器223管理。表803可以存儲(chǔ)在高速緩存節(jié)點(diǎn)104中。表801指示哪個(gè)高速緩存節(jié)點(diǎn)已經(jīng)高速緩存哪個(gè)表。可以使用表更新跟蹤器233填充和更新表801。根據(jù)一個(gè)示例,當(dāng)高速緩存管理器211和/或無效器213將表登記為用于高速緩存相關(guān)時(shí),可以保持表801。如上相對(duì)于圖2所述的,已經(jīng)高速緩存來自表215a-215n的查詢結(jié)果的所有高速緩存節(jié)點(diǎn)可以向表時(shí)間跟蹤器223自動(dòng)地登記,以使得表時(shí)間跟蹤器223將保持它們的表時(shí)間戳的副本。替代地,高速緩存節(jié)點(diǎn)可以決定是否向表時(shí)間跟蹤器223登記。因此,源節(jié)點(diǎn)(例如,dbms102)例如通過表更新跟蹤器223,可以跟蹤包括對(duì)應(yīng)于源表的高速緩存實(shí)體的高速緩存節(jié)點(diǎn)。通過跟蹤高速緩存節(jié)點(diǎn),如果需要,源節(jié)點(diǎn)能夠使表時(shí)間戳的副本無效。
例如,表801圖示高速緩存節(jié)點(diǎn)3已經(jīng)高速緩存了具有對(duì)象id1442和1446的實(shí)體。當(dāng)dbms102接收與特定的表相關(guān)聯(lián)的提交請求717時(shí),dbms102在表801中查找以確定是否任何高速緩存節(jié)點(diǎn)已經(jīng)高速緩存了該特定的表。如果dbms102確定已經(jīng)由高速緩存節(jié)點(diǎn)高速緩存了該特定的表,則dbms102執(zhí)行圖7的方法700以使該高速緩存節(jié)點(diǎn)的表時(shí)間戳無效。在高速緩存節(jié)點(diǎn)104的表803存儲(chǔ)從其高速緩存的實(shí)體被高速緩存在高速緩存節(jié)點(diǎn)104中的表的對(duì)象id和它們的關(guān)聯(lián)的提交id。
指向圖9,圖示了描述方法900的流程圖,該方法900用于處理在比如dbms102的dbms的數(shù)據(jù)庫更新請求,和在高速緩存節(jié)點(diǎn)的表時(shí)間戳的副本的無效處理。方法900可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖900的方法。例如,流程圖900可以使用引擎201、提交引擎207、表更新跟蹤器223或者dbms102的其他組件中的至少一個(gè)實(shí)現(xiàn)。流程圖900的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實(shí)施例中,流程圖900的方法的兩個(gè)或更多步驟可以彼此同時(shí)執(zhí)行。
該方法起始于步驟901和移動(dòng)到步驟903。在步驟903,dbms102接收用于更新存儲(chǔ)在數(shù)據(jù)庫表k(比如數(shù)據(jù)庫表215a)中的數(shù)據(jù),或者與該數(shù)據(jù)庫表k相關(guān)聯(lián)的元數(shù)據(jù)的請求。
在步驟905,遞增修改進(jìn)行中計(jì)數(shù)器的值。根據(jù)一個(gè)示例,表更新跟蹤器223可以配置為更新修改進(jìn)行中計(jì)數(shù)器的值。該方法隨后移動(dòng)到步驟907,其中,dbms102發(fā)送消息到具有表k的副本和/或取決于表k的高速緩存實(shí)體的高速緩存節(jié)點(diǎn),以使與在該高速緩存節(jié)點(diǎn)中的表k相關(guān)聯(lián)的表時(shí)間戳的副本無效。根據(jù)一個(gè)實(shí)施例,dbms102存儲(chǔ)比如表801的表。dbms102可以使用表801以確定哪個(gè)或哪些高速緩存節(jié)點(diǎn)具有源表k的副本和/或取決于源表k的高速緩存實(shí)體。在該示例中,在步驟907之前,dbms102可以使用表801以確定無效消息應(yīng)該發(fā)送到的一個(gè)或多個(gè)高速緩存節(jié)點(diǎn)。
該方法隨后移動(dòng)到步驟909,其中,提交引擎207(作為示例)可以將提交日志(可以是可以永久地標(biāo)記成功地提交相應(yīng)的事務(wù)且先前寫入的數(shù)據(jù)修改日志有效的日志)寫入到長期存儲(chǔ)器存儲(chǔ)設(shè)備(例如,比如磁盤的非易失性日志存儲(chǔ)設(shè)備)。注意到,雖然示出步驟907在步驟909之前,至少這兩個(gè)步驟可以以任何其他次序執(zhí)行,比如實(shí)質(zhì)上同時(shí)執(zhí)行。通過實(shí)質(zhì)上重疊這兩個(gè)操作,當(dāng)網(wǎng)絡(luò)i/o操作(例如,遠(yuǎn)程呼叫或者到高速緩存節(jié)點(diǎn)104的消息傳遞)與提交日志操作重疊時(shí),可以減小等待時(shí)間開銷。
隨后,該方法移動(dòng)到步驟911,其中,遞增提交id(例如,提交id221)。此后,在步驟913,與數(shù)據(jù)庫表相關(guān)聯(lián)的時(shí)間戳(比如數(shù)據(jù)庫表時(shí)間戳219a)設(shè)置為等于提交id。在這點(diǎn)之后,不需要發(fā)生更多的數(shù)據(jù)修改動(dòng)作。因此,在步驟915,修改進(jìn)行中計(jì)數(shù)器遞減回到零,且方法在步驟920結(jié)束。
指向圖10,圖示了描述根據(jù)實(shí)施例的用于更新在高速緩存節(jié)點(diǎn)的表時(shí)間戳的副本的方法1000的流程圖。方法1000可以由處理邏輯執(zhí)行,該處理邏輯可以包括硬件(例如,電路、專用邏輯、可編程邏輯、微代碼等)、軟件(例如,在處理裝置上執(zhí)行的指令)或者其組合。繼續(xù)參考圖1-圖3描述流程圖1000的方法。例如,流程圖1000可以使用高速緩存節(jié)點(diǎn)104實(shí)現(xiàn)。流程圖1000的方法的步驟不限于以下將要描述的順序,且可以以不同次序執(zhí)行各種步驟。另外,在實(shí)施例中,流程圖1000的方法的兩個(gè)或更多步驟可以彼此同時(shí)執(zhí)行。
該方法1000起始于步驟1001和移動(dòng)到步驟1003。在步驟1003,高速緩存節(jié)點(diǎn)104從源節(jié)點(diǎn),比如dbms102接收無效消息。該無效消息用于使與表k相關(guān)聯(lián)的表時(shí)間戳的副本無效。例如,圖3的表時(shí)間戳307a與表215a的表時(shí)間戳219a相關(guān)聯(lián)。在正在更新表215a的同時(shí)(例如,如在圖9中討論的),高速緩存節(jié)點(diǎn)104在步驟1003接收無效消息以使高速緩存節(jié)點(diǎn)104表時(shí)間戳307a無效。
在步驟1005,高速緩存節(jié)點(diǎn)104使作為與表k相關(guān)聯(lián)的表時(shí)間戳219a的副本的表時(shí)間戳307a無效。在步驟1007,高速緩存節(jié)點(diǎn)1007可以將用于與表k相關(guān)聯(lián)的表時(shí)間戳的新值的請求發(fā)送到源節(jié)點(diǎn),比如dbms102。在步驟1009,高速緩存節(jié)點(diǎn)104可以接收更新表時(shí)間戳且可以在表時(shí)間戳307a中存儲(chǔ)新的值。
圖11是其中可以實(shí)現(xiàn)實(shí)施例的示例計(jì)算機(jī)系統(tǒng)的框圖。例如,可以使用一個(gè)或多個(gè)公知的計(jì)算機(jī)系統(tǒng),比如圖11所示的計(jì)算機(jī)系統(tǒng)1100實(shí)現(xiàn)各種實(shí)施例。計(jì)算機(jī)系統(tǒng)1100可以是能夠執(zhí)行在這里描述的功能的任何公知的計(jì)算機(jī),比如可從國際商業(yè)機(jī)器公司、apple、sun、hp、dell、sony、toshiba等得到的計(jì)算機(jī)。
計(jì)算機(jī)系統(tǒng)1100包括一個(gè)或多個(gè)處理器(也稱為中央處理單元,或者cpu),比如處理器1104。處理器1104連接到通信基本設(shè)施或者總線1106。
一個(gè)或多個(gè)處理器每個(gè)可以是圖形處理單元(gpu)。在實(shí)施例中,gpu是作為設(shè)計(jì)用于快速地處理在電子裝置上的數(shù)學(xué)集中的應(yīng)用的專用電子電路的處理器。gpu可以具有對(duì)于大的數(shù)據(jù)塊,比如對(duì)計(jì)算機(jī)圖形應(yīng)用普遍的數(shù)學(xué)集中的數(shù)據(jù)、圖像和視頻的并行處理高效的高度并行結(jié)構(gòu)。
計(jì)算機(jī)系統(tǒng)1100還包括一個(gè)或多個(gè)用戶輸入/輸出裝置1103,比如監(jiān)視器、鍵盤、指示裝置等,其通過一個(gè)或多個(gè)用戶輸入/輸出接口1102與通信基本設(shè)施1106通信。
計(jì)算機(jī)系統(tǒng)1100還包括主存儲(chǔ)器或者主要存儲(chǔ)器1108,比如隨機(jī)存取存儲(chǔ)器(ram)。主存儲(chǔ)器1108可以包括一級(jí)或多級(jí)高速緩存。主存儲(chǔ)器1108在其中存儲(chǔ)控制邏輯(即,計(jì)算機(jī)軟件)和/或數(shù)據(jù)。
計(jì)算機(jī)系統(tǒng)1100還可以包括一個(gè)或多個(gè)次級(jí)存儲(chǔ)裝置或者存儲(chǔ)器1110。次級(jí)存儲(chǔ)器1110例如可以包括硬盤驅(qū)動(dòng)器1112和/或可拆卸存儲(chǔ)裝置或者驅(qū)動(dòng)器1114??刹鹦洞鎯?chǔ)驅(qū)動(dòng)器1114可以是軟盤驅(qū)動(dòng)器、磁帶驅(qū)動(dòng)器、致密盤驅(qū)動(dòng)器、光存儲(chǔ)裝置、磁帶備用裝置和/或任何其他存儲(chǔ)裝置/驅(qū)動(dòng)器。
可拆卸存儲(chǔ)驅(qū)動(dòng)器1114可以與可拆卸存儲(chǔ)單元1118互動(dòng)??刹鹦洞鎯?chǔ)單元1118包括計(jì)算機(jī)可使用的或者可讀取的存儲(chǔ)裝置,具有在其上存儲(chǔ)的計(jì)算機(jī)軟件(控制邏輯)和/或數(shù)據(jù)??刹鹦洞鎯?chǔ)單元1118可以是軟盤、磁帶、致密盤、dvd、光存儲(chǔ)盤,和/或任何其他計(jì)算機(jī)數(shù)據(jù)存儲(chǔ)裝置??刹鹦洞鎯?chǔ)驅(qū)動(dòng)器1114以公知的方式從可拆卸存儲(chǔ)單元1118讀取和/或?qū)懭氲娇刹鹦洞鎯?chǔ)單元1118。
根據(jù)示例性實(shí)施例,次級(jí)存儲(chǔ)器1110可以包括用于允許計(jì)算機(jī)程序和/或其他指令和/或數(shù)據(jù)由計(jì)算機(jī)系統(tǒng)1100訪問的其他裝置、手段或者其他方法。這種裝置、手段或者其他方法例如可以包括可拆卸存儲(chǔ)單元1122和接口1120??刹鹦洞鎯?chǔ)單元1122和接口1120的示例可以包括程序盒和盒式接口(比如在視頻游戲裝置中找到的)、可拆卸存儲(chǔ)器芯片(比如eprom或者prom)和關(guān)聯(lián)的插座、存儲(chǔ)棒和usb端口、存儲(chǔ)卡和關(guān)聯(lián)的存儲(chǔ)卡槽,和/或任何其他可拆卸存儲(chǔ)單元和關(guān)聯(lián)的接口。
計(jì)算機(jī)系統(tǒng)1100可以進(jìn)一步包括通信或者網(wǎng)絡(luò)接口1124。通信接口1124使計(jì)算機(jī)系統(tǒng)1100能夠與遠(yuǎn)程裝置、遠(yuǎn)程網(wǎng)絡(luò)、遠(yuǎn)程實(shí)體等(單獨(dú)地和集合地由附圖標(biāo)記1128表示)的任何組合通信和互動(dòng)。例如,通信接口1124可以允許計(jì)算機(jī)系統(tǒng)1100經(jīng)通信路徑1126與遠(yuǎn)程裝置1128通信,該通信路徑1126可以是有線和/或無線的,且可以包括lan、wan、因特網(wǎng)等的任何組合??刂七壿嫼?或數(shù)據(jù)可以經(jīng)由通信路徑1126發(fā)送到和從計(jì)算機(jī)系統(tǒng)1100發(fā)送。
在實(shí)施例中,包括有形的計(jì)算機(jī)可使用或者可讀介質(zhì)的具有在其上存儲(chǔ)的控制邏輯(軟件)的有形的設(shè)備或者制造物在這里也被稱為計(jì)算機(jī)程序產(chǎn)品或者程序存儲(chǔ)裝置。這包括,但不限于計(jì)算機(jī)系統(tǒng)1100、主存儲(chǔ)器1108、次級(jí)存儲(chǔ)器1110和可拆卸存儲(chǔ)單元1118和1122,以及具體表現(xiàn)前述的任何組合的有形的制造物。這種控制邏輯當(dāng)由一個(gè)或多個(gè)數(shù)據(jù)處理裝置(比如計(jì)算機(jī)系統(tǒng)1100)執(zhí)行時(shí),使得這種數(shù)據(jù)處理裝置如在這里描述的操作。
基于本公開中包括的教導(dǎo),對(duì)本領(lǐng)域技術(shù)人員很明顯如何使用除了圖11中示出的之外的數(shù)據(jù)處理裝置、計(jì)算機(jī)系統(tǒng)和/或計(jì)算機(jī)架構(gòu)做出和使用實(shí)施例。具體來說,實(shí)施例可以以除了在這里描述的那些之外的軟件、硬件和/或操作系統(tǒng)實(shí)現(xiàn)來操作。
結(jié)論
要認(rèn)識(shí)到具體實(shí)施方式部分,而不是
技術(shù)實(shí)現(xiàn)要素:
和摘要部分(如果有的話)意在用于解釋權(quán)利要求。發(fā)明內(nèi)容和摘要部分(如果有的話)可以提出由發(fā)明人考慮的一個(gè)或多個(gè),但不必是所有示例性實(shí)施例,且因此不意在以任何方式限制本公開或者所附權(quán)利要求。
雖然在這里已經(jīng)參考用于示例性領(lǐng)域和應(yīng)用的示例性實(shí)施例描述了本公開,但是應(yīng)當(dāng)理解本公開不限于此。其他實(shí)施例和對(duì)其的修改是可能的,且在本公開的范圍和精神內(nèi)。例如,且不限制該段落的普遍性,實(shí)施例不限于在圖中圖示和/或在這里描述的軟件、硬件、固件和/或?qū)嶓w。另外,實(shí)施例(無論是否在這里明確地描述)對(duì)超出在這里描述的示例的領(lǐng)域和應(yīng)用具有重要的實(shí)用性。
已經(jīng)通過圖示指定功能的實(shí)現(xiàn)及其關(guān)系的功能構(gòu)建塊的幫助在這里描述了實(shí)施例。這些功能構(gòu)建塊的邊界在這里為了說明的方便而任意地限定。可以定義替代的邊界,只要適當(dāng)?shù)貓?zhí)行指定的功能與關(guān)系(或其等效物)即可。此外,替代實(shí)施例可以使用不同于在這里描述的次序的次序執(zhí)行功能塊、步驟、操作、方法等。
在這里對(duì)“一個(gè)實(shí)施例”、“一實(shí)施例”、“示例實(shí)施例”或者類似短語的引用指示描述的實(shí)施例可以包括特定的特征、結(jié)構(gòu)或者特性,但是每個(gè)實(shí)施例不必包括特定的特征、結(jié)構(gòu)或者特性。此外,這種短語不必指示相同實(shí)施例。另外,當(dāng)關(guān)于實(shí)施例描述特定的特征、結(jié)構(gòu)或者特性時(shí),將這種特征、結(jié)構(gòu)或者特性并入到其他實(shí)施例中在本領(lǐng)域技術(shù)人員的認(rèn)識(shí)內(nèi),而無論是否在這里明確地提到或者描述。
本公開的廣度和范圍不應(yīng)該由任意以上描述的示例性實(shí)施例限制,而是應(yīng)該僅根據(jù)下面的權(quán)利要求及其等效限定。