專利名稱:在分布式數據庫環(huán)境中的一致性讀取的制作方法
技術領域:
該發(fā)明涉及在分布式數據庫環(huán)境中對儲存的數據的存取,尤其涉及用來確定將哪個數據項版本提供給請求該數據項的事務的方法和裝置。
背景技術:
在通常的數據庫系統(tǒng)中,用戶通過向數據庫應用程序提交命令或者語句來儲存、更新、獲取、和選擇信息。為了能夠正確地進行,語句必須遵循數據庫應用程序所支持的數據庫語言。一種公知的通用數據庫語言是結構化查詢語言(SQL)。
由一個或者多個數據庫語言語句組成的基本邏輯單元被稱之為事務(transaction)。數據庫語言語句的例子有插入(insert),用來在數據庫中插入數據;查詢(query),用來在數據庫中選擇數據。
當多個用戶共享一個數據庫系統(tǒng)時,在一個時刻只允許一個事務被執(zhí)行的情況是不切實際的。然而,當很多事務被允許同時執(zhí)行時,就出現了一致性問題。事務型的數據庫管理系統(tǒng)(transactionaldatabase management)提供了一種特殊的語句-“提交(commit)”,用戶或者程序提交該語句,以描述構成一個事務的語句。在事務提交之前,該事務所做的所有改變都必須被認為是臨時的,并且如果該事務提交失敗,這些改變能夠被刪除。在事務提交時,事務所作的所有改變都是永久的,并且可以被其它事務看到。
為了保證得到可預測并可重復產生的結果,已經開發(fā)出這些技術用來保護同時執(zhí)行的事務不會以不可控制的方式互相影響??傮w上來看,設計事務,以使數據庫的改變以數據庫從一個一致狀態(tài)轉移到另外的一致狀態(tài)的方式進行。
事務不僅僅必須是在完成時以一致狀態(tài)離開數據庫,而且也必須看到該數據庫處在一致狀態(tài)。這個條件是非常難以滿足的,因為有可能同時存在幾個正在執(zhí)行事務,每個事務可以產生僅在該單一事務內可見的臨時不一致性。結果,該事務不能看到由同時執(zhí)行的其它事務所作的改變,直到那些事務提交為止。
為了確保一個查詢所歸屬的事務不能看到同時執(zhí)行的事務所作的改變,一種方法是阻止那些事務讀取已經被更新的數據項版本,直到更新該數據項版本的事務被提交為止。然而,該方法通過使那些希望讀取數據項版本的事務(讀取者)等待已經寫入數據項版本的事務(寫入者)提交,從而降低了系統(tǒng)的并發(fā)性。
用來阻止查詢看到同時執(zhí)行的事務所作的改變的另一種方法是為該查詢分配一個“快照時間(snapshot time)”,并且接下來(1)使這個查詢看到在這個快照時間之前提交的事務所作的所有改變,并且(2)阻止該查詢看到在快照時間之后提交的事務所作的所有改變。尤其是,當查詢是事務的部分時,該查詢必須看到(1)所有在查詢的快照時間或者在其之前提交給數據庫的所有改變,以及(2)該查詢所歸屬的事務所做的所有改變(即使該事務還沒有提交)。
有可能讓同一個數據項的多個版本存在于數據庫系統(tǒng)內的緩存中。這些版本包含(1)數據項當前版本(下文被稱為當前版本),該數據項包含了直到當前時間點時已經對數據項做出的所有改變,并且(2)當前版本的克隆,該克隆可以是在不同的時間點產生的當前版本的副本,也可以是其它克隆的副本(下文簡稱為克隆)。包含當前版本及其克隆的集合將被稱為該數據項的“數據項版本”。
當查詢指定獲取數據項時,該數據庫系統(tǒng)必須確定能夠將該數據庫項的多個版本中的哪個版本提供給該查詢。對于一個給定的查詢,數據項的每一個版本不外乎下面兩類中的一類(1)包含該查詢必須看到的任何信息的版本(和包含該查詢所需要的將來的改變,這些將來的改變可以被回滾(roll back),但是很難將更老的數據項版本及時向前移動),以及(2)該查詢必須看到的正在丟失改變的版本。
通常,在該查詢不能看到的任何改變從該數據項版本中刪除后,相對于特定查詢的第一種類型的數據項版本能夠被用來回答該特定查詢。從數據項的一個版本中刪除改變的過程稱之為“回滾(rollback)”。相對于特定查詢的第二種類型的數據項版本不能被用來回答該特定查詢。
一種用來向查詢提供數據的方法總是開始于一個數據項的當前版本。通過定義,數據項的當前版本包含了所有已經針對該數據項所做的改變。因此,對所有的查詢來說它永遠屬于第一種類型。使用數據項的當前版本通常需要(1)產生一份克隆,以及(2)從克隆中刪除該查詢不應該看到的所有改變。然而,如果查詢的快照時間是舊的,那么可能會存在大量的不得不從克隆中刪除的改變,這將導致消耗大量時間和系統(tǒng)資源的回滾操作。而且,從當前版本中經?;貪L改變僅僅能在單節(jié)點系統(tǒng)中工作的很好,因為在多節(jié)點系統(tǒng)中,當當前版本從集群的一個節(jié)點移動到另一節(jié)點的時候,能夠在追蹤數據項的當前版本的情況下獲得數據項請求。
如果系統(tǒng)不經常用當前版本開始回滾操作,那么該系統(tǒng)必須能夠相對于系統(tǒng)正在處理的查詢來確定克隆是屬于哪個類別的。對于一個給定的查詢,如果它們屬于類別一,那么它們可以被用來向該查詢提供數據。為了方便對克隆的分類,“刪除數據信息(removed-data information)”可以同每個數據項版本一起被存儲。該刪除數據信息通常指示對數據項版本所作的隨后從該數據項的該版本中刪除的改變。
例如,假設一個數據項的當前版本被克隆,產生克隆X。最初,克隆X的刪除數據信息將表明沒有數據被刪除。如果在克隆X上執(zhí)行一個回滾操作,用來刪除事務T1產生的改變,那么克隆X的刪除數據信息將被修正,用以顯示T1所產生的改變已經從克隆X中刪除。如果查詢不需要看到T1所作的改變,那么克隆X可以被用來向該查詢提供數據(可能需要額外的回滾)。如果該查詢需要看到T1做出的改變,那么克隆X不能用來向該查詢提供數據。
不幸地是,刪除數據信息不總是正確地指示所有改變,這些改變(1)是已經對該數據項的改變,(2)不在該克隆中。尤其是,即使當刪除數據信息表明沒有數據從克隆中刪除,但是依然能夠保留該查詢必須能夠看到的并且該克隆正在丟失的改變的可能性。特別地,查詢可能不得不看到對克隆創(chuàng)建之后對當前版本進行的改變。因此,這一刪除數據信息不足以用來確定正在從數據項版本中消失的所有數據。換句話說,克隆可能是從來沒有從該克隆中刪除的正在消失的改變。
接下來的一個例子是,克隆如何結束在該克隆的刪除數據信息沒有反映出來的正在丟失的數據。事務(TXB)正在對當前版本進行更新。當前版本被克隆,產生克隆Y。TXB繼續(xù)對當前版本進行更新。在這個例子中,克隆Y現在正在丟失在它被克隆出來后對當前版本的更新,但是克隆Y的刪除數據信息沒有指示出任何改變在丟失。
一種用來指示沒有在刪除數據信息中反映出的改變是否正在克隆中丟失的方法是當該數據項的當前版本被更新時,將所有已經存在的克隆標記為“舊(old)”。標記克隆為“舊”的操作在下文中稱為失效。然而,在克隆能夠在多個節(jié)點擴散的多節(jié)點系統(tǒng)(下文稱為集群)中,這是不切實際的,因為它需要向所有在集群中的節(jié)點為每個數據項的每個更新廣播一條失效消息,該集群可能包含這些數據項的克隆。
根據如上所述,需要一種用來確定將哪個數據項版本提供給查詢的機制,這里,數據項的克隆可以存在集群的多個節(jié)點中。
發(fā)明內容
根據本發(fā)明的一個方面,提供了用來確定哪個數據項版本能夠被用來滿足查詢的技術。這里描述的技術與另一種技術相比,可以使用在集群的環(huán)境中,而不發(fā)生非常明顯的性能下降。另外,提供了一種用來確定哪個版本需要最小的工作量就能滿足查詢需求的技術。根據一個實施例,該技術包含1)使第一新字段和每一克隆相關聯(lián),其中,第一新字段指示數據項版本是當前版本的時間,2)使第二新字段和每一查詢相關聯(lián),其中,第二新字段指示該查詢必須看到的事務所作的最后的改變,以及
3)使用克隆的第一新字段的值和查詢的第二新字段的值,來確定該克隆是否能夠被提供給該查詢。
以下通過附圖中的實例來說明本發(fā)明的實施例,并不是出于限定目的,在附圖中,相同的標號是指相同的元素,其中圖1是數據項版本和已經更新過數據項版本的事務的框圖;圖2是克隆分支框圖;圖3是矢量框圖;圖4是根據本發(fā)明的實施例的數據庫系統(tǒng)的框圖;以及圖5是能被用來實施本發(fā)明的實施例的計算機系統(tǒng)的框圖。
具體實施例方式
這里描述了一種方法和系統(tǒng),用來提供來自數據庫中的多個數據項版本,以回答查詢。出于解釋目的,在以下的描述中,為了徹底理解該發(fā)明,闡明了大量的細節(jié)說明。然而,對于本領域技術人員而言,顯而易見地是,沒有這些細節(jié)也可以實施本發(fā)明。在其它例子中,為了避免對本發(fā)明造成不必要的混淆,眾所周知的結構和裝置以框圖的形式示出。
功能概述本發(fā)明提供了用來為了查詢,使駐留在集群中的多個節(jié)點中的一個的數據項版本定位的技術,該查詢必須看到該數據庫的一致性快照。正如上面提到的,這樣的查詢必須僅僅看到(1)由提交的事務的特定集合提交給數據庫的改變,并且(2)該查詢所歸屬的事務的先前語句所做的改變。
根據一個實施例,該技術包括為每個克隆儲存一個克隆時間(CLONE-TIME),并且為每個查詢儲存一個最后看到時間戳(LAST-TO-SEE-TIMESTAMP)。在以下章節(jié)中將描述這些附加信息數據項是如何被建立、維護、以及如何被用來確定特定克隆是否能夠被提供給特定查詢的。
全局系統(tǒng)時間全局系統(tǒng)時間是由該數據庫系統(tǒng)維護的計數器。通常,該計數器隨著時間增加。為了跟蹤數據庫事件的順序,事件被標記為從全局系統(tǒng)時間顯示的時間開始已經在數據庫中發(fā)生。例如,發(fā)生在全局系統(tǒng)時間10的事件被認為是在全局系統(tǒng)時間11發(fā)生的任何事件前已經發(fā)生的。下面會更詳細描述到,全局系統(tǒng)時間被用來為克隆的克隆時間(CLONE-TIME)和查詢的最后看到時間戳(LAST-TO-SEE-TIMESTAMP)創(chuàng)建時間戳。
CLONE-TIME(克隆時間)正如上面提到的,將刪除數據信息同每個克隆一同儲存起來以指示什么改變(如果有的話)已經從克隆中刪除。然而,刪除數據信息并不指示克隆是否正在丟失對克隆被創(chuàng)建后的當前版本所作的改變。為了方便跟蹤這種后來的丟失的改變,將每個克隆和“克隆時間(CLONE-TIME)”一起儲存。
通常,克隆的克隆時間是一個表示從當前數據項版本中克隆出克隆所歸屬的“克隆分支(clone-branch)”的時間值。特定克隆所歸屬的克隆分支包含(1)涉及產生特定克隆的克隆操作的所有克隆,以及(2)被用來生成特定克隆的所有克隆。
以下所述更加詳細地說明了克隆、克隆分支、克隆時間(CLONE-TIME)。數據項的每個非當前版本是從當前版本中克隆出來的,或者是從該數據項的另一個非當前版本中克隆出來的。因此,數據項的每個非當前版本是一個或者多個克隆操作序列的產物。例如,圖2描述了當前版本200。在時間T=10,當前版本200的第一份克隆201從當前版本中創(chuàng)建出來。在克隆201從當前版本200克隆出來時,從全局系統(tǒng)時間中分配給它一個克隆時間(CLONE-TIME)。
克隆202是克隆201的克隆??寺?02在T=12時從克隆201中克隆出來的。盡管克隆201是在T=12創(chuàng)建的,但是它屬于在T=10從當前版本200克隆中克隆出來的克隆分支。結果,給克隆202分配的克隆時間(CLONE-TIME)也是T=10。
在T=15從克隆202中克隆出來的克隆203被分配的克隆時間(CLONE-TIME)同樣是T=10。在T=17從克隆203中克隆出來的克隆204被分配的克隆時間(CLONE-TIME)同樣是T=10。因此,所有克隆(201、202、203、以及204)都屬于相同的克隆分支,并且都擁有相同的克隆時間(CLONE-TIME)T=10,該克隆時間是最初分配給克隆201的克隆時間。
因此,分配給一個從當前版本中創(chuàng)建出來的克隆的克隆時間(CLONE-TIME)是創(chuàng)建該克隆的全局系統(tǒng)時間。分配給從另一克隆創(chuàng)造出來的克隆的克隆時間(CLONE-TIME)就是從其它克隆中克隆出來的克隆時間(CLONE-TIME)。
通過使用與克隆時間(CLONE-TIME)相關聯(lián)的刪除數據信息,使得知道發(fā)生在克隆時間(CLONE-TIME)以前的針對數據項的所有改變變?yōu)榭赡?,這些改變(1)反映在該數據項版本中,或者(2)標識為由刪除數據信息刪除。
最后看到時間戳(LAST-TO-SEE-TIMESTAMP)根據一個實施例,除了為每個克隆分配一個克隆時間(CLONE-TIME)外,還為必須看見數據庫一致性圖像的每個查詢分配一個最后看到時間戳(LAST-TO-SEE-TIMESTAMP)。具體來說,被分配給作為事務的部分的查詢的最后看到時間戳(LAST-TO-SEE-TIMESTAMP)是全局系統(tǒng)時間值,在這個時間,該事務做出了查詢必須看到的最近的改變。
例如,假設查詢Q1是事務TX1的部分,而事務TX1已經在時刻T=1、T=2、T=3、T=4、和T=5分別對數據庫作了五次改變。假設Q1必須看見TX1的前三次改變。在這種情況下,分配給Q1的最后看到時間戳(LAST-TO-SEE-TIMESTAMP)是T=3,即TX1作第三次改變的全局系統(tǒng)時間。
比較克隆時間與最后看到時間戳(COMPARING CLONE-TIME TO LAST-TO-SEE-TIMESTAMP)通常,克隆的刪除數據信息指示最近事務的提交時間,該事務的改變在這個克隆中反映出來。出于理解目的,這里這個值稱為最近包含時間(MOST-RECENT-INCLUSION-TIME)。
因此,如果克隆包括來自在時間10、12、和15提交的事務的數據,那么這個克隆的最近包含時間(MOST-RECENT-INCLUSION-TIME)將指示提交時間為14,即事務的提交時間(例如15)減1。如果在時間15提交的事務產生的改變被從克隆中刪除,那么該最近包含時間(MOST-RECENT-INCLUSION-TIME)將變?yōu)?2。
過去,如果一個克隆擁有比查詢的快照時間還要早的最近包含時間(MOST-RECENT-INCLUSION-TIME),那么即使該克隆的刪除數據信息表示沒有從該克隆中移出任何改變,該克隆也不能被用來滿足一個查詢。例如,不可能使用最近包含時間(MOST-RECENT-INCLUSION-TIME)為14的克隆來滿足快照時間為20的查詢,即使該克隆的刪除數據信息表明沒有任何改變已經從該克隆中刪除。該克隆不能被使用的原因是對于當前版本已經產生的改變可能(1)在克隆創(chuàng)建之后,而且(2)在查詢的快照時間之前。此外,在過去,數據項版本的失效指的是本地失效,而且遠程數據項版本不能被使用,因為全局無效的代價是很昂貴的。
通過給查詢維護一個最后看到時間戳(LAST-TO-SEE-TIMESTAMP),并且給克隆維護一個克隆時間(CLONE-TIME),使用通過集群的數據項版本而不作無效處理是可能的。特別地,如果一個克隆的克隆時間(CLONE-TIME)大于或者等于一個查詢的最后看到時間戳(LAST-TO-SEE-TIMESTAMP),同時它的快照時間又比最近包含時間(MOST-RECENT-INCLUSION-TIME)小,那么該數據項版本就是可用的。
根據一個具體實例,它的最后看到時間戳(LAST-TO-SEE-TIMESTAMP)被設置成全局系統(tǒng)時間值,用來表示該事務發(fā)生改變的時間,該改變與“最后改變序列號(SEQUENCE-NUMBER-OF-LAST-CHANGE)”的值有關。這個最后改變序列號(SEQUENCE-NUMBER-OF-LAST-CHANGE)指的是查詢必須看得見的由查詢所歸屬的事務產生的最高改變的序列號。
為數據項版本維持的數據如前所述,有兩種方式造成數據項版本可能丟失一個查詢需要看見的改變1)從數據項版本中移出(roll out)的改變;2)在數據項版本從數據項的當前版本中克隆出來以后針對數據項的當前版本的改變。這個從數據項版本中刪除的改變被稱為“刪除數據(removed data)”,而跟蹤這個數據的必要信息被叫做“刪除數據信息(removed-data information)”。
刪除數據信息與每一個數據項版本相關聯(lián)。該刪除數據信息包括如下內容1)最近包含時間(MOST-RECENT-INCLUSION-TIME)其改變還沒有被從數據項版本中移出的最近的事務的提交時間。對于數據項的當前版本,其最近包含時間(MOST-RECENT-INCLUSION-TIME)總是無窮大。當改變被從數據項版本中移出時,該數據項版本的最近包含時間(MOST-RECENT-INCLUSION-TIME)被更新,用來反映最近事務的提交時間,以修改數據項版本中還沒有移出改變的數據項版本。例如,如果事務TXA、TXB、和TXC分別在時間5、10、15向一個特定的數據項版本提交改變,然后從TXC移出改變,那么最近包含時間(MOST-RECENT-INCLUSION-TIME)將被設置為10。如果來自TXB的改變被移出,那么最近包含時間(MOST-RECENT-INCLUSION-TIME)將被設置成5。
2)最近正在丟失的事務(LAST-MISSING-TRANSACTION)其改變正在從數據項版本中丟失的最近的事務的標識符。換句話說,最近正在丟失的事務(LAST-MISSING-TRANSACTION)指的是最后從數據項版本中移出的事務的事務標識。
3)最近正在丟失的改變的序列號(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)最近的并且是由最近正在丟失的事務(LATEST-MISSING-TRANSACTION)產生的正在丟失的改變的序列號。例如,假設最近正在丟失的事務(LATEST-MISSING-TRANSACTION)對于一個特定的數據項做了四次改變,而這四次改變分別與序列號11、25、32、和50相關聯(lián)。如果這些改變中沒有一個被從數據項版本中移出,那么最近正在丟失的改變的序列號(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)被清零。如果所有的改變都被刪除,那么最近正在丟失的改變的序列號(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)被設置成11。
4)其它移出事務指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)如果由不同于最近正在丟失的事務(LATEST-MISSING-TRANSACTION)的事務產生的改變已經被從數據項版本中移出就設置該比特位。
圖1是根據本發(fā)明的實施例示出數據項版本100、更新數據項版本100的事務和為數據項版本100維護的刪除數據信息的框圖。
數據項版本100包括數據106和與它相關聯(lián)的刪除數據信息(removed-data information)。刪除數據信息包括最近包含時間(MOST-RECENT-INCLUSION-TIME)102,最近正在丟失的事務(LATEST-MISSING-TRANSACTION)103,最近正在丟失的改變的序列號(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)104和其它事務移出指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)105。
為了說明如何維護刪除數據信息的各個部分,假設三個事務已經對數據項版本100做了更新。這些事務是TXA 110、TXB 111、和TXC 112。TXA 110在全局系統(tǒng)時間為10的時候提交。TXA 111在全局系統(tǒng)時間為12的時候提交。TXA 112在全局系統(tǒng)時間為14的時候提交。
假設數據項版本100是當前數據項版本,在這種情況下,最近包含時間(MOST-RECENT-INCLUSION-TIME)將是無窮大,最近正在丟失的事務(LATEST-MISSING-TRANSACTION)將是0,而其它移出事務指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)將不被設置,最近正在丟失的改變的序列號(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)也將被清零。
假設為了移出TXC的所有改變,在數據項版本100上執(zhí)行移出。同時假設TXC已經產生了序列號為11、25、32、和50的改變。現在數據項版本100的最近包含時間(MOST-RECENT-INCLUSION-TIME)將是13,即TXC的提交時間減1,最近正在丟失的事務(LATEST-MISSING-TRANSACTION)將是TXB,最近正在丟失的改變的序列號 (SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)將是11,而其它移出事務指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)將被設置,這是因為由TXC所產生的改變已經被從數據項版本中移出。
如果由TXB 111產生的一些但不是全部的改變接著被從數據項版本中移出,一種技術是將最近正在丟失的事務(LATEST-MISSING-TRANSACTION)設置成當前正在讀數據項版本100的事務,將其它移出事務指示符(OTHER-TRANSACTIONS-ROLLED-OUT-INDICATOR)設為YES。最近正在丟失的改變的序列號(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)將被設置成讀者的最后改變的序列號(SEQUENCE-NUMBER-OF-LAST-CHANGE)加1。如果讀者的查詢環(huán)境沒有事務id激活(也就是說,在快照被獲得而事務還沒有產生任何變化的時候),那么最近正在丟失的改變的序列號(SEQUENCE-NUMBER-OF-MOST-RECENT-MISSING-CHANGE)將不會被設置成讀者的最后改變的序列號(SEQUENCE-NUMBER-OF-LAST-CHANGE)加1,因為這樣做沒有任何必要。
如前所述,上面的字段被用來為刪除數據維持信息,因此它們被統(tǒng)一的叫做刪除數據信息。然而,刪除數據信息不足以確定改變是否在一個數據項版本被克隆之后針對該數據項版本做出。
為查詢維護的數據每一個查詢都有一個描述它的執(zhí)行環(huán)境的環(huán)境。根據一個實施例,與每個查詢相關聯(lián)的環(huán)境信息包括如下一些內容1)指示查詢必須看到的快照的時間(TIME-INDICATING-SNAPSHOT-QUERY-MUST-SEE)表示查詢必須看到的數據庫中與快照相關聯(lián)的時間。例如如果一個指示查詢必須看到的快照的時間(TIME-INDICATING-SNAPSHOT-QUERY-MUST-SEE)的值為10,那么這個查詢必須看到在T=10或T=10之前被提交給數據庫的所有改變,而不能看見T=10之后提交給數據庫的任何改變。指示查詢必須看到的快照的時間(TIME-INDICATING-SNAPSHOT-QUERY-MUST-SEE)通常在一個查詢開始的同時就被設置,而且通常被設置成系統(tǒng)全局時間的當前時間。
2)查詢所歸屬的事務(TRANSACTION-THAT-QUERY-BELONGS-TO)如果查詢是事務的一部分,查詢所歸屬的事務(TRANSACTION-THAT-QUERY-BELONGS-TO)識別這個事務,如果查詢不是事務的一部分,那么查詢所歸屬的事務(TRANSACTION-THAT-QUERY-BELONGS-TO)就不被使用。
3)最后改變的序列號(SEQUENCE-NUMBER-OF-LAST-CHANGE)查詢必須看到查詢所歸屬的處理事務所產生的最高改變的序列號。
計算為了有效地識別提供給一個查詢的數據項版本,克隆時間(CLONE-TIME)和最后看到時間戳(LAST-TO-SEE-TIMESTAMP)在系統(tǒng)中被用來維護刪除數據信息和上面描述的查詢環(huán)境信息。
正如以后將更加詳細描述的,這些信息不僅可以用來識別可能使用哪個數據項版本,而且也可以用來識別哪個數據項版本要求最少的轉出(rollout)。這些計算包括與數據項版本相關聯(lián)的刪除數據信息以及與查詢相關聯(lián)的環(huán)境信息。這些計算如下所示1.快照時間<=最近包含時間(MOST-RECENT-INCLUSION-TIME)&&
2.最后看到時間戳(LAST-TO-SEE-TIMESTAMP)<=克隆時間(CLONE-TIME)&&
3.(查詢所歸屬的事務(TRANSACTION-THAT-QUERY-BELONGS-TO)指示沒有用于查詢的事務‖沒有用于克隆的最近正在丟失的事務(LATEST-MISSING-TRANSACTION)‖查詢所歸屬的事務(TRANSACTION-THAT-QUERY-BELONGS-TO)<>最近正在丟失的事務(LATEST-MISSING-TRANSACTION))那么數據項版本可能被使用。
上面的邏輯式中使用的符號如下所示1)“==”等于
2)“<”小于3)“>”大于4)“<>”不等于5)“>=”大于等于6)“<=”小于等于7)&&邏輯與8)‖邏輯或矢量根據一個實施例,提供了矢量信息,以使分布式鎖管理器(Distributed Lock Manager,以后簡稱DLM)能夠確定在滿足查詢需求的數據項版本中哪個是花費最小工作量的最好的候選項。矢量與特定的數據項相關聯(lián),并包括關于那個特定數據項的所有數據項版本的信息。具體而言,這個矢量包括一個集群中所有節(jié)點的節(jié)點標識符列表,它將克隆時間(CLONE-TIME)與每一個節(jié)點上特定數據項的所有數據項版本的這些節(jié)點標識符相關聯(lián)。
例如,參考圖3,用于一個特定數據項的矢量300有三個節(jié)點節(jié)點1 310,節(jié)點2 320,節(jié)點3 330。節(jié)點1 310在它的緩存中包括三個特定數據項版本。這些數據項版本中的每一項都有一個與它們相關聯(lián)的克隆時間(CLONE-TIME)。這個克隆時間(CLONE-TIME)在矢量300中被反映,與節(jié)點1 310相關聯(lián)。具體的說,克隆時間-節(jié)點-矢量的關聯(lián)(clone-time-to-node-to-vector association)311包含克隆時間(CLONE-TIME)1,克隆時間-節(jié)點-矢量的關聯(lián)(clone-time-to-node-to-vector association)312包含克隆時間(CLONE-TIME)3,而克隆時間-節(jié)點-矢量的關聯(lián)(clone-time-to-node-to-vector association)313包含克隆時間(CLONE-TIME)11。
節(jié)點2 320在其緩存中包含一個數據項版本。這個數據項版本的克隆時間(CLONE-TIME)為15,它在矢量300中被反映,與節(jié)點2 320相關聯(lián)??寺r間-節(jié)點-矢量的關聯(lián)(clone-time-to-node-to-vector association)314包含克隆時間(CLONE-TIME)15。
節(jié)點3 330在其緩存中包含兩個數據項版本。這些數據項版本中的每一項都有一個與它們相關聯(lián)的克隆時間(CLONE-TIME)。這個克隆時間(CLONE-TIME)在矢量300中被反映,與節(jié)點2330相關聯(lián)??寺r間-節(jié)點-矢量的關聯(lián)(clone-time-to-node-to-vectorassociation)315包含克隆時間(CLONE-TIME)16,克隆時間-節(jié)點-矢量的關聯(lián)(clone-time-to-node-to-vector association)316包含克隆時間(CLONE-TIME)20。
使用矢量以定位最好候選項包含查詢必須看到的所有數據的數據項版本都是提供給查詢的候選項。當任意候選項將工作時,通常優(yōu)先選擇最好的候選項。一般而言,第一選候選項是比第二候選項要好,否則內務操作(overhead)將不會被要求把第一候選項提供給查詢,而是被要求提供第二候選項。內務處理的一部分包括移走查詢不能看見的變化。一般來說,對于一個候選項,這些需要被移走的變化越少,這個候選項就越好。圖4描述了數據庫系統(tǒng)400,它有三個節(jié)點(節(jié)點1 310,節(jié)點2 320,節(jié)點3 330);以及一個分布式鎖管理器440(如DLM)。每一個節(jié)點都有一個與DLM 440和緩存相關聯(lián)的本地鎖管理器(local lock manager,以后簡稱LLM)。
節(jié)點1 310有緩存411和LLM 441。節(jié)點2 320有緩存421和LLM 442。節(jié)點3 330有緩存431和LLM 443。LLM 441、LLM 442、LLM 443不僅與三個節(jié)點(310、320、330)相關聯(lián),而且也與DLM440相關聯(lián)。
出于說明目的,假設圖3中的矢量300正在被DLM 440使用,其次,假設查詢450正在節(jié)點2 320上執(zhí)行。在節(jié)點2 320上,查詢450有下面的范圍值
在節(jié)點1 310上,數據項版本460在查詢450開始創(chuàng)建數據項版本460之后在緩存411中被克隆。假設下面的值是與數據項版本460相關連的
而且假定移出還沒有被執(zhí)行,那么這些數據項版本的最近包含時間(MOST-RECENT-INCLUSION-TIME)將與在圖3中描述的克隆時間-節(jié)點-矢量(clone-time-to-node-to-vectors)的克隆時間(CLONE-TIME)有相同的值。
根據以上的假設,查詢450將請求DLM 440的數據項。DLM330將檢查該矢量并發(fā)現節(jié)點1 310有一個最近包含時間(MOST-RECENT-INCLUSION-TIME)為11的數據項版本與節(jié)點1相關聯(lián)(參照圖3,在克隆時間-節(jié)點-矢量313中的克隆時間(CLONE-TIME)為11。)。既然這個最近包含時間(MOST-RECENT-INCLUSION-TIME)是所有最近包含時間(MOST-RECENT-INCLUSION-TIME)中與查詢最后看到的時間戳(LAST-TO-SEE-TIMESTAMP)最接近的,DLM 440將轉發(fā)查詢請求給節(jié)點1 310。在節(jié)點1 310上的處理將完成掃描緩存411以發(fā)現最能滿足查詢需求的數據項版本的工作。該處理不假定最近包含時間(MOST-RECENT-INCLUSION-TIME)為11(參考圖3,克隆時間-節(jié)點-矢量313)的數據項版本是最好的選擇,因為在查詢450的請求到達節(jié)點1 310的時候,可能獲得了一個更好的數據項版本。在這個實例中,確實是這種情況。具體地,節(jié)點1 310包含了克隆時間(CLONE-TIME)為10的數據項版本,這是與最后看到時間戳(LAST-TO-SEE-TIMESTAMP)為9的查詢更接近的數據項版本。如計算部分所概括描述的,比較查詢與數據項版本的值的計算被執(zhí)行。基于這些計算,確定一旦執(zhí)行移出,數據項版本460將適合查詢450的要求。最后改變的序列號(SEQUENCE-NUMBER-OF-LAST-CHANGE)的值大于71的改變將被移出,移出的數量將取決于改變的序列號。既然數據項版本460可以被用來滿足查詢450的需要,數據項版本460將被裝載到節(jié)點2 320。
其它應用本發(fā)明除了此處給出的例子以外還有許多應用。例如,此處描述的技術可以在系統(tǒng)中的會話所維護的數據的任何環(huán)境中被使用。該技術也可以被用在任何支持分布式緩存并且需要同步包含分布式緩存的不同的緩存中的數據的多節(jié)點系統(tǒng)。
硬件概述圖5是一個描述了在其上實現了本發(fā)明的具體實施例的計算機系統(tǒng)500的框圖。計算機系統(tǒng)500包括總線502或其它用于傳送信息的通信裝置、以及與總線502連接用于處理信息的處理器503。計算機系統(tǒng)500還包括一主存儲器506,如隨機存取存儲器(RAM)或其它動態(tài)存儲設備,與總線502連接,用于儲存信息和將被處理器503執(zhí)行的指令。主存儲器506也可以被用來儲存臨時變量或在處理器503執(zhí)行指令的過程中產生的中間變量。計算機系統(tǒng)500還包括一只讀存儲器(ROM)508或者其它靜態(tài)存儲設備,連接至總線502,用于儲存靜態(tài)信息和用于處理器503的指令。提供了存儲設備510,例如磁盤或光盤,連接至總線502,用于儲存信息和指令。
計算機系統(tǒng)500可以通過總線502連接至顯示器512(例如陰極射線管(CRT)),用于顯示信息給計算機用戶。一包括字母和數字以及其它鍵的輸入設備513,連接至總線502,用于將信息和指令選擇傳送給處理器503。另一種類型的用戶輸入裝置是指針控制器516,例如鼠標、軌跡球、或者指針指示鍵,用于控制指針在顯示器512上的移動。指針控制器用來傳送指針消息和處理器503的指令選擇。輸入裝置通常具有兩個軸的兩個自由度,一個是第一軸(例如x),一個是第二軸(例如y),這就允許該裝置在平面上確定位置。
本發(fā)明涉及計算機系統(tǒng)500的使用,用于選擇將被提供給事務的數據項的特定版本。根據發(fā)明的一個實施例,響應于執(zhí)行包含在主存儲器506中的一個或多個指令的一個或多個序列的處理器503,計算機系統(tǒng)500執(zhí)行對將被提供給事務的數據項的特定版本的選擇。這些指令可以從另一計算機可讀介質(例如存儲設備510)讀到主存儲器506中。執(zhí)行包含在主存儲器506中的指令序列,使處理器503執(zhí)行此處描述的處理步驟。多個處理裝置中的一個或多個處理器也可能被用來執(zhí)行主存儲器506中所包含的指令序列。在可選實施例中,硬件的有線電路可能被用來代替或與軟件指令結合來實現該發(fā)明。因此,本發(fā)明的實施例不被限制在硬件電路與軟件的任何特定組合中。
在這里用到的術語“計算機可讀介質”指的是參與提供指令給處理器503進行執(zhí)行的任何介質。這樣的介質可能有多種形式,包括非易失性介質、易失性介質、傳輸介質等,但不限于此。非易失性介質舉例來說包括光盤或磁盤,如存儲設備510。易失性介質舉例來說包括動態(tài)存儲器,例如主存儲器506。傳輸介質包括同軸電纜、銅線、或光纖,也包括構成總線502的布線。傳輸介質也可以采用聲波或光波的形式,例如無線電波中產生的聲波和紅外數據通信中的光波。
計算機可讀介質的通常形式舉例來說包括軟盤、軟磁盤、硬盤、磁帶、或其它任何磁性介質、CD-ROM、任何其它光學介質、穿孔卡片、紙帶、任何其它具有孔圖案的物理介質、只讀存儲器(RAM)、可編程只讀存儲器(PROM)、以及可擦寫可編程只讀存儲器(EPROM)、閃存(FLASH-EPROM)、任何其它記憶芯片或記憶棒、下文所述的載波、或者其它任何計算機可以讀取的介質。
計算機可讀介質中的各種形式都可以被用來承載處理器503執(zhí)行的一個或多個指令的一個或多個序列。例如,指令首先裝載到遠端計算機的磁盤上。這臺遠程計算機可能把這些指令加載到其動態(tài)存儲器中,使用調制解調器在電話線上傳送指令。位于計算機系統(tǒng)500上的調制解調器能夠通過電話線接收數據,并使用紅外轉換器把數據轉換成紅外信號。與總線502相連的紅外探測器可以接收紅外信號中攜帶的數據,并把數據放到總線502上去??偩€502把數據加載到主存儲器506中,處理器503再從主存儲器中取回數據并執(zhí)行指令。主存儲器506接收到的指令可能在處理器503執(zhí)行前或執(zhí)行后被有選擇的儲存在存儲設備510上。
計算機系統(tǒng)500還包括一個與總線502相連的通信接口518。通信接口518提供了一種與連接到本地網絡522的網絡鏈接520的雙向數據通信。例如,通信接口518可能是綜合服務數字網(ISDN)卡,或者是調制解調器,它向相應的電話線類型提供數據通信連接。再例如,通信接口518可能是局域網(LAN)卡,提供到兼容的局域網的數據通信連接。也可以實現無線連接。在任何實現方式中,通信接口518都發(fā)送和接收電子信號,電磁信號、或光信號,這些信號承載著代表各種信息的數字數據流。
網絡鏈路520一般通過到其它數據設備的一個或多個網絡提供數據通信。例如,網絡520可以提供通過本地網522至主機523或至由因特網服務提供商(ISP)526操作的數據裝置的連接。ISP 526反過來又通過萬維分組數據通信網絡,現在通常稱為“因特網”528,提供數據通信服務。本地網522和因特網528都使用承載數字數據流的電信號、電磁信號、或光學信號。經過各種網絡的信號、網絡鏈接520上的信號、以及經過通信接口518的信號,承載著送到和來自計算機系統(tǒng)500的數字數據,是傳輸信息的載波的示范形式。
計算機系統(tǒng)500能夠通過網絡、網絡鏈接520、和通信接口518發(fā)送消息和接收數據,包括程序代碼。在因特網實例中,服務器530可以通過因特網528、ISP 526、本地網522、和通信接口518傳送被請求的應用程序代碼。根據該發(fā)明,為了選擇一個數據項的特定版本,提供了一個提供給這里描述的事務的下載應用。
接收到的代碼在被收到時通過處理器503運行,和/或儲存在存儲裝置510中、或者其它非易失存儲器中,用于隨后運行。這樣,計算機系統(tǒng)500可以得到載波形式的應用程序代碼。
結論本文描述的技術有效地確定了哪個數據項版本能夠被提供給查詢。它也可以被用來確定哪個數據項版本將需要最少的工作量,以滿足查詢,方法如下1)使第一新字段和每個克隆相關聯(lián),其中,第一新字段表示數據項版本是最新的時間,2)使第二新字段和每個查詢相關聯(lián),其中,第二新字段表示事務做出的該查詢必須看到的最后的改變,以及3)使用克隆的第一新字段的值和查詢的第二新字段的值,來確定該克隆是否能夠提供給該查詢。
該機制除了以下幾個方面外,已經達到了預定目標1)通過集群中所有的節(jié)點廣播消息,以觸發(fā)數據項的所有非當前的數據項版本的更新或失效,2)獲得鎖,或者3)執(zhí)行過多的移出(rollout)。
因此,該機制能夠提供滿足查詢又花費最少工作量的合適的數據項版本。
權利要求
1.一種用于確定將哪個數據項版本提供給會話的方法,所述方法包括以下計算機實現步驟維護與所述會話相關聯(lián)的最后看到時間戳(LAST-TO-SEE-TIMESTAMP),所述最后看到時間戳指示在所述會話中做出所述會話必須看到的最后改變的時間;用數據項版本維護用來指示數據項版本是當前版本的時間的克隆時間(CLONE-TIME);以及至少部分地根據所述克隆時間(CLONE-TIME)和所述最后看到的時間戳(LAST-TO-SEE-TIMESTAMP)之間的比較來確定被提供給所述會話的數據項版本。
2.根據權利要求1所述的方法,其中所述確定步驟包括根據所述克隆時間(CLONE-TIME)和所述最后看到的時間戳(LAST-TO-SEE-TIMESTAMP)之間的比較,從多個符合被提供給會話的條件的數據項版本中選擇所述數據項版本。
3.根據權利要求1所述的方法,其中在所述會話中執(zhí)行包括查詢的事務;所述最后看到時間戳(LAST-TO-SEE-TIMESTAMP)與所述查詢關聯(lián),所述最后看到時間戳指示事務做出最后改變的時間,所述最后改變是所述查詢必須看到的;以及通過確定將被用來回答查詢的所述數據項版本,來執(zhí)行確定將被提供給所述會話的數據項版本的步驟。
4.根據權利要求1所述的方法,還包括當從當前版本克隆出所述數據項版本時,根據全局時鐘設置所述克隆時間(CLONE-TIME)的步驟。
5.根據權利要求1所述的方法,還包括當從所述非當前數據項版本克隆出所述數據項版本時,根據非當前數據項版本的所述克隆時間(CLONE-TIME)設置所述克隆時間(CLONE-TIME)的步驟。
6.根據權利要求1所述的方法,其中集群中的多個節(jié)點具有用于所述數據項數據項版本,以及所述方法還包括以下步驟為所述多個節(jié)點中的每個節(jié)點維持用于所述數據項的克隆時間(CLONE-TIME)信息;以及根據所述克隆時間(CLONE-TIME)信息選擇發(fā)送用于所述數據項的請求的節(jié)點。
7.根據權利要求6所述的方法,其中所述維持克隆時間(CLONE-TIME)信息的步驟包括為所述數據項維護矢量,所述矢量使節(jié)點與所述克隆時間(CLONE-TIMES)相關聯(lián),其中在所述矢量中與給定節(jié)點相關聯(lián)的克隆時間(CLONE-TIMES)是與駐留在所述給定節(jié)點中的數據項版本相關聯(lián)的克隆時間(CLONE-TIMES)。
8.根據權利要求1所述的方法,其中所述確定步驟包括根據刪除數據信息(removed-data information),確定必須被看到的改變是否已經從所述數據項版本中刪除;以及根據所述克隆時間(CLONE-TIME),確定在創(chuàng)建所述數據項版本之后是否可能對數據項的當前版本做出必須被看見的信息。
9.一種把數據項提供給必須看到數據庫特定快照的查詢的方法,所述方法包括如下步驟為駐留在多個節(jié)點中的多個數據項版本,維持指示當前數據項版本的時間的克隆時間(CLONE-TIME)信息;至少部分地根據所述克隆時間(CLONE-TIME)信息,確定所述多個數據項版本中包含所有改的變數據項版本,所述所有改變必須被所述查詢看到;以及從那些包含必須被所述查詢看到的所有改變的數據項版本中選擇數據項版本,提供給所述查詢。
10.根據權利要求9所述的方法,其中所述確定步驟包括根據與數據項版本相關聯(lián)的克隆時間(CLONE-TIME),確定在所述數據項版本創(chuàng)建之后,是否已經對所述數據項做出必須被所述查詢看到的改變;以及根據與所述數據項版本相關聯(lián)的最近包含時間(MOST-RECENT-INCLUSION-TIME),確定是否已經從所述數據項版本中刪除必須被所述查詢看見的改變。
11.根據權利要求10所述的方法,其中所述選擇步驟包括使用所述克隆時間(CLONE-TIME)信息,來選擇比其它候選項要求更少的將被刪除的改變的候選項。
12.一種承載用于確定將哪個數據項版本提供給會話的指令的計算機可讀介質,所述指令包括用于執(zhí)行以下步驟的指令維持與所述會話相關聯(lián)的最后看到時間戳(LAST-TO-SEE-TIMESTAMP),所述最后看到時間戳指示在所述會話中必須被所述會話看到的最后改變的時間;維持數據項版本的克隆時間(CLONE-TIME),所述克隆時間指示數據項版本是當前版本的時間;以及至少部分地根據所述克隆時間(CLONE-TIME)和最后看到時間戳(LAST-TO-SEE-TIMESTAMP)之間的比較,確定將被提供給所述會話的數據項版本。
13.根據權利要求12所述的計算機可讀介質,其中所述確定步驟包括根據所述克隆時間(CLONE-TIME)和所述最后看到時間戳(LAST-TO-SEE-TIMESTAMP)之間的比較,從符合提供給會話的條件的多個數據項版本中選擇所述數據項版本。
14.根據權利要求12所述的計算機可讀介質,其中在所述會話中執(zhí)行包含查詢的事務;所述最后看到時間戳(LAST-TO-SEE-TIMESTAMP)與所述查詢相關聯(lián),指示由所述查詢必須看到的所述事務做出的最后改變的時間;以及確定將被提供給所述會話的數據項版本的步驟是通過確定將被用來響應所述查詢的數據項版本完成的。
15.根據權利要求12所述的計算機可讀介質,還包括指令,當從當前版本克隆出所述數據項版本時,用于根據全局時鐘,執(zhí)行設置所述克隆時間(CLONE-TIME)的步驟。
16.根據權利要求12所述的計算機可讀介質,還包括指令,用于當從非當前版本克隆出所述數據項版本時,根據非當前數據項版本的克隆時間(CLONE-TIME)執(zhí)行設置所述克隆時間(CLONE-TIME)的步驟。
17.根據權利要求12所述的計算機可讀介質,其中集群中的多個節(jié)點具有用于所述數據項的數據項版本;以及所述計算機可讀介質還包含用于執(zhí)行以下步驟的指令為所述多個節(jié)點中的每個節(jié)點維持用于所述數據項的克隆時間(CLONE-TIME)信息;以及根據所述克隆時間(CLONE-TIME)信息,選擇發(fā)送用于所述數據項的請求的節(jié)點。
18.根據權利要求17所述的計算機可讀介質,其中所述維護克隆時間(CLONE-TIME)信息的步驟包括為所述數據項維持使節(jié)點與克隆時間(CLONE-TIMES)相關聯(lián)的矢量,其中在矢量中與給定節(jié)點相關聯(lián)的所述克隆時間(CLONE-TIMES)是與駐留在所述給定節(jié)點中的數據項版本相關聯(lián)的克隆時間(CLONE-TIMES)。
19.根據權利要求12所述的計算機可讀介質,其中所述確定步驟包括根據刪除數據信息(removed-data information)確定必須被看到的改變是否已經從所述數據項版本中刪除;以及根據所述克隆時間(CLONE-TIME),確定在創(chuàng)建所述數據項版本之后是否可能對數據項的當前版本做出必須被看見的信息。
20.一種承載用于提供數據項給必須看到數據庫特定快照的查詢的指令的計算機可讀介質,所述指令包括用于執(zhí)行以下步驟的指令為駐留在多個節(jié)點中的多個數據項版本維持表明數據項當前版本的當前時間的克隆時間(CLONE-TIME)信息;至少部分地根據所述克隆時間(CLONE-TIME)信息,確定所述多個數據項版本中包含所有改變的數據項版本,所述所有改變必須被所述查詢看到;以及從那些包含必須被所述查詢看見的所有改變的數據項版本中選擇數據項版本,提供給所述查詢。
21.根據權利要求20所述的計算機可讀介質,其中所述確定步驟包括根據與數據項版本相關聯(lián)的克隆時間(CLONE-TIME),確定在所述數據項版本創(chuàng)建后,是否已經對所述數據做出必須被所述查詢看到的改變;以及根據與所述數據項版本相關聯(lián)的最近包含時間(MOST-RECENT-INCLUSION-TIME),確定查詢必須看到的改變是否已經從所述數據項版本中刪除。
22.根據權利要求21所述的計算機可讀介質,其中所述選擇步驟包括使用克隆時間(CLONE-TIME)信息,來選擇比其它候選項要求更少的將被刪除的改變的候選項。
全文摘要
本發(fā)明提供了確定將哪個數據項版本提供給查詢的技術。根據該技術,確定是通過以下步驟實現的將一新字段和每個數據項版本相關聯(lián),這個新字段指示了數據項版本當前的時間;將一新字段和每個查詢相關聯(lián),指示了查詢必須看到的由查詢所歸屬的事務做出的最新改變;以及部分地根據這兩個新字段的值的比較來確定用哪個數據項版本來回答查詢。
文檔編號G06F17/30GK1524239SQ02810761
公開日2004年8月25日 申請日期2002年5月29日 優(yōu)先權日2001年6月1日
發(fā)明者阿米特·加內什, 阿米特 加內什, 班福德, 羅格·班福德 申請人:甲骨文國際公司