專利名稱:透明網(wǎng)絡邊緣數(shù)據(jù)高速緩存的制作方法
技術(shù)領域:
本公開涉及分布式網(wǎng)絡之上的數(shù)據(jù)庫高速緩存。
背景技術(shù):
分布式web應用的增殖增加了對遠程數(shù)據(jù)庫服務器的應用查詢的頻率。為了改進這種查詢的性能并增強數(shù)據(jù)可用性,這種應用可使用本地數(shù)據(jù)庫高速緩存。例如,內(nèi)容分布網(wǎng)絡中的邊緣服務器可使用鄰近的數(shù)據(jù)庫高速緩存來加速數(shù)據(jù)訪問和在網(wǎng)絡的邊緣處更快地生成動態(tài)web內(nèi)容。
在邊緣服務器上高速緩存數(shù)據(jù)的典型技術(shù)依賴于(i)整個數(shù)據(jù)庫的顯性復制或其在本地機上的顯性部分;或者(ii)對先前查詢響應的高速緩存和新查詢語句相對于先前已高速緩存的響應的精確匹配。在該復制方案中,由管理員顯性指定高速緩存的內(nèi)容,該管理員必須確定在該邊緣節(jié)點上將復制數(shù)據(jù)庫表的哪些部分。一旦指定了高速緩存內(nèi)容,該數(shù)據(jù)或者作為表名或者作為“物化視圖”定義從源服務器復制到邊緣高速緩存。
在查詢響應高速緩存方案中,動態(tài)向高速緩存填充應用查詢的響應。高速緩存中的數(shù)據(jù)通過查詢響應的列表來描述,每個響應標志一個查詢語句,該查詢語句是生成了該響應的查詢語句。只有當后續(xù)查詢通常通過字符串比較匹配于一個對應于已高速緩存的響應的查詢字符串時,該響應才用于答復該后續(xù)查詢。查詢響應高速緩存通過對數(shù)據(jù)進行動態(tài)高速緩存而消除對管理員控制的需要,但在分離的區(qū)域中低效存儲數(shù)據(jù),即每個查詢響應一個區(qū)域。這導致了高的空間開銷,因為在許多查詢響應中可能復制相同的基本數(shù)據(jù)。這是因為查詢響應常常重疊,通常包括基礎數(shù)據(jù)庫的重要和普通部分。此外,因為已高速緩存的查詢響應僅用于滿足原樣重新提交的相同查詢,而不能用于可能包含在該響應中的其他查詢,所以該方案導致了有限的性能收益。例如,假定一個查找年齡小于30的所有雇員的社會保險號的初始查詢。則SQL語句應該是SELECT employee.ssn FROM employee WHEREemployee.age<30假設對于此查詢的響應已被高速緩存,且高速緩存接收到一個查找年齡小于25的所有雇員的社會保險號的新查詢,則SQL語句應該是SELECT employee.ssn FROM employee WHEREemployee.age<25盡管由于所有年齡小于25歲的雇員也小于30歲,而新查詢的響應包括在第一個查詢的響應中,但基于精確匹配的查詢響應高速緩存不能從該高速緩存來服務于該查詢。
總之,顯性管理員定義的數(shù)據(jù)高速緩存需要人工參與,并假定管理員對于每個邊緣服務器上的工作負荷和資源具有熟悉的了解。查詢響應高速緩存消除了管理員開銷,但卻遇到了有限的有效性和高的空間開銷。而且,一致性管理也由于已高速緩存數(shù)據(jù)的表示與源服務器中的基本數(shù)據(jù)之間的不匹配而變得復雜。一致性控制一般需要或者當任何基本表改變時使所有的查詢響應無效,或者維護復雜的依賴圖。
因此,期望具有一種高速緩存,其不需要管理員指定其內(nèi)容,或適應根據(jù)工作負荷方面的變化或根據(jù)該高速緩存所存在的機器上的資源可用性方面的變化的指定的高速緩存。進一步期望該高速緩存在存儲開銷和一致性維持方面是高效的。
發(fā)明內(nèi)容
用于支持根據(jù)本地應用執(zhí)行的查詢的數(shù)據(jù)動態(tài)高速緩存的計算機系統(tǒng)和相應方法解決了先有技術(shù)的這些和其他缺點及不利之處。
一種示例性系統(tǒng)包括具有完整數(shù)據(jù)庫的遠程服務器;邊緣服務器上包括完整數(shù)據(jù)庫子集的本地數(shù)據(jù)庫,該邊緣服務器與遠程服務器通信;邊緣服務器上的本地數(shù)據(jù)庫內(nèi)的共享表,用于高速緩存來自完整數(shù)據(jù)庫的結(jié)果、接收本地生成的數(shù)據(jù)、并在確保本地數(shù)據(jù)庫與遠程數(shù)據(jù)庫之間的數(shù)據(jù)一致性的同時根據(jù)可用存儲需求調(diào)整高速緩存的內(nèi)容。
一種示例性裝置包括邊緣數(shù)據(jù)高速緩存,該邊緣數(shù)據(jù)高速緩存包括查詢評估器、高速緩存索引、高速緩存資源庫、資源管理器、包含檢查器、查詢解析器、及一致性管理器,所有這些部件與查詢評估器信號通信。
一種示例性的用于本地服務器滿足針對至少一個遠程服務器的數(shù)據(jù)庫查詢的相應方法包括動態(tài)高速緩存該遠程服務器的先前數(shù)據(jù)庫查詢的結(jié)果;將本地數(shù)據(jù)庫與本地服務器相關(guān)聯(lián);將多個高速緩存結(jié)果存儲在本地數(shù)據(jù)庫的共享表中;以及將多個高速緩存結(jié)果用于滿足對于本地服務器的新數(shù)據(jù)庫查詢中。
根據(jù)下面結(jié)合附圖對示例性實施例的描述,本公開的這些和其他方面、特征和優(yōu)點將變得顯而易見。
本公開根據(jù)下列示例性附圖教授一種透明網(wǎng)絡邊緣數(shù)據(jù)高速緩存,其中圖1示出與源服務器連接的兩個邊緣服務器的示意圖;圖2示出圖1的邊緣服務器的數(shù)據(jù)高速緩存的方框圖;圖3示出圖2的邊緣服務器數(shù)據(jù)庫高速緩存中的不同類查詢的樹狀圖;圖4示出圖1的邊緣服務器的整個查詢處理的流程圖;圖5示出圖2的數(shù)據(jù)高速緩存所使用的普通模式共享存儲技術(shù)的示意圖;圖6示出在圖1源服務器中的同一表上的兩個查詢的數(shù)據(jù)表示例;圖7示出一致性維護協(xié)議的示意圖;圖8示出考慮了一致性的查詢處理算法的流程圖;圖9示出用于將結(jié)果插入高速緩存的算法的流程圖;圖10示出用于執(zhí)行更新事務的算法的流程圖;以及圖11示出用于調(diào)整高速緩存占用空間的后臺高速緩存清除算法的流程圖。
具體實施例方式
本公開的實施例提供了一種要由本地機維護的允許對于遠程服務器的數(shù)據(jù)庫查詢的動態(tài)數(shù)據(jù)庫高速緩存。該高速緩存利用本地數(shù)據(jù)庫引擎維護先前查詢結(jié)果的部分的但語義一致的“物化視圖”。其被基于應用查詢流而動態(tài)填充。工作于查詢謂詞的包含檢查器用于確定新查詢的結(jié)果是否包含于已高速緩存的結(jié)果并集中。普通本地表用于在重疊查詢結(jié)果之間共享可能的物理存儲器。通過將插入、刪除和更新從源數(shù)據(jù)庫傳播到它們的已高速緩存本地副本,來維護數(shù)據(jù)一致性。后臺清除算法通過驅(qū)除過剩的由一致性協(xié)議傳播的行以及屬于已標記要從該高速緩存驅(qū)除的查詢的行,來持續(xù)或周期性刪除普通本地表的內(nèi)容。術(shù)語“查詢響應”和“查詢結(jié)果”在本公開中交替使用。
在下面的描述中,下列定義可能有助于理解示例性實施例的原理和/或操作數(shù)據(jù)庫表由關(guān)系數(shù)據(jù)庫系統(tǒng)定義的關(guān)聯(lián)表。
查詢謂詞查詢中指定的約束條件(例如SQL語句中WHERE子句),其用作選擇在查詢結(jié)果中返回基本表中的哪些行的標準。
查詢結(jié)果對數(shù)據(jù)庫系統(tǒng)的SQL查詢所返回的響應。查詢結(jié)果看起來像具有行和列的表。
查詢結(jié)果集合對應于多個查詢的多個結(jié)果集合。
增量一致性數(shù)據(jù)庫高速緩存中的數(shù)據(jù)在給定時間窗內(nèi)相對于源數(shù)據(jù)庫中的數(shù)據(jù)保持一致的需求。準確地,它意指已高速緩存數(shù)據(jù)在當前時刻Tc的狀態(tài)與源數(shù)據(jù)庫在時刻Tp的過去狀態(tài)一致,其中Tp在預定的最大時間窗內(nèi)。
查詢/事務處理時戳服務器生成的單調(diào)遞增且與在源服務器上執(zhí)行的所有查詢和事務相關(guān)的唯一數(shù)字。該時戳反映了事務或查詢相對于并發(fā)操作的序列順序。
刷新消息由源服務器發(fā)送到邊緣高速緩存、反映最近對源數(shù)據(jù)庫中表的改變(例如插入、更新、刪除語句)的消息。對基本表的變化可在多個刷新消息中分批處理,但這些刷新消息以它們所報告的變化發(fā)生順序進行傳播。
立即更新可見性在應用成功完成更新后,該同一應用查詢必須查看對數(shù)據(jù)庫更新的結(jié)果的屬性。
單調(diào)狀態(tài)轉(zhuǎn)換由應用提交給高速緩存的兩個連續(xù)查詢將查看及時前進的數(shù)據(jù)庫狀態(tài)的屬性,其中第二個查詢在接收到第一個查詢的響應之后提交。也就是說,第二個查詢將查看到比第一個查詢查看到的狀態(tài)在時間上是新近的或更近的數(shù)據(jù)庫狀態(tài)。
如圖1中所示,具有“邊緣數(shù)據(jù)高速緩存”的示例性網(wǎng)絡實施例由參考標號100統(tǒng)一表示。網(wǎng)絡100可以是較大規(guī)模應用系統(tǒng)的一部分。網(wǎng)絡100包括連接到執(zhí)行web請求的客戶機的兩個邊緣服務器109和110,這兩個邊緣服務器還通過網(wǎng)絡連接107連接到對主數(shù)據(jù)庫和web站點提供宿主的源服務器108。源服務器108包括數(shù)據(jù)庫101、應用服務器102和web服務器103。邊緣服務器109、110每個都包括應用服務器105和web服務器106。然而,邊緣服務器不具有源站點中存儲的整個數(shù)據(jù)庫的拷貝。而是,它使用新的邊緣數(shù)據(jù)高速緩存104。邊緣服務器接收到對動態(tài)內(nèi)容的請求,且由邊緣應用服務器105中存在的應用部件處理該請求。這些部件發(fā)出數(shù)據(jù)庫查詢,其被邊緣數(shù)據(jù)高速緩存104截取并從本地數(shù)據(jù)庫中對其進行處理,如果可能的話。如果該查詢不能由本地數(shù)據(jù)庫處理,則邊緣數(shù)據(jù)高速緩存104向源數(shù)據(jù)庫101轉(zhuǎn)發(fā)該請求并從那里檢索回結(jié)果。
轉(zhuǎn)到圖2,邊緣數(shù)據(jù)高速緩存由參考標號200統(tǒng)一表示。邊緣數(shù)據(jù)高速緩存200包括與主要部分202連接的Java小服務程序201。主要部分202包括JDBC接口203,其以信號通信與查詢解析器205、包含檢查器207、查詢評估器204、高速緩存索引206、本地資源庫208、一致性管理器210和資源管理器209連接。高速緩存功能實現(xiàn)于下列部件中查詢解析器205將SQL串轉(zhuǎn)換為“查詢語句”數(shù)據(jù)結(jié)構(gòu),標識各列的列表的分析樹、目標表以及該查詢所訪問的各種子句。具體地,將WHERE子句解析為以AND-OR規(guī)范形式存儲的布爾判斷。這允許包含檢查器對查詢謂詞對執(zhí)行等價和包含操作。
查詢包含檢查器207確定新查詢的結(jié)果是否包括在先前已高速緩存的查詢的結(jié)果中。包含可以被檢查為對于較早查詢、較早查詢的真子集或多個較早查詢的并集的真子集的精確匹配。
高速緩存索引206提供包含檢查。當查詢謂詞復雜或已高速緩存查詢的集合太長時,包含檢查可能在計算上是高成本的。當接收到一個新的查詢時,不是相對于所有先前已高速緩存的查詢進行檢查,而是僅集中于作用于相同表和列的查詢。該高速緩存索引將已高速緩存的查詢根據(jù)表名和列名組織在多級哈希表中。
查詢評估器204是高速緩存的核心模塊,其包括高速緩存邏輯。它確定訪問是命中還是未命中,及在未命中時由后端返回的結(jié)果是否應當插入該高速緩存中。在將未命中的查詢傳遞給后端以預取數(shù)據(jù)和改進高速緩存性能之前,它還可能重寫這些在高速緩存中未命中的查詢。
資源管理器209維護關(guān)于命中率和響應時間的統(tǒng)計數(shù)據(jù),并維持高速緩存配置參數(shù)。它可改變配置參數(shù)以適應某些工作負荷,如果所收集到的統(tǒng)計數(shù)據(jù)指示這樣一個需要的話。
高速緩存資源庫208存儲結(jié)果。在高速緩存未命中時,查詢結(jié)果按照高速緩存評估器所確定的存儲于本地數(shù)據(jù)庫表中。本公開的實施例使用混合物理存儲策略。一些查詢使用每個查詢結(jié)果一個表的模式,而其他查詢則通過部分填充后端基本表的本地副本來共享物理存儲器。
一致性管理器210響應從后端數(shù)據(jù)庫接收到的刷新消息,對本地高速緩存的數(shù)據(jù)進行更新。
操作中,一個查詢源自應用或應用部件,諸如Java小服務程序201。數(shù)據(jù)庫高速緩存202接收到該查詢。具體地,高速緩存203中的JDBC接口適配器負責與應用接口。該接口適配器是Java JDBC標準定義和所需的一組類的實現(xiàn)。然后,“查詢語句”被傳遞給查詢評估器204。該查詢評估器是負責決定是本地還是遠程執(zhí)行該查詢并負責控制高速緩存的操作的模塊。在接收到查詢語句時,查詢評估器通過調(diào)用查詢解析器205來解析所接收到的語句。該解析器將該語句分類到四類中的一類。該語句的處理依賴于其查詢類別。
現(xiàn)在轉(zhuǎn)到圖3,參考標號300表示一個查詢樹。查詢樹300示出了不同的查詢類別。高速緩存301接收的查詢被組織為兩類,可包含檢查查詢302和不可包含檢查查詢303。已高速緩存的可包含檢查查詢能滿足任何其結(jié)果能被證明是已高速緩存的查詢結(jié)果的子集的隨后查詢。作用于單個表或關(guān)聯(lián)多個表、但不包括group-by子句且不包括合計運算符的查詢作為可包含檢查查詢高速緩存。它們可進一步分為兩類全部結(jié)果或簡單查詢304和部分結(jié)果或Top-N查詢305。
可對不可包含檢查查詢進行高速緩存,但使用SOL串的精確匹配來執(zhí)行匹配。它們進一步分為兩類合計查詢306或復合查詢307。使用UDF、子查詢或group-by子句的復合查詢不由包含檢查器處理,其作為精確匹配高速緩存。在其選擇列表中使用諸如MIN、MAX、和AVG的合計運算符合計數(shù)據(jù)的查詢也可作為精確查詢高速緩存。但是,合計查詢306可通過在其選擇列表中插入合計運算符而轉(zhuǎn)換為可包含檢查查詢302。當所估計的益處相當大時,高速緩存進行優(yōu)化。
簡單查詢的處理如下。簡單查詢是那些其結(jié)果是基本表的行和列的子集的查詢。因此,簡單查詢不具有任何“GROUP BY”子句、子查詢、或用戶定義的函數(shù)。它們是非Top-N查詢,其根據(jù)使用基本比較原語的WHERE子句簡單選擇單個表或多個表的關(guān)聯(lián)的一部分。下面給出簡單查詢的一個例子SELECT employee.id FROM employee WHEREemployee.age<25如圖4中所示,參考標號400表示高級處理算法。高級處理算法400用于處理高速緩存命中或高速緩存未命中。在接收到一個查詢時,高速緩存索引用于檢索對于同一表列表和列列表的查詢。然后,在判斷塊410,調(diào)用包含檢查器,以確定此查詢是否包括在這些先前已高速緩存的查詢中。
在高速緩存命中的情況下,在功能塊412,對本地高速緩存執(zhí)行查詢,并返回結(jié)果。功能塊412還將該查詢發(fā)送給高速緩存資源庫414,功能塊412從該高速緩存資源庫414接收結(jié)果。在高速緩存未命中的情況下,在將該查詢發(fā)送給后端服務器之前,在功能塊416和418重寫該查詢。進行下面的優(yōu)化。首先,擴充選擇列表,以包括在WHERE子句、order-by子句和having子句中提及的列。這一擴充的目的在于最大化能夠執(zhí)行在該高速緩存中命中的其他查詢的可能性。第二,還在選擇列表中添加主鍵列。高速緩存主鍵列對于在多個具有重疊結(jié)果的查詢檢索同一基本表的相同行時防止重復行被該高速緩存是需要的。在高速緩存未命中時,由后端返回的結(jié)果通常不被插入到高速緩存中。在判斷塊420處,可使用成熟的基于歷史的算法,以在功能塊422決定那些查詢值得高速緩存。結(jié)果作為輸出被提供,并被發(fā)送到高速緩存資源庫414。
Top-N查詢的處理如下。Top-N查詢從通常根據(jù)order-by子句存儲的結(jié)果集合的開始處獲取指定數(shù)量的行。查詢包含和評估算法不同于簡單全部結(jié)果查詢的情況。通過取消Fetch子句,將Top-N查詢轉(zhuǎn)換為簡單查詢。如上面所解釋的那樣對這些簡單查詢執(zhí)行包含。在最后的步驟中,考慮Fetch子句。應該注意,雖然基本查詢(沒有Fetch子句)是高速緩存命中,但Fetch子句可使它成為高速緩存未命中。例如,考慮下面的兩個查詢Q1和Q2Q1SELECT id FROM item WHERE cost<15 ORDER BY costFFNRO 20Q1SELECT id FROM item WHERE cost<5 ORDER BY costFFNRO 20如果這兩個查詢都不存在FETCH FIRST 20 ROWS ONLY算法(“FFNRO 20”)子句,則第二個查詢的結(jié)果將包括在第一個查詢的結(jié)果中,即高速緩存命中。但是,當存在該子句時,通過僅僅對查詢語句的檢查是不保證高速緩存命中的。這樣,對Top-N查詢的包含檢查處理中的第二步是試圖對已高速緩存數(shù)據(jù)進行本地執(zhí)行。如果檢索到了足夠的行,則認為該查詢是一個高速緩存命中,否則,認為它是一個高速緩存未命中。這種類型的高速緩存未命中稱作“部分命中”,因為在本地高速緩存中僅發(fā)現(xiàn)了結(jié)果的一部分。
如果包含檢查未發(fā)現(xiàn)任何匹配查詢或結(jié)果集合不具有足夠的行,則將原始查詢QN轉(zhuǎn)換為修改查詢QN’,其中在Fetch子句中的N的值由較大N’的值(N’=N*擴充-倍數(shù))。例如,在該試驗中的默認倍數(shù)是2,請求取兩倍數(shù)量的行。檢索到多于應用所請求的行是一個試探,目的在于減少后一“部分命中”查詢、即通過了包含檢查步驟而未能發(fā)現(xiàn)所需數(shù)量的行的查詢的情況。
合計查詢的處理如下。合計查詢在其選擇列表中具有合計運算符(例如,MAX、MIN、AVG、SUM),或者是可包含檢查的??紤]下面的查詢,Q3Q3SELECT MAX(cost)FROM item WHERE id=10對于命中的匹配以兩個步驟進行。首先,根據(jù)SQL串對Q3的精確匹配進行檢查,并將整個結(jié)果集合返回給應用。接著,如果未發(fā)現(xiàn)精確匹配,則通過移除合計運算符將原始查詢Q3修改為查詢Q4Q4SELECT cost FROM item WHERE id=10如果對于修改后的查詢Q4發(fā)現(xiàn)了包含匹配,則對本地高速緩存執(zhí)行原始查詢Q3。本地合計cost,并將結(jié)果返回給應用。在高速緩存未命中時,修改后的查詢Q4在后端執(zhí)行。如果結(jié)果集合大小在閾值內(nèi),則將這些結(jié)果存儲在相應的本地表中,并本地執(zhí)行原始查詢。這使得該高速緩存能夠服務于以后具有不同合計運算符的查詢。如果結(jié)果集合大小出現(xiàn)太長,則原始查詢Q3被發(fā)送給后端,并將結(jié)果存儲在新的精確匹配表中。這允許該高速緩存能夠服務于任何以后具有嚴格相同合計條件的查詢。這一試探目的在于增加高速緩存命中率,而不會過度增加高速緩存的大小。
復合查詢因為復合子句(例如,在WHERE子句中用戶定義的函數(shù)或子查詢)或因為group-by子句而是不可包含檢查的。group-by子句生成可僅由具有嚴格相同的group-by子句和WHERE子句的查詢使用的合計數(shù)據(jù)。同樣地,包含檢查是不充分的。而是,這種查詢的結(jié)果存儲于分離的結(jié)果表中,由查詢的SQL串索引。對于這種查詢的包含檢查是基于SQL串的精確匹配的。這一查找過程是非??焖俚?,因為它是基于具有作為鍵的SQL串的哈希表之上的。如果該原樣SQL串提交給高速緩存,則對相應的結(jié)果表執(zhí)行本地查詢,以檢索整個表(即本地執(zhí)行“SELECT*FROM LOCTAB”)。應該注意,這種查詢是成本不高的,在邊緣服務器上具有最少的處理時間。
轉(zhuǎn)到圖5,參考標號500表示本地資源庫。本地資源庫500示出查詢結(jié)果怎樣存儲于本地高速緩存資源庫501中。資源庫501被分為兩部分,一個用于存儲復合或精確匹配查詢502,而另一個用于存儲可包含檢查查詢503。精確匹配查詢存儲于分離的表中,其僅用于響應其描述與已高速緩存查詢的SQL串匹配的新查詢。例如,查詢Q5 504和Q6 505存儲于分離的表中,而不管它們的結(jié)果是否重疊。
可包含檢查查詢存儲于共享的表中。在同一基本表之上的查詢存儲于該表的同一本地副本中。例如,該圖假定兩個查詢Q7和Q8從同一表中“SELECT”。由查詢Q7 506檢索到的元組被首先插入到高速緩存中。然后,由第二個查詢Q8 507獲取的行被插入到同一表中。當Q8的結(jié)果被插入時,已有行以新獲取的值進行更新。因此,兩個不同查詢獲取的相同行在該高速緩存中不重復。因為在將所有查詢發(fā)送到后端服務器之前,要重寫它們以獲取主鍵,所以會發(fā)現(xiàn)相同的行。
現(xiàn)在轉(zhuǎn)到圖6,參考標號600表示高速緩存表結(jié)構(gòu)。高速緩存表結(jié)構(gòu)600示出在同一數(shù)據(jù)表(這里稱作“employee”)之上的兩個查詢的特定示例,并示出它們的結(jié)果數(shù)據(jù)結(jié)構(gòu)601、602怎樣存儲于邊緣數(shù)據(jù)庫高速緩存中的同一本地表603中。
如圖7中所示,參考標號700表示一致性協(xié)議。一致性協(xié)議700包括邊緣服務器部分701,其與后端服務器部分702信號通信。邊緣服務器部分701包括DBProxy單元,其與高速緩存資源庫704信號通信,以插入查詢結(jié)果并執(zhí)行查詢。改變APPLY單元705與高速緩存資源庫704信號通信,用于刷新表。
后端服務器部分702包括DBMS單元706,其與DB代理單元703信號通信,用于接收查詢并提供結(jié)果。DBMS單元706還與另一高速緩存資源庫707信號通信,用于對高速緩存資源庫707進行寫和讀。高速緩存資源庫707與變化捕獲單元708信號通信,用于讀取近來寫入的數(shù)據(jù)。變化捕獲單元708又以信號通信與變化施加單元705連接,用于刷新消息。
這樣,通過訂閱由源服務器傳播的更新流,確保了數(shù)據(jù)一致性。傳統(tǒng)物化視圖方案通過對基本數(shù)據(jù)中的變化(“增量”)重新執(zhí)行視圖定義,來更新已高速緩存的視圖。但是,因為邊緣數(shù)據(jù)高速緩存高速緩存的潛在的大量查詢(“視圖”),所以其需要更有效的機制。由于對已高速緩存的數(shù)據(jù)作為后端表部分填充的副本進行維護,所以在源處對基本表所提交的改變可以簡單“照原樣”傳播到已高速緩存的版本,而無需重新執(zhí)行這些查詢。將對基本表的更新、刪除和插入(“UDI”)傳播并施加到邊緣高速緩存的部分填充的副本中。以后將在該高速緩存上執(zhí)行的查詢將從這些新傳播的變化中檢索出任何匹配的元組。這一方案假設大多數(shù)web環(huán)境特有的緩慢改變數(shù)據(jù)的特點,并丟棄潛在的不必要的數(shù)據(jù)傳播,以降低判斷已高速緩存的視圖應怎樣更新的處理開銷。但是,當一個表正在經(jīng)受繁重的更新工作負荷時,高速緩存資源管理器可以在指定時期內(nèi)禁用本地副本。
每當可能時,由邊緣應用發(fā)出的只讀查詢可從高速緩存中得到滿足。更新事務通常被發(fā)送給后端數(shù)據(jù)庫執(zhí)行,而不是首先將它們施加本地高速緩存。因為邊緣數(shù)據(jù)高速緩存是為大規(guī)模使用而設計的,所以一致性協(xié)議必須盡可能的松散地與源連接。因此,確保高速緩存一致性的責任盡可能多地落在了邊緣高速緩存上,在該邊緣高速緩存上資源更加自然地分布。后端服務器應該僅負責周期性的更新傳播,它是一個可以卸載到分離過程或機器上的任務。盡管提供較強一致性保證可能引起會限制高速緩存有效性的高成本,現(xiàn)在描述一些諸如立即更新可見性和增量一致性的重要一致性保證怎樣可以得到確保的問題。本公開依賴于數(shù)據(jù)傳播器,其捕獲所有對源處的表的UDI,并將它們打包在“刷新消息”中轉(zhuǎn)發(fā)給邊緣高速緩存。將數(shù)據(jù)變化傳播給它們的事務標識符所標記的邊緣處,并以事務提交順序?qū)⑺鼈兪┘拥竭吘壐咚倬彺?。將進入的反映在源站點處提交的事務結(jié)果的UDI流施加到本地已高速緩存的表中。
由于UDI以時戳順序傳播并施加到高速緩存中。在該部分中所使用的所有時戳指后端服務器側(cè)提交時戳,所以高速緩存中各元組的值必須反映對應于來自源的上一個傳播消息的時戳的數(shù)據(jù)庫狀態(tài)。更準確地,傳播消息的時戳是包括在該消息中的任何更新事務中最大的時戳。因為本地表可以通過傳播消息以及通過在未命中時的查詢結(jié)果插入進行更新,所以在確保增量一致性時出現(xiàn)了挑戰(zhàn)。
所保證的一致性屬性。高速緩存為應用保證幾個重要的一致性屬性,即增量一致性、單調(diào)轉(zhuǎn)換、和立即更新可見性。高速緩存對于應用來說呈現(xiàn)為真實后端數(shù)據(jù)庫。但是,其內(nèi)容通常不是與那些存儲在后端數(shù)據(jù)庫中的內(nèi)容同步的。因為高速緩存向應用反映一個可能不同于當前狀態(tài)的狀態(tài),所以其“輸出”一個數(shù)據(jù)庫的給定狀態(tài)。增量一致性的屬性要求高速緩存當前輸出的數(shù)據(jù)庫狀態(tài)始終對應于數(shù)據(jù)庫在以前時間點時的過去狀態(tài)。輸出狀態(tài)與實際狀態(tài)之間的延遲也是受限的。單調(diào)狀態(tài)轉(zhuǎn)換的屬性意味著高速緩存所輸出的數(shù)據(jù)庫狀態(tài)在時間上僅向前移動。立即更新可見性的屬性要求如果應用提交一個更新,并隨后發(fā)出一個查詢,則該查詢應該觀察更新(和所有先前更新)的結(jié)果。
保證增量一致性和單調(diào)轉(zhuǎn)換。假設高速緩存最初與一分鐘前的數(shù)據(jù)庫狀態(tài)一致。如果一個在該高速緩存中未命中且在源處執(zhí)行的最新查詢的結(jié)果被插入,則該高速緩存將包括舊數(shù)據(jù)與新數(shù)據(jù)的混合。增量一致性要求已高速緩存的數(shù)據(jù)總是與數(shù)據(jù)庫的單個過去版本一致。假定一個查詢在源處原子地執(zhí)行。當一個查詢未命中且遠程執(zhí)行時,服務器返回其在該查詢執(zhí)行時的最后提交時戳及結(jié)果。
轉(zhuǎn)到圖8,參考標號800表示查詢處理算法。查詢處理算法800考慮一致性,并包括用于根據(jù)查詢的包含檢查記錄高速緩存命中的功能塊801。功能塊801將控制傳遞給判斷塊802,以進行判斷是否出現(xiàn)了高速緩存命中。如果確實出現(xiàn)了命中,則將控制傳遞給功能塊803,以執(zhí)行共享高速緩存的鎖定、查詢的本地執(zhí)行、及共享高速緩存的解鎖。但是,如果在塊802未出現(xiàn)命中,則將控制傳遞給功能塊804,以遠程執(zhí)行該查詢、并將控制傳遞給判斷塊805。塊805判斷該遠程執(zhí)行的查詢是否成功。如果成功,則將控制傳遞給返回塊806,以返回已高速緩存的結(jié)果“rc”。如果未成功,則將控制傳遞給判斷塊807,以判斷該結(jié)果是否僅是部分的。如果是,則將控制傳遞給功能塊808,以獨占地鎖定該高速緩存、將結(jié)果插入到結(jié)果集合中、傳播來自服務器的其他信息、并解鎖該高速緩存。功能塊808將控制傳遞給返回塊809,以返回結(jié)果集合“rs”。如果塊807的結(jié)果是假或否,則將控制直接傳遞給返回塊809。
在操作上,在塊807,通過將該查詢的時戳與從源服務器接收到的上一個傳播消息的時戳cache_ts進行比較,來開始結(jié)果插入。應該指出,在附圖中,查詢和高速緩存時戳分別由它們的長名query_ts(“tq”)和cache_ts(“tc”)來指示,而在別處,由它們的長或短名來指示。如果query_ts大于cache_ts,則該查詢觀察到了比高速緩存的狀態(tài)更近的狀態(tài)。在這一使用情況下,在塊808,首先插入未命中的結(jié)果,并從源服務器中抽出任何未決的傳播消息,以將整個高速緩存快進到更后的時間。最后,將該查詢添加到索引中。但是,如果cache_ts大于query_ts,立即插入未命中的結(jié)果可能將已高速緩存的數(shù)據(jù)恢復到過去的值,撤銷傳播消息所施加的改變且不能滿足單調(diào)性需求。由于這是一個罕見的競態(tài)條件,所以在這種情況下結(jié)果的插入可能被跳過。這通常僅將對該查詢的高速緩存延遲到一個后續(xù)未命中查詢在插入結(jié)果時成功時,并且不會嚴重危及高速緩存有效性。應該指出,在塊808中,作為propagate_from_server()的副作用,cache_ts可能會增加。
現(xiàn)在轉(zhuǎn)到圖9,參考標號900表示用于將結(jié)果插入到高速緩存中的算法。循環(huán)塊901執(zhí)行對于查詢結(jié)果中的每個元組的循環(huán)。塊901的循環(huán)包括判斷塊902,其用于判斷該元組是否在該高速緩存中。如果該元組在該高速緩存中,則將控制傳遞給功能塊903,以更新該元組。如果該元組不在該高速緩存中,則將控制傳遞給功能塊904,以插入該元組。這樣,在操作中,對高速緩存的結(jié)果集合插入如下進行當在高速緩存中插入一個結(jié)果集合時,在塊903,以新值復寫已有的行,而在塊904,將非已有行插入到表中。
如圖10所示,參考標號1000表示用于執(zhí)行更新事務的算法。功能塊1001執(zhí)行對于結(jié)果“rc”的遠程查詢,并將控制傳遞給判斷塊1002。如果該查詢成功,則塊1002將控制傳遞給返回塊1003,以返回結(jié)果“rc”。如果該查詢未成功,則塊1002將控制傳遞給功能塊1004,以從服務器傳播該數(shù)據(jù)。塊1004將控制傳遞給返回塊1005,以返回結(jié)果“rc”。
立即更新可見性是這樣保證的。將邊緣應用提交給高速緩存的更新事務傳送到源數(shù)據(jù)庫(塊1001)。此外,在更新事務完成之后,可在將更新結(jié)果返回給應用(1004)之前,通過從源數(shù)據(jù)庫中抽出它們而快速獲取更新的結(jié)果。
高速緩存空間開銷可通過高速緩存置換來調(diào)整。為了限制空間開銷并優(yōu)化通常是有限的邊緣資源的使用,邊緣數(shù)據(jù)高速緩存依賴于后臺垃圾收集進程,其從高速緩存安全驅(qū)除不用的數(shù)據(jù),同時保持數(shù)據(jù)一致性。具體地,高速緩存置換的目的在于最大化有限數(shù)量可用空間的高速緩存的益處。與傳統(tǒng)文件和存儲頁的置換形成對比,可在多個查詢之間共享基本行。
高速緩存置換在本地數(shù)據(jù)庫的使用達到高水印(“HWM”)值時觸發(fā)。然后,置換開始,直到空間足夠空閑并達到低水印(“LWM”)值之下時為止。在沒有空間在本地表中插入更多行或創(chuàng)建新表時,不會按照對于一個查詢未命中的需要觸發(fā)置換。置換是后臺進程,其可期望與查詢服務和更新操作并發(fā)進行。
轉(zhuǎn)到圖11,參考標號1100表示高速緩存清除算法。算法1100包括功能塊1101,其用于擴充表,以添加新列“accessedFlag”。塊1101將控制傳遞給功能塊1102,用于為本地表中的所有行將“accessedFlag”重置為假。塊1102將控制傳遞給功能塊1103,用于確定將保留在高速緩存中的查詢的集合“S”。功能塊1103將控制傳遞給功能塊1104,用于重新執(zhí)行集合“S”中的所有查詢,并將任何所選擇行的“accessedFlag”設置為真。然后,塊1104將控制傳遞給功能塊1105,用于刪除其“accessedFlag”為假的所有行。
用于高速緩存清除的算法1100稱作組置換。此算法是實現(xiàn)簡單的,不會增加命中、未命中、或更新傳播的開銷。在塊1103,根據(jù)置換策略,標記一組“犧牲”查詢,以便從高速緩存中刪除。為了確保屬于“犧牲”查詢的非重疊行被正確標記,執(zhí)行下面的步驟。首先,在塊1102,將實現(xiàn)為在本地表創(chuàng)建期間定義的控制列的已訪問標志與所有已高速緩存行關(guān)聯(lián),并被設為假。然后,在塊1104,在后臺執(zhí)行非犧牲查詢。這一后臺執(zhí)行可發(fā)生于擴充時期,以不會影響前臺查詢的性能。每當查詢執(zhí)行時,為任何所選擇的行將控制列中相應的項設為真。在塊1105,在這一執(zhí)行周期結(jié)束時,任何其控制列(已訪問標志)仍然為假的行可被安全刪除。為了在垃圾收集周期已啟動執(zhí)行之后防止由高速緩存來命中或由一致性管理器插入或更新的行的刪除,設置任何已更新或插入到本地表中的行的控制列。
在一種情況下,本公開的實施例獲得了兩個有利方面查詢相應高速緩存的益處,具體地,簡易管理和適于在工作負載或在資源可用性方面的變化的能力;以及基本表復制的益處,具體地,非冗余數(shù)據(jù)存儲的空間效率,及支持有效的基于更新的一致性協(xié)議的能力。
因此,本公開的一方面在于本地機用于通過在先前查詢的動態(tài)高速緩存結(jié)果中應用高速緩存策略,來滿足對于至少一個遠程服務器的數(shù)據(jù)庫查詢。本公開的實施例的另一方面在于本地數(shù)據(jù)庫與本地機相關(guān)聯(lián),并用于在共享表中存儲多個查詢結(jié)果。本公開的實施例的又一方面在于通過應用作用于查詢謂詞的包含檢查器,將本地存儲的查詢結(jié)果用于滿足新查詢。包含檢查器確保查詢謂詞所定義的新查詢請求的數(shù)據(jù)邏輯上包括在已高速緩存于多個已高速緩存查詢結(jié)果中的數(shù)據(jù)集合中,其是由先前查詢的謂詞并集所描述的。
本公開的實施例的另一方面在于可能時將存儲在邊緣高速緩存中的數(shù)據(jù)組織為在源數(shù)據(jù)庫中定義的表的“部分副本”。從源服務器接收到的查詢結(jié)果被插入到本地數(shù)據(jù)庫中。將構(gòu)成同一基本表的查詢結(jié)果插入到同一本地高速緩存版本的基本表中。本公開的實施例的又一方面在于諸如包含子查詢、合計或用戶定義的函數(shù)的復合查詢的結(jié)果本地存儲為多個表,一個結(jié)果一個表,其中復合查詢的結(jié)果不是簡單的基本表的行和列的子集。
本公開的實施例的又一方面在于它是透明的,不需要對應用進行改變。此外,由于高速緩存邏輯存在于數(shù)據(jù)庫之外,所以它與任何后端或本地數(shù)據(jù)庫是兼容的,且不需要對數(shù)據(jù)庫服務器進行改變。本公開的實施例的另一方面在于通過將對源處的基本表所發(fā)生的改變傳播到邊緣高速緩存,并通過在處理進入的查詢時應用明了一致性的算法,來維護本地高速緩存的數(shù)據(jù)的一致性。本公開的實施例的又一方面在于高速緩存可通過從本地數(shù)據(jù)庫中犧牲無用查詢結(jié)果,而不危及一致性或正確性,調(diào)整本地使用的空間數(shù)量。
根據(jù)這里的教授,本領域的普通技術(shù)人員可以容易地探知本公開的這些和其他特征和優(yōu)點。應該理解,本公開的教授可以各種硬件、軟件、固件、專用處理器或它們的組合的形式來實現(xiàn)。
本公開的教授可以實現(xiàn)為例如硬件和軟件的組合。此外,優(yōu)選地,軟件以有形實現(xiàn)于程序存儲單元上的固件來實現(xiàn)。該軟件可以上載到包括任何適當體系結(jié)構(gòu)的機器上并由其執(zhí)行。優(yōu)選地,該機器實現(xiàn)于具有諸如一個或多個中央處理單元(“CPU”)的、隨機存儲器(“RAM”)、及輸入/輸出(“I/O”)接口的計算機平臺上。該計算機還可包括操作系統(tǒng)和微指令代碼。這里所描述的各過程和功能可以是可由硬件執(zhí)行的微指令代碼的一部分、或軟件的一部分、或任何它們的組合。此外,各種諸如附加數(shù)據(jù)存儲部件的其他外圍部件可以與該計算機平臺相連。
應該進一步理解,因為附圖中所示的某些組成系統(tǒng)部件和方法優(yōu)選以軟件來實現(xiàn),所以這些系統(tǒng)部件或處理功能塊之間的實際連接可依本公開被編程的方式而不同。給定這里的教授,本領域的普通技術(shù)人員將能夠設想本公開的這些和類似的實現(xiàn)或設計。
盡管這里參照附圖對示例性實施例進行了描述,但應該理解,本公開并不限于這些確切的實施例,本領域的普通技術(shù)人員可以在其中實現(xiàn)各種變換和修改,而不脫離本公開的范圍和實質(zhì)。所有這樣的變換和修改都旨在包括在如所附權(quán)利要求中陳述的本公開的范圍內(nèi)。
權(quán)利要求
1.一種邊緣數(shù)據(jù)高速緩存(202),包括查詢評估器(204);高速緩存索引(206),其與查詢評估器信號通信;高速緩存資源庫(208),其與查詢評估器信號通信;資源管理器(209),其與查詢評估器信號通信;包含檢查器(207),其與查詢評估器信號通信;查詢解析器(205),其與查詢評估器信號通信;一致性管理器(210),其與查詢評估器信號通信。
2.一種包括如權(quán)利要求1中定義的數(shù)據(jù)高速緩存的邊緣服務器(200),還包括小服務程序(210),其與該邊緣數(shù)據(jù)高速緩存信號通信。
3.一種包括如權(quán)利要求2中定義的邊緣服務器(109、110)的用于根據(jù)本地應用執(zhí)行的查詢動態(tài)高速緩存數(shù)據(jù)的系統(tǒng)(100),該系統(tǒng)還包括遠程服務器(108),其具有完整的數(shù)據(jù)庫(101);邊緣服務器上的本地數(shù)據(jù)庫(104),其包括完整數(shù)據(jù)庫的子集,該邊緣服務器與遠程服務器信號通信;邊緣服務器上的本地數(shù)據(jù)庫內(nèi)的多個共享表(503、603),用于高速緩存來自完整數(shù)據(jù)庫的結(jié)果、接收本地生成的數(shù)據(jù)、并在確保本地數(shù)據(jù)庫與遠程數(shù)據(jù)庫之間的數(shù)據(jù)一致性的同時根據(jù)可用存儲需求調(diào)整高速緩存的內(nèi)容(208)。
4.一種包括用于根據(jù)本地應用執(zhí)行的查詢動態(tài)高速緩存數(shù)據(jù)的邊緣服務器(109)的系統(tǒng)(100),該系統(tǒng)還包括用于動態(tài)高速緩存遠程服務器的先前數(shù)據(jù)庫查詢的結(jié)果的裝置;用于將本地數(shù)據(jù)庫與本地服務器相關(guān)聯(lián)的裝置;用于將多個高速緩存結(jié)果存儲在本地數(shù)據(jù)庫的共享表中的裝置;以及用于將上述多個高速緩存結(jié)果用于滿足對本地服務器的新數(shù)據(jù)庫查詢的裝置。
5.一種機器可讀的程序存儲裝置,其有形地實現(xiàn)可由該機器執(zhí)行以實現(xiàn)用于根據(jù)本地應用執(zhí)行的查詢動態(tài)高速緩存數(shù)據(jù)的方法步驟(400)的指令程序,該方法步驟包括動態(tài)高速緩存(414)該遠程服務器的先前數(shù)據(jù)庫查詢的結(jié)果;將本地數(shù)據(jù)庫與本地服務器相關(guān)聯(lián)(420);將多個高速緩存結(jié)果存儲(422)在本地數(shù)據(jù)庫的共享表中;以及將上述多個高速緩存結(jié)果用于滿足(412)對于本地服務器的新數(shù)據(jù)庫查詢中。
6.一種讓本地服務器滿足針對至少一個遠程服務器的數(shù)據(jù)庫查詢的方法(400),該方法包括動態(tài)高速緩存(414)該遠程服務器的先前數(shù)據(jù)庫查詢的結(jié)果;將本地數(shù)據(jù)庫與本地服務器相關(guān)聯(lián)(420);將多個高速緩存結(jié)果存儲(422)在本地數(shù)據(jù)庫的共享表中;以及將上述多個高速緩存結(jié)果用于滿足(412)對于本地服務器的新數(shù)據(jù)庫查詢中。
7.權(quán)利要求6的方法,還包括由上述多個高速緩存結(jié)果和任何其他插入到本地數(shù)據(jù)庫中的數(shù)據(jù)構(gòu)成存儲數(shù)據(jù)(705);以及確保高速緩存數(shù)據(jù)的一致性(708)。
8.權(quán)利要求6的方法,還包括根據(jù)至少一個調(diào)整標準調(diào)整(1103、1105)上述共享表的內(nèi)容。
9.權(quán)利要求8的方法,其中上述至少一個調(diào)整標準包括選自以下的標準本地服務器中的可用空間;查詢的存儲需求;查詢的執(zhí)行成本;本地與遠程服務器之間的網(wǎng)絡性能;本地與遠程服務器上的負荷;已高速緩存查詢的訪問率;及這些的任何組合。
10.權(quán)利要求6的方法,其中使用的步驟包括加速對上述至少一個遠程服務器的查詢。
11.權(quán)利要求6的方法,其中存儲的步驟包括將在單個數(shù)據(jù)庫表之上的簡單(304)和Top-N(305)查詢的結(jié)果插入到共享基本表中;將關(guān)聯(lián)查詢的結(jié)果保存在共享關(guān)聯(lián)表中;構(gòu)成包括所有共享基本表和共享關(guān)聯(lián)表的共享表資源庫;將復合查詢的結(jié)果存儲在分離表中,每個查詢結(jié)果一個表;以及根據(jù)上述多個分離表構(gòu)成精確匹配資源庫。
12.權(quán)利要求11的方法,其中插入的步驟包括只要在首先接收到對于基本表的簡單查詢時,就在高速緩存中創(chuàng)建單個本地表,以對應于源服務器中的基本表;將上述簡單查詢的結(jié)果插入到上述本地表中;以及將所有后續(xù)簡單查詢的結(jié)果插入到該本地表的基本表中。
13.權(quán)利要求11的方法,其中保存的步驟包括在高速緩存中創(chuàng)建本地關(guān)聯(lián)表,以對應于關(guān)聯(lián)查詢中的每個關(guān)聯(lián)條件和表列表;以及將所有后續(xù)在同一表列表之上并且具有相同關(guān)聯(lián)條件的關(guān)聯(lián)查詢的結(jié)果插入到本地關(guān)聯(lián)表中。
14.權(quán)利要求6的方法,其中使用的步驟包括下面中的至少一個如果新查詢?yōu)閺秃喜樵儯瑒t在精確匹配資源庫中搜索對于新查詢的響應;以及如果新查詢不是復合查詢,則從共享表資源庫的數(shù)據(jù)中子選擇對于新查詢的響應。
15.權(quán)利要求14的方法,其中搜索的步驟包括如果在精確匹配資源庫中發(fā)現(xiàn)上述新查詢的SQL串,則將高速緩存中對應于該SQL串的查詢結(jié)果返回給應用;如果在精確匹配資源庫中未發(fā)現(xiàn)上述新查詢的SQL串,則將新查詢發(fā)送給源服務器;如果在精確匹配資源庫中未發(fā)現(xiàn)上述新查詢的SQL串,則將所接收到的查詢結(jié)果插入到精確匹配資源庫中;以及如果在精確匹配資源庫中未發(fā)現(xiàn)上述新查詢的SQL串,則將高速緩存中的查詢結(jié)果與該新查詢的SQL串相關(guān)聯(lián)。
16.權(quán)利要求14的方法,其中子選擇的步驟包括利用包含檢查器試圖證實上述新查詢的結(jié)果集合的結(jié)果包含在已高速緩存查詢結(jié)果的并集中;如果上述試圖證實的步驟成功完成,則以本地表名替代該新查詢中提及的表;如果上述試圖證實的步驟成功完成,則在共享表資源庫之上評估該新查詢;以及如果該查詢是Top-N查詢,則計數(shù)從本地高速緩存中接收到的行數(shù),如果該行數(shù)未超過應用所請求的行數(shù),則通過重寫該新查詢并生成重寫的查詢、將重寫的查詢發(fā)送給源服務器并將從源服務器接收到的結(jié)果存儲在共享表資源庫中、將重寫查詢的謂詞添加到共享表資源庫的索引中、在該共享表資源庫之上評估該新查詢、及將評估步驟的結(jié)果返回給應用來進行處理。
17.權(quán)利要求12的方法,其中試圖的步驟包括下面的至少一個發(fā)現(xiàn)滿足這樣的條件的匹配已高速緩存查詢,其中的條件為新查詢的選擇列表中的列的列表包括在匹配查詢的選擇列表中的列的列表中、新查詢的謂詞邏輯上意味著匹配查詢的謂詞、及新查詢的各子句中提及的所有列包括在匹配查詢的選擇列表中;以及發(fā)現(xiàn)滿足這樣的條件的匹配已高速緩存查詢的集合,其中的條件為新查詢的選擇列表中的列的列表包括在每一個匹配查詢的選擇列表中的列的列表中、當所有的謂詞由邏輯或運算符連接時新查詢的謂詞邏輯上意味著所有匹配查詢謂詞的邏輯和所構(gòu)成的謂詞、及新查詢的各子句中提及的所有列包括在每一個匹配查詢的選擇列表中。
18.權(quán)利要求16的方法,其中重寫的步驟包括步驟將已訪問表的主鍵添加到上述查詢的選擇列表中;如果資源管理器估計所得到的結(jié)果集合不太長或不值得高速緩存,則從上述選擇列表中去掉合計運算符;以及擴充該查詢所請求的行數(shù)(N),以檢索更多行。
19.權(quán)利要求7的方法,其中確保的步驟包括保證應用所指定的一組一致性需求中的至少一個,該組一致性需求包括增量一致性、立即更新可見性、及單調(diào)狀態(tài)轉(zhuǎn)換。
20.權(quán)利要求6的方法,進一步包括確保先前查詢的結(jié)果的增量一致性,其包括步驟向數(shù)據(jù)高速緩存訂閱由源服務器傳播并且包括對后端表施加的更新、刪除和插入的刷新消息;只要當接收到刷新消息時,就將該更新、刪除和插入施加到共享表資源庫中的本地高速緩存的表;使在改變過的刷新消息中提及的任何精確匹配資源庫中的任何共享關(guān)聯(lián)表無效;將等于其結(jié)果包括在刷新消息中的任何事務的最大時戳的刷新消息時戳與該刷新消息相關(guān)聯(lián);將等于最后施加到高速緩存的刷新消息的時戳的已高速緩存設置時戳與先前查詢的結(jié)果相關(guān)聯(lián);將新查詢時戳與新查詢相關(guān)聯(lián);將新查詢時戳與高速緩存的設置時戳相比較;以及如果新查詢時戳超過了已高速緩存的設置時戳,則插入對該新查詢的響應;以及如果該新查詢時戳超過了已高速緩存的設置時戳,則從數(shù)據(jù)庫服務器中檢索未決的刷新消息。
21.權(quán)利要求6的方法,進一步包括確保立即更新可見性,其包括步驟將邊緣數(shù)據(jù)高速緩存接收的更新事務路由到源服務器;在從源服務器接收到更新完成通知之后,在以完成狀態(tài)響應應用之前,從源服務器抽出刷新消息;以及在上述路由和抽出步驟在處理中時,確保該應用未對已高速緩存的數(shù)據(jù)進行訪問。
22.權(quán)利要求8的方法,其中調(diào)整的步驟包括根據(jù)存儲空間管理策略發(fā)起共享表清除。
23.權(quán)利要求15的方法,其中上述共享表清除包括根據(jù)共享表在每一表中構(gòu)成控制列;將控制列中的各項設為假;識別要在共享表中進行維護的良好查詢;標記上述控制列中所有對應于屬于對上述良好查詢的響應的行的項;以及刪除共享表中其控制列項仍然為假的任何行。
24.一種用于確保從數(shù)據(jù)庫服務器檢索到的一組查詢結(jié)果的增量一致性的方法(800),該方法包括步驟向數(shù)據(jù)高速緩存訂閱由源服務器傳播并且包括施加到后端表(707)的更新、刪除和插入的刷新消息(708、705);只要當接收到刷新消息時,就將該更新、刪除和插入施加到本地高速緩存的表(704);將等于其結(jié)果包括在刷新消息中的任何事務的最大時戳的時戳與該刷新消息相關(guān)聯(lián);將等于最后施加到高速緩存的刷新消息的時戳的設置時戳與先前查詢的結(jié)果相關(guān)聯(lián);將新查詢時戳與新查詢相關(guān)聯(lián);將該新查詢時戳與上述設置時戳進行比較;以及如果該新查詢時戳超過了該設置時戳,則插入對該新查詢的響應;以及如果該新查詢時戳超過了該設置時戳,則從數(shù)據(jù)庫服務器中檢索未決的刷新消息。
25.權(quán)利要求4的包括用于確保從數(shù)據(jù)庫服務器檢索到的一組查詢結(jié)果的增量一致性的邊緣服務器的系統(tǒng),該系統(tǒng)還包括用于向數(shù)據(jù)高速緩存訂閱由源服務器傳播并且包括施加到后端表的更新、刪除和插入的刷新消息的裝置;用于只要當接收到刷新消息時,就將該更新、刪除和插入施加到本地高速緩存的表的裝置;用于將等于其結(jié)果包括在刷新消息中的任何事務的最大時戳的時戳與該刷新消息相關(guān)聯(lián)的裝置;用于將等于最后施加到高速緩存的刷新消息的時戳的設置時戳與先前查詢的結(jié)果相關(guān)聯(lián)的裝置;用于將新查詢時戳與新查詢相關(guān)聯(lián)的裝置;用于將該新查詢時戳與上述設置時戳進行比較的裝置;以及用于如果該新查詢時戳超過了該設置時戳,則插入對該新查詢的響應的裝置;以及用于如果該新查詢時戳超過了該設置時戳,則從數(shù)據(jù)庫服務器中檢索未決的刷新消息的裝置。
26.權(quán)利要求5的用于確保從數(shù)據(jù)庫服務器檢索到的一組查詢結(jié)果的增量一致性的程序存儲裝置,該方法步驟包括向數(shù)據(jù)高速緩存訂閱由源服務器傳播并且包括施加到后端表的更新、刪除和插入的刷新消息;只要當接收到刷新消息時,就將該更新、刪除和插入施加到本地高速緩存的表;將等于其結(jié)果包括在刷新消息中的任何事務的最大時戳的時戳與刷新消息相關(guān)聯(lián);將等于最后施加到高速緩存的刷新消息的時戳的設置時戳與先前查詢的結(jié)果相關(guān)聯(lián);將新查詢時戳與新查詢相關(guān)聯(lián);將該新查詢時戳與上述設置時戳進行比較;以及如果該新查詢時戳超過了該設置時戳,則插入對該新查詢的響應;以及如果該新查詢時戳超過了該設置時戳,則在數(shù)據(jù)庫服務器中檢索未決的刷新消息。
全文摘要
本發(fā)明提供了一種用于根據(jù)本地應用所執(zhí)行的查詢動態(tài)高速緩存數(shù)據(jù)的系統(tǒng)(100)、裝置(200)和方法(300),其中該系統(tǒng)包括遠程服務器(108)、邊緣服務器(109)上的本地數(shù)據(jù)庫(104);該裝置包括邊緣數(shù)據(jù)高速緩存(202),該邊緣數(shù)據(jù)高速緩存包括查詢評估器(204)、高速緩存索引(206)、高速緩存資源庫(208)、資源管理器(209)、包含檢查器(207)、查詢解析器(205)、及一致性管理器(210),所有這些部件與查詢評估器信號通信;該方法用于動態(tài)高速緩存該遠程服務器的先前數(shù)據(jù)庫查詢的結(jié)果(412)、將本地數(shù)據(jù)庫與本地服務器相關(guān)聯(lián)、將多個高速緩存結(jié)果存儲在本地數(shù)據(jù)庫的共享表(503)中、以及將多個高速緩存結(jié)果用于滿足對于本地服務器的新數(shù)據(jù)庫查詢(410)中。
文檔編號G06F15/16GK1708757SQ200380102370
公開日2005年12月14日 申請日期2003年10月14日 優(yōu)先權(quán)日2002年12月23日
發(fā)明者卡利爾·S.·阿米瑞, 斯瑞拉姆·派德馬納伯翰, 樸商賢, 萊紐·泰瓦瑞 申請人:國際商業(yè)機器公司