亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

用于主存儲(chǔ)器數(shù)據(jù)庫(kù)的高效的多版本鎖定的制作方法

文檔序號(hào):6365832閱讀:84來(lái)源:國(guó)知局
專利名稱:用于主存儲(chǔ)器數(shù)據(jù)庫(kù)的高效的多版本鎖定的制作方法
技術(shù)領(lǐng)域
本發(fā)明涉及數(shù)據(jù)庫(kù)管理,尤其涉及數(shù)據(jù)的并發(fā)控制。
背景技術(shù)
主存儲(chǔ)器正變得足夠的大,從而大部分在線事務(wù)處理數(shù)據(jù)庫(kù)的工作集可被存儲(chǔ)在存儲(chǔ)器中。為存儲(chǔ)器內(nèi)存儲(chǔ)而優(yōu)化的數(shù)據(jù)庫(kù)系統(tǒng)與當(dāng)前系統(tǒng)相比可支持高得多的事務(wù)率。然而,標(biāo)準(zhǔn)并發(fā)控制方法無(wú)法縮放至這樣 的系統(tǒng)可實(shí)現(xiàn)的高事務(wù)率。為存儲(chǔ)器內(nèi)存儲(chǔ)而優(yōu)化且在多核處理器上運(yùn)行的數(shù)據(jù)庫(kù)系統(tǒng)可支持非常高的事務(wù)率和并發(fā)水平。在這樣的環(huán)境中,高效地確保并發(fā)執(zhí)行的事務(wù)之間的隔離變得具有挑戰(zhàn)性。當(dāng)前的數(shù)據(jù)庫(kù)系統(tǒng)通常通過(guò)鎖定來(lái)實(shí)現(xiàn)隔離。然而,傳統(tǒng)的單版本鎖定遭受可縮放性約束,從而使得傳統(tǒng)的鎖定不適用于具有非常高的事務(wù)率的系統(tǒng)。

發(fā)明內(nèi)容
本發(fā)明涉及用于通過(guò)主存儲(chǔ)器數(shù)據(jù)庫(kù)中的高效的多版本鎖定來(lái)實(shí)現(xiàn)并發(fā)控制的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,其中鎖是非阻塞的且事務(wù)的正確排序是由依賴性機(jī)制來(lái)實(shí)施的。在一個(gè)實(shí)施例中,第一事務(wù)將讀取標(biāo)記(也稱為讀取鎖)放置在數(shù)據(jù)庫(kù)中的記錄的一版本上。該讀取標(biāo)記指示第一事務(wù)正讀取該記錄的該版本,但不阻止另一事務(wù)并發(fā)地讀取或更新該記錄。在第一事務(wù)終止之前,第二事務(wù)獲取該記錄的該版本上的寫鎖定。寫鎖定阻止另一事務(wù)更新該記錄的該版本。第二事務(wù)還創(chuàng)建對(duì)該版本的等待依賴性。第二事務(wù)繼續(xù)處理,但等待直到第一事務(wù)終止并移除該版本上的讀取記錄才開(kāi)始它的提交。在另一實(shí)施例中,一個(gè)或多個(gè)第一事務(wù)各自將掃描標(biāo)記放置在散列表中的桶上。第二事務(wù)隨后試圖將記錄的新的版本添加到該桶。第二事務(wù)在檢測(cè)到該桶上的一個(gè)或多個(gè)掃描標(biāo)記之后創(chuàng)建對(duì)該一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)的等待依賴性。第二事務(wù)繼續(xù)處理,但等待直到一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)終止才開(kāi)始它的提交。在另一實(shí)施例中,第一事務(wù)獲取記錄的一版本的寫鎖定。當(dāng)該版本被第一事務(wù)寫鎖定的同時(shí),第二事務(wù)試圖將讀取標(biāo)記放置在該版本上。在確定該版本由第一事務(wù)寫鎖定之后,第二事務(wù)創(chuàng)建針對(duì)第一事務(wù)對(duì)該版本的等待依賴性,并將讀取標(biāo)記放置在該版本上。等待依賴性使得第一事務(wù)等待直到第二事務(wù)終止之后才開(kāi)始它的提交。提供本發(fā)明內(nèi)容以便以簡(jiǎn)化形式介紹將在以下具體實(shí)施方式
中進(jìn)一步描述的一些概念。本發(fā)明內(nèi)容并非旨在標(biāo)識(shí)所要求保護(hù)的主題的關(guān)鍵特征或必要特征,也不旨在用于幫助確定所要求保護(hù)的主題的范圍。本發(fā)明的附加特征和優(yōu)點(diǎn)將在以下描述中敘述,且其一部分根據(jù)本描述將是顯而易見(jiàn)的,或可通過(guò)對(duì)本發(fā)明的實(shí)踐來(lái)獲知。本發(fā)明的特征和優(yōu)點(diǎn)可通過(guò)在所附權(quán)利要求書中特別指出的工具和組合來(lái)實(shí)現(xiàn)和獲得。本發(fā)明的這些和其他特征將通過(guò)以下描述和所附權(quán)利要求書變得更加顯而易見(jiàn),或可通過(guò)對(duì)下文中所述的本發(fā)明的實(shí)踐來(lái)領(lǐng)會(huì)。


為了描述可獲得本發(fā)明的上述和其他優(yōu)點(diǎn)和特征的方式,將通過(guò)參考附圖中示出的本發(fā)明的具體實(shí)施例來(lái)呈現(xiàn)以上簡(jiǎn)要描述的本發(fā)明的更具體描述??梢岳斫?,這些附圖僅描述本發(fā)明的典型實(shí)施例,從而不被認(rèn)為是對(duì)其范圍的限制,本發(fā)明將通過(guò)使用附圖用附加特征和細(xì)節(jié)來(lái)描述和說(shuō)明,在附圖中圖I示出根據(jù)一個(gè)或多個(gè)實(shí)施例的如何設(shè)置版本的時(shí)間戳的示例。
圖2示出根據(jù)一個(gè)或多個(gè)實(shí)施例的表示記錄鎖的示例性數(shù)據(jù)結(jié)構(gòu)。圖3示出根據(jù)一個(gè)或多個(gè)實(shí)施例的表示事務(wù)對(duì)象的示例性數(shù)據(jù)結(jié)構(gòu)。圖4示出根據(jù)一個(gè)或多個(gè)實(shí)施例的表示掃描標(biāo)記的示例性數(shù)據(jù)結(jié)構(gòu)。圖5示出用于當(dāng)事務(wù)獲取對(duì)當(dāng)前向其發(fā)放讀取標(biāo)記的一版本的寫鎖定時(shí)創(chuàng)建對(duì)等待依賴性的方法的流程圖。圖6示出用于當(dāng)事務(wù)將新版本添加到被一個(gè)或多個(gè)其他事務(wù)鎖定的桶時(shí)創(chuàng)建對(duì)等待依賴性的方法的流程圖。圖7示出用于當(dāng)事務(wù)獲取對(duì)已經(jīng)被另一事務(wù)寫鎖定的版本上的讀取標(biāo)記時(shí)創(chuàng)建對(duì)等待依賴性的方法的流程圖。圖8示出根據(jù)一個(gè)或多個(gè)實(shí)施例的表示事務(wù)對(duì)象的示例性數(shù)據(jù)結(jié)構(gòu)。
具體實(shí)施例方式本發(fā)明涉及用于在主存儲(chǔ)器數(shù)據(jù)庫(kù)中實(shí)現(xiàn)多版本并發(fā)控制的方法、系統(tǒng)和計(jì)算機(jī)程序產(chǎn)品,其中鎖是非阻塞的且事務(wù)的正確排序是由依賴性機(jī)制來(lái)實(shí)施的。本發(fā)明還包括可同時(shí)實(shí)現(xiàn)樂(lè)觀和悲觀事務(wù)的多版本并發(fā)控制數(shù)據(jù)庫(kù)的各實(shí)施例。在一個(gè)實(shí)施例中,第一事務(wù)將讀取標(biāo)記放置在數(shù)據(jù)庫(kù)中的記錄的一版本上。該讀取標(biāo)記指示第一事務(wù)正讀取該記錄的該版本,但不阻止另一事務(wù)并發(fā)地讀取或更新該記錄。在第一事務(wù)終止之前,第二事務(wù)獲取該記錄的該版本上的寫鎖定。寫鎖定阻止另一事務(wù)更新該記錄的該版本。第二事務(wù)還創(chuàng)建對(duì)該版本的等待依賴性。第二事務(wù)繼續(xù)處理,但等待直到第一事務(wù)終止并移除其在該版本上的讀取記錄才開(kāi)始它的提交。在另一實(shí)施例中,一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)將掃描標(biāo)記放置在散列表中的桶上。第二事務(wù)隨后試圖將記錄的新的版本添加到該桶。第二事務(wù)在檢測(cè)到該桶上的一個(gè)或多個(gè)掃描標(biāo)記之后創(chuàng)建對(duì)該一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)的等待依賴性。第二事務(wù)繼續(xù)處理,但等待直到一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)終止才開(kāi)始它的提交。在另一實(shí)施例中,第一事務(wù)獲取記錄的一版本的寫鎖定。當(dāng)該版本被第一事務(wù)寫鎖定的同時(shí),第二事務(wù)試圖將讀取標(biāo)記放置在該版本上。在確定該版本由第一事務(wù)寫鎖定之后,第二事務(wù)創(chuàng)建針對(duì)第一事務(wù)的對(duì)該版本的等待依賴性,并將讀取標(biāo)記放置在該版本上。等待依賴性使得第一事務(wù)等待直到第二事務(wù)終止之后才開(kāi)始它的提交。本發(fā)明的各實(shí)施例可包括或利用專用或通用計(jì)算機(jī),該專用或通用計(jì)算機(jī)包括諸如例如一個(gè)或多個(gè)處理器和系統(tǒng)存儲(chǔ)器等計(jì)算機(jī)硬件,如以下更詳細(xì)討論的。本發(fā)明范圍內(nèi)的各實(shí)施例還包括用于承載或存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令和/或數(shù)據(jù)結(jié)構(gòu)的物理和其他計(jì)算機(jī)可讀介質(zhì)。這樣的計(jì)算機(jī)可讀介質(zhì)可以是可由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的任何可用介質(zhì)。存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是物體計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)。承載計(jì)算機(jī)可執(zhí)行指令的計(jì)算機(jī)可讀介質(zhì)是傳輸介質(zhì)。由此,作為示例而非限制,本發(fā)明的各實(shí)施例可包括至少兩種顯著不同的計(jì)算機(jī)可讀介質(zhì)計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)和傳輸介質(zhì)。計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)包括RAM、ROM、EEPROM、CD-ROM、DVD或其他光盤存儲(chǔ)、磁盤存儲(chǔ)或其他磁存儲(chǔ)設(shè)備、或 可用于存儲(chǔ)計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置(軟件)且可由通用或?qū)S糜?jì)算機(jī)中的一個(gè)或多個(gè)處理器訪問(wèn)并執(zhí)行以實(shí)現(xiàn)本發(fā)明的各方面的任何其他介質(zhì),以使得它們不僅僅是瞬態(tài)載波或傳播信號(hào)。“網(wǎng)絡(luò)”被定義為允許在計(jì)算機(jī)和/或模塊和/或其他電子設(shè)備之間傳輸電子數(shù)據(jù)的一個(gè)或多個(gè)數(shù)據(jù)鏈路。當(dāng)信息通過(guò)網(wǎng)絡(luò)或另一個(gè)通信連接(硬連線、無(wú)線、或者硬連線或無(wú)線的組合)傳輸或提供給計(jì)算機(jī)時(shí),該計(jì)算機(jī)將該連接適當(dāng)?shù)匾暈閭鬏斀橘|(zhì)。傳輸介質(zhì)可包括可用于攜帶計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的所需程序代碼裝置且可由通用或?qū)S糜?jì)算機(jī)訪問(wèn)的網(wǎng)絡(luò)和/或數(shù)據(jù)鏈路。上述的組合也應(yīng)被包括在計(jì)算機(jī)可讀介質(zhì)的范圍內(nèi)。此外,在到達(dá)各種計(jì)算機(jī)系統(tǒng)組件之后,計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)形式的程序代碼裝置可從傳輸介質(zhì)自動(dòng)轉(zhuǎn)移到計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)(或者相反)。例如,通過(guò)網(wǎng)絡(luò)或數(shù)據(jù)鏈路接收到的計(jì)算機(jī)可執(zhí)行指令或數(shù)據(jù)結(jié)構(gòu)可被緩存在網(wǎng)絡(luò)接口模塊(例如,“NIC”)內(nèi)的RAM中,然后最終被傳送到計(jì)算機(jī)系統(tǒng)RAM和/或計(jì)算機(jī)系統(tǒng)處的較不易失性的計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)。因而,應(yīng)當(dāng)理解,計(jì)算機(jī)存儲(chǔ)介質(zhì)(設(shè)備)可被包括在同樣(或甚至主要)利用傳輸介質(zhì)的計(jì)算機(jī)組件中。計(jì)算機(jī)可執(zhí)行指令例如包括,當(dāng)在一個(gè)或多個(gè)處理器處執(zhí)行時(shí)使通用計(jì)算機(jī)、專用計(jì)算機(jī)、或?qū)S锰幚碓O(shè)備執(zhí)行某一功能或某組功能的指令和數(shù)據(jù)。計(jì)算機(jī)可執(zhí)行指令可以是例如二進(jìn)制代碼、諸如匯編語(yǔ)言之類的中間格式指令、或甚至源代碼。盡管用結(jié)構(gòu)特征和/或方法動(dòng)作專用的語(yǔ)言描述了本主題,但可以理解,所附權(quán)利要求書中定義的主題不必限于上述特征或動(dòng)作。相反,上述特征和動(dòng)作是作為實(shí)現(xiàn)權(quán)利要求的示例形式而公開(kāi)的。本領(lǐng)域的技術(shù)人員將理解,本發(fā)明可以在具有許多類型的計(jì)算機(jī)配置的網(wǎng)絡(luò)計(jì)算環(huán)境中實(shí)踐,這些計(jì)算機(jī)系統(tǒng)配置包括個(gè)人計(jì)算機(jī)、臺(tái)式計(jì)算機(jī)、膝上型計(jì)算機(jī)、消息處理器、手持式設(shè)備、多處理器系統(tǒng)、基于微處理器的或可編程消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型計(jì)算機(jī)、大型計(jì)算機(jī)、移動(dòng)電話、PDA、尋呼機(jī)、路由器、交換機(jī)等等。本發(fā)明也可以在通過(guò)網(wǎng)絡(luò)鏈接(或者通過(guò)硬連線數(shù)據(jù)鏈路、無(wú)線數(shù)據(jù)鏈路,或者通過(guò)硬連線和無(wú)線數(shù)據(jù)鏈路的組合)的本地和遠(yuǎn)程計(jì)算機(jī)兩者都執(zhí)行任務(wù)的分布式系統(tǒng)環(huán)境中實(shí)踐。在分布式系統(tǒng)環(huán)境中,程序模塊可位于本地和遠(yuǎn)程存儲(chǔ)器存儲(chǔ)設(shè)備中。在討論使用悲觀事務(wù)來(lái)實(shí)現(xiàn)本發(fā)明的多版本并發(fā)控制方案之前,將描述可在本發(fā)明中使用的示例性多版本并發(fā)控制方案的各基本概念。在這一示例性多版本并發(fā)控制方案中,事務(wù)被給予分別指示事務(wù)的開(kāi)始和結(jié)束事件的邏輯時(shí)間的兩個(gè)唯一的時(shí)間戳。這些時(shí)間戳用于定義事務(wù)事件之間的總體順序。時(shí)間戳,如此處所使用的,可以是從單調(diào)遞增計(jì)數(shù)器接收的值,且不限于時(shí)鐘值。例如,當(dāng)事務(wù)開(kāi)始時(shí),它可通過(guò)讀取并遞增時(shí)間戳計(jì)數(shù)器來(lái)接收時(shí)間戳。該開(kāi)始時(shí)間戳唯一地標(biāo)識(shí)了該事務(wù)并因此在某些實(shí)施例中可充當(dāng)事務(wù)id。當(dāng)事務(wù)終止時(shí),它還可通過(guò)讀取時(shí)間戳計(jì)數(shù)器并遞增該計(jì)數(shù)器來(lái)接收結(jié)束時(shí)間戳。如果事務(wù)通過(guò)提交而終止,則這一結(jié)束時(shí)間戳還可充當(dāng)其提交時(shí)間戳。時(shí)間戳的這一使用使得多版本化方案能夠保留并發(fā)事務(wù)之間的可串行化。主存儲(chǔ)器數(shù)據(jù)庫(kù)中的記錄被版本化以允許多個(gè)事務(wù)的并發(fā)訪問(wèn)。時(shí)間戳還用于標(biāo)識(shí)記錄的各版本以及它們的有效時(shí)間。例如,記錄的提交版本包含兩個(gè)時(shí)間戳,開(kāi)始時(shí)間戳和結(jié)束時(shí)間戳。提交版本的開(kāi)始時(shí) 間戳等于創(chuàng)建該版本的事務(wù)的提交時(shí)間。例如,如果事務(wù)Tl在其處理期間創(chuàng)建記錄的一版本(諸如通過(guò)修改現(xiàn)有的記錄或創(chuàng)建新的記錄),則所創(chuàng)建的版本將接收與事務(wù)Tl的提交時(shí)間戳相同的開(kāi)始時(shí)間戳。版本的結(jié)束時(shí)間戳最初被設(shè)為指示該時(shí)間戳尚未確定的值,諸如無(wú)窮大。然而,當(dāng)另一事務(wù)T2提交對(duì)該版本的修改時(shí)(無(wú)論是對(duì)該版本的更新(因此創(chuàng)建新的版本)、還是對(duì)該版本的刪除),該版本的結(jié)束時(shí)間戳被設(shè)為事務(wù)T2的提交時(shí)間戳。換言之,一旦T2提交(并因此使得它的該記錄的新版本或?qū)υ撚涗浀膭h除是持久的),該記錄的前一版本就不再有效。在T2提交之前,該版本的結(jié)束時(shí)間戳被設(shè)為T2的事務(wù)ID,因?yàn)門2的提交時(shí)間尚未可知。出于相同原因,這一相同的事務(wù)ID最初還用作新版本的開(kāi)始時(shí)間戳。因此,當(dāng)事務(wù)創(chuàng)建新版本時(shí),它將其事務(wù)ID分配給正被修改的版本的結(jié)束時(shí)間戳和新版本的開(kāi)始時(shí)間戳。一旦T2提交,它寫入其提交時(shí)間戳作為舊版本的結(jié)束時(shí)間戳以及作為新版本的開(kāi)始時(shí)間戳。為對(duì)包含有效時(shí)間戳的版本以及具有臨時(shí)事務(wù)ID被分配為其時(shí)間戳的版本之間進(jìn)行區(qū)分,可以使用標(biāo)志。圖I示出版本V2的示例性生存期以及如何設(shè)置其時(shí)間戳。在時(shí)間tl,事務(wù)Tl通過(guò)更新在先版本來(lái)創(chuàng)建版本V2。Tl將V2的開(kāi)始時(shí)間戳設(shè)為其自己的事務(wù)ID而將V2的結(jié)束時(shí)間戳設(shè)為諸如無(wú)窮大之類的值以指示該結(jié)束時(shí)間戳是尚未確定的。因?yàn)閂2的開(kāi)始時(shí)間戳被設(shè)為Tl的事務(wù)ID,其他事務(wù)可發(fā)現(xiàn)Tl的事務(wù)對(duì)象并因此確定Tl的狀態(tài)。Tl還將版本Vl (被更新以創(chuàng)建V2的版本)的結(jié)束時(shí)間戳設(shè)為Tl的事務(wù)ID,以向其他事務(wù)指示Vl已被更新且被寫鎖定。在時(shí)間t2,Tl預(yù)先提交。預(yù)先提交涉及在提交之前Tl獲得結(jié)束時(shí)間戳并進(jìn)入有效階段。這一時(shí)間t2是V2的有效時(shí)間的開(kāi)始。然而,因?yàn)門l尚未提交并仍然可能中止,所以V2的存在性仍然存疑。因此,V2的開(kāi)始時(shí)間戳保留為Tl的事務(wù)ID。在時(shí)間t3,Tl完成有效階段并提交。在時(shí)間t4,Tl隨后將V2的開(kāi)始時(shí)間戳從其事務(wù)ID更新為其結(jié)束時(shí)間戳t2。因此,V2的開(kāi)始時(shí)間戳指示Tl 一提交(這使得V2變得持久)V2的開(kāi)始時(shí)間戳就變得有效(從其他事務(wù)的角度)。V2的開(kāi)始和結(jié)束時(shí)間戳此時(shí)分別是t2和無(wú)窮大。同時(shí),Tl還將Vl的結(jié)束時(shí)間戳更新為t2(未在圖中示出),它指示Vl的有效時(shí)間在t2結(jié)束。在稍后的某一時(shí)間t5,事務(wù)T2更新V2以創(chuàng)建新版本V3。T2采取與如上所述的Tl作出的用于設(shè)置V2和Vl的時(shí)間戳類似的步驟來(lái)設(shè)置V2和V3的時(shí)間戳。例如,T2將V2的結(jié)束時(shí)間戳設(shè)為T2的事務(wù)ID。在時(shí)間t6,T2預(yù)先提交并接收t6作為其結(jié)束時(shí)間戳。如果T2繼續(xù)提交,則t6將是V2的有效時(shí)間的結(jié)束。一旦提交,T2就將V2的結(jié)束時(shí)間戳設(shè)為t6。為概括以上示例,V2的開(kāi)始時(shí)間戳采用了兩個(gè)值。首先,它在被創(chuàng)建時(shí)用Tl的事務(wù)ID來(lái)初始化,且隨后一旦Tl提交就被設(shè)為Tl的結(jié)束時(shí)間戳。這指示一旦Tl作出的改變是持久的則V2就變得有效。相反,V2的結(jié)束時(shí)間戳采用了三個(gè)值。首先,它被初始化為無(wú)窮大,隨后被設(shè)為T2的事務(wù) ID,最后一旦T2提交它就被設(shè)為T2的結(jié)束時(shí)間戳。這指示一旦在T2提交時(shí)V3 (由T2創(chuàng)建)變得持久,V2就不再有效。并發(fā)運(yùn)行的事務(wù)可互相干擾從而產(chǎn)生不正確的結(jié)果。如果并發(fā)控制技術(shù)依賴于搶先地阻止這樣的有害干擾使其從不發(fā)生,則這種并發(fā)控制技術(shù)被稱為悲觀的。這通常使用鎖定來(lái)實(shí)現(xiàn)。另一方面,樂(lè)觀并發(fā)控制技術(shù)不試圖搶先地試圖阻止干擾,相反依賴于在允許事務(wù)提交之前確認(rèn)沒(méi)有發(fā)生有害干擾。類似地,取決于事務(wù)所依賴的并發(fā)控制技術(shù)的類型,事務(wù)被稱為悲觀的或樂(lè)觀的。本發(fā)明允許悲觀事務(wù)和樂(lè)觀事務(wù)共存。悲觀事務(wù)使用讀取標(biāo)記、掃描標(biāo)記和寫鎖定來(lái)實(shí)現(xiàn)本發(fā)明的多版本并發(fā)控制方案。悲觀事務(wù)通過(guò)放置標(biāo)記來(lái)阻止其讀取變得無(wú)效。在本發(fā)明中,可使用兩種不同類型的標(biāo)記來(lái)實(shí)現(xiàn)悲觀事務(wù)讀取標(biāo)記和掃描標(biāo)記。讀取標(biāo)記被放置在各版本上以確保讀取穩(wěn)定性,而掃描標(biāo)記被放置在各桶上以阻止幻影(phantom)。桶可以指代散列索引,然而本發(fā)明不限于使用散列索引的數(shù)據(jù)庫(kù);掃描標(biāo)記可等價(jià)地適用于經(jīng)排序的索引等。事務(wù)在開(kāi)始對(duì)桶中的記錄的掃描之前將掃描標(biāo)記放置在散列表桶上。這不阻止新的記錄被添加到該桶,但直到掃描標(biāo)記被移除才可提交新的版本。如果經(jīng)排序的索引由樹(shù)結(jié)構(gòu)來(lái)實(shí)現(xiàn),則節(jié)點(diǎn)上的掃描標(biāo)記保護(hù)以該節(jié)點(diǎn)為根的子樹(shù)。同樣,如果經(jīng)排序的索引由跳過(guò)列表來(lái)實(shí)現(xiàn),則塔上的掃描標(biāo)記保護(hù)從該塔到同一高度的下一塔的范圍。當(dāng)在事務(wù)開(kāi)始時(shí)由查詢返回的版本集與在事務(wù)結(jié)束時(shí)由同一查詢返回的版本集不同時(shí)發(fā)生幻影。事務(wù)通過(guò)遞增版本V的讀取標(biāo)記計(jì)數(shù)來(lái)將讀取標(biāo)記放置在版本V上。在某些實(shí)施例中,版本可被限于讀取標(biāo)記的最大數(shù),并且還可包括一標(biāo)志以阻止任何其他讀取標(biāo)記被放置。因此,在任何給定時(shí)間,版本可具有多個(gè)讀取標(biāo)記。相反,版本在任何給定時(shí)間只可具有單個(gè)與鎖定。圖2示出根據(jù)本發(fā)明的某些實(shí)施例的表示讀取標(biāo)記的示例性數(shù)據(jù)結(jié)構(gòu)200。如上所述,每一版本包含結(jié)束時(shí)間戳字段201a,它可包含時(shí)間戳。圖2還描述了本發(fā)明可如何使用這一字段來(lái)記錄讀取標(biāo)記。如圖2所示,為使得能夠?qū)⒔Y(jié)束時(shí)間戳字段201a用于時(shí)間戳以及讀取標(biāo)記兩者,第一位被指派為內(nèi)容類型位,它定義了該字段包含的內(nèi)容的類型。在圖2所示的示例性數(shù)據(jù)結(jié)構(gòu)中,該字段的第一位被定義為這種內(nèi)容類型位。當(dāng)內(nèi)容類型位被設(shè)為第一值(例如O)時(shí),該字段的其余63位是時(shí)間戳字段201a,如上所述。然而,當(dāng)內(nèi)容類型位被設(shè)為第二值(例如I)時(shí),該字段的其余63位被不同地解釋。例如,如圖2所示,63位可在不再有讀取標(biāo)記標(biāo)志202a、讀取標(biāo)記計(jì)數(shù)202b和寫鎖定字段202c之間劃分。不再有讀取標(biāo)記標(biāo)志202a可被設(shè)為阻止任何進(jìn)一步的讀取標(biāo)志被放置在該版本上。讀取標(biāo)記計(jì)數(shù)202b記錄該版本上的讀取標(biāo)記的當(dāng)前數(shù)量。寫鎖定字段202c包含持有該版本上的寫鎖定的事務(wù)(如果有的話)的事務(wù)ID,或者如果該版本如上所述并未被鎖定則為無(wú)窮大。使用圖2的示例性數(shù)據(jù)結(jié)構(gòu),事務(wù)可通過(guò)將其事務(wù)ID寫入版本的寫鎖定字段202c來(lái)對(duì)該版本寫鎖定。類似地,事務(wù)可通過(guò)遞增版本的讀取標(biāo)記計(jì)數(shù)202b來(lái)將讀取標(biāo)記放置在該版本上。本發(fā)明中的讀取標(biāo)記與典型的數(shù)據(jù)庫(kù)實(shí)現(xiàn)中的讀鎖定不同,因?yàn)榘姹旧系淖x取標(biāo)記不阻止另一事務(wù)更新該版本,如現(xiàn)在將進(jìn)一步描述的。
在數(shù)據(jù)庫(kù)的傳統(tǒng)鎖 定實(shí)現(xiàn)中,當(dāng)事務(wù)試圖更新被讀鎖定的版本時(shí),它將被迫阻塞。相反,在本發(fā)明中,如果一個(gè)或多個(gè)事務(wù)已經(jīng)將讀取標(biāo)記放置在版本上,則另一事務(wù)可對(duì)該版本寫鎖定以更新該版本。換言之,作出更新的事務(wù)不會(huì)被迫阻塞直到讀取標(biāo)記被移除。作出更新的事務(wù)可繼續(xù)處理,包括更新該版本,然而,作出更新的事務(wù)直到該版本上的所有讀取標(biāo)記都被移除之后才可提交。類似地,在本發(fā)明中,如果一版本被一個(gè)事務(wù)寫鎖定,則另一事務(wù)可并發(fā)地將讀取標(biāo)記放置在該版本上。在這一場(chǎng)景中,作出更新的事務(wù)(具有寫鎖定的事務(wù))直到該讀取標(biāo)記被移除之后才可提交。讀取標(biāo)記可通過(guò)進(jìn)行讀取的事務(wù)或提交或中止來(lái)移除。由此,在上述場(chǎng)景中的每一個(gè)場(chǎng)景中,作出更新的事務(wù)被迫等待直到該版本上的所有讀取標(biāo)記都被移除之后才提交,無(wú)論作出更新的事務(wù)是在一個(gè)或多個(gè)讀取標(biāo)記被放置之前還是之后對(duì)該版本進(jìn)行寫鎖定。類似的規(guī)則適用于掃描標(biāo)記。例如,如果第一事務(wù)在桶上放置了掃描標(biāo)記,則第二事務(wù)被允許將新的版本插入到該桶中。然而,第二事務(wù)不被允許提交,直到第一事務(wù)移除其在該桶上的掃描標(biāo)記。為了在使用這些方案時(shí)便于正確的串行化,本發(fā)明實(shí)現(xiàn)等待依賴性。等待依賴性迫使更新事務(wù)在它可獲取結(jié)束時(shí)間戳并開(kāi)始提交處理之前進(jìn)行等待。為實(shí)現(xiàn)這些等待依賴性,事務(wù)跟蹤它的傳入和傳出的等待依賴性。傳入依賴性是事務(wù)對(duì)其進(jìn)行等待的依賴性,而如果某一其他事務(wù)等待一事務(wù)完成,則該事務(wù)具有傳出依賴性。如圖3所示,每一事務(wù)包括要跟蹤依賴性的字段。該字段可被包含在事務(wù)對(duì)象中,如圖3所示,或者位于其他位置。對(duì)于傳入等待依賴性,可維護(hù)兩個(gè)字段等待計(jì)數(shù)301以及對(duì)不再有等待依賴性標(biāo)志302。等待計(jì)數(shù)301指示一事務(wù)正在等待多少傳入等待依賴性。不再有等待依賴性標(biāo)志302可被設(shè)為阻止任何更多的傳入依賴性的創(chuàng)建。例如,這一標(biāo)志可用于阻止持續(xù)地添加新的傳入依賴性而導(dǎo)致的資源缺乏(starvation)。對(duì)于傳出等待依賴性,維護(hù)等待事務(wù)列表303。這一列表包含等待該事務(wù)完成的任何其他事務(wù)的事務(wù)ID。下面的段落描述圖2和3中示出的兩個(gè)示例性數(shù)據(jù)結(jié)構(gòu)可如何用于利用本發(fā)明的多版本并發(fā)控制方案來(lái)實(shí)現(xiàn)等待依賴性。當(dāng)事務(wù)TU更新版本V時(shí),它通過(guò)將其事務(wù)ID復(fù)制到V的寫鎖定字段202c來(lái)獲得V上的寫鎖定。如果V的讀取標(biāo)記計(jì)數(shù)202b大于0,則TU通過(guò)遞增TU的等待計(jì)數(shù)301來(lái)采取對(duì)V的等待依賴性。在該示例中,可以這么認(rèn)為,TU創(chuàng)建了自己的等待依賴性。TU也可以用另一方式來(lái)獲得等待依賴性。如果TU獲得V上的寫鎖定而V的讀取標(biāo)記計(jì)數(shù)202b是0,則TU最初將不會(huì)取得對(duì)V的等待依賴性。當(dāng)V被TU鎖定的同時(shí),另一事務(wù)TR可能試圖將讀取標(biāo)記放置在V上。TR將檢測(cè)到V的讀取標(biāo)記計(jì)數(shù)202b是0,但V被寫鎖定。TR隨后讀取TU的不再有等待依賴性標(biāo)志302,以確定TU是否將允許創(chuàng)建等待依賴性。如果TU的不再有等待依賴性標(biāo)志302未設(shè)置,則TR通過(guò)遞增V的讀取標(biāo)記計(jì)數(shù)來(lái)將讀取標(biāo)記放置在V上,并通過(guò)遞增TU的等待計(jì)數(shù)301來(lái)給予TU對(duì)V的等待依賴性。出于這一原因,可以這么認(rèn)為,在該示例中TR給了 TU等待依賴性。為移除版本V上的讀取標(biāo)記,事務(wù)TR取決于各種因素而執(zhí)行不同的步驟,該各種因素包括V是否具有尚待解決的讀取標(biāo)記以及另一事務(wù)TU是否對(duì)V具有寫鎖定。在第一場(chǎng)景中,如果V未被寫鎖定,TR簡(jiǎn)單地遞減V的讀取標(biāo)記計(jì)數(shù)202b并繼續(xù)。在第二場(chǎng)景中,如果V被寫鎖定,但一個(gè)或多個(gè)其他事務(wù)已經(jīng)將讀取標(biāo)記放置在V上(即,V的讀取標(biāo)記計(jì)數(shù)大于I),則TR同樣簡(jiǎn)單地遞減V的讀取標(biāo)記計(jì)數(shù)202b并繼續(xù)。
然而,在第三場(chǎng)景中,如果V被寫鎖定且V的讀取標(biāo)記計(jì)數(shù)等于I (這意味著TR是具有V上的讀取標(biāo)記的唯一事務(wù)),則TR打算移除V上的最后一個(gè)讀取標(biāo)記。在該第三場(chǎng)景中,TR必須釋放TU對(duì)V的等待依賴性。為此,TR將V的讀取標(biāo)記計(jì)數(shù)202b設(shè)為O并將V的不再有讀取標(biāo)記標(biāo)志202a設(shè)為真,因而阻止在V上獲得任何其他讀取標(biāo)記。隨后,TR(通過(guò)讀取V的寫鎖定字段202c中的它的事務(wù)ID)來(lái)定位TU并遞減TU的等待計(jì)數(shù)301。在釋放TU對(duì)V的等待依賴性之前將V的不再有讀取標(biāo)記標(biāo)志202a設(shè)為真,以確保在TU提交V的更新版本之前沒(méi)有其他事務(wù)將讀取標(biāo)記放置在V上。這是必要的,因?yàn)橐坏㏕U對(duì)等待依賴性被移除,TU就可以繼續(xù)提交。因此,通過(guò)由TU所創(chuàng)建的更新的版本V’來(lái)代替V,V將變得無(wú)效。圖4示出在本發(fā)明的某些實(shí)施例中的用于實(shí)現(xiàn)掃描標(biāo)記的示例性數(shù)據(jù)結(jié)構(gòu)400。同掃描標(biāo)記有關(guān)的等待依賴性與同讀取標(biāo)記有關(guān)的等待依賴性類似地運(yùn)作。事務(wù)TR通過(guò)遞增桶B的標(biāo)記計(jì)數(shù)401并將其事務(wù)ID添加到B的標(biāo)記列表402來(lái)將掃描標(biāo)記放置在桶B上。掃描標(biāo)記的目的不是阻止版本被添加到桶,而是相反的,阻止在掃描標(biāo)記在原位的同時(shí)所添加的任何版本在其處理期間變得對(duì)TR可見(jiàn)。換言之,另一事務(wù)TU可向B添加版本,但TU直到TR移除了它在B上的標(biāo)記之后才能提交。這通過(guò)TU獲得對(duì)TR的等待依賴性來(lái)實(shí)施。注意,在該掃描標(biāo)記場(chǎng)景中,這一規(guī)范指的是對(duì)另一事務(wù)的等待依賴性,而在記錄鎖定場(chǎng)景中,這一規(guī)范指的是對(duì)版本的等待依賴性。這是為了區(qū)分在掃描標(biāo)記場(chǎng)景中等待依賴性取決于釋放其掃描標(biāo)記的一個(gè)或多個(gè)事務(wù)(即,多個(gè)版本上的標(biāo)記而非如在讀取標(biāo)記場(chǎng)景中的單個(gè)版本上的標(biāo)記)。事務(wù)TU可通過(guò)兩種方式來(lái)獲取由掃描標(biāo)記引起的等待依賴性。第一,如果TU正試圖將新的版本V添加到具有一個(gè)或多個(gè)掃描標(biāo)記的桶B,TU取得對(duì)B的標(biāo)記列表402中列出的每一事務(wù)(即,具有B上的掃描標(biāo)記的每一事務(wù))的等待依賴性。為此,TU將它自己的事務(wù)ID添加到B的標(biāo)記列表402中列出的每一事務(wù)的等待事務(wù)列表303。TU還為B的標(biāo)記列表402中列出的每一事務(wù)遞增它自己的等待計(jì)數(shù)301。第二,如果事務(wù)TR掃描桶B并發(fā)現(xiàn)版本V,該版本V滿足TR的搜索謂詞但因?yàn)閂被仍然活動(dòng)的事務(wù)TU寫鎖定而對(duì)TR不可見(jiàn),則TR通過(guò)將TU的事務(wù)ID添加到TR的等待事務(wù)列表303并遞增TU的等待計(jì)數(shù)301來(lái)為TU注冊(cè)對(duì)TR的等待依賴性。創(chuàng)建此類等待依賴性以阻止TU在TR之前提交,TU在TR之前提交會(huì)使得V變成TR的幻影。圖5示出用于在主存儲(chǔ)器數(shù)據(jù)庫(kù)的多版本并發(fā)控制方案中創(chuàng)建等待依賴性的方法500的流程圖。方法500將參照?qǐng)D2和3中的示例性數(shù)據(jù)結(jié)構(gòu)來(lái)描述。在方法500中,第一事務(wù)將讀取標(biāo)記放置在數(shù)據(jù)庫(kù)中的記錄的一版本上(動(dòng)作501)。該讀取標(biāo)記指示第一事務(wù)正讀取該記錄的該版本,但不阻止另一事務(wù)并發(fā)地讀取或更新該記錄。例如,第一事務(wù)可通過(guò)遞增該版本的讀取標(biāo)記計(jì)數(shù)202b來(lái)獲取讀取標(biāo)記。在第一事務(wù)終止之前,第二事務(wù)獲取該記錄的該版本上的寫鎖定(動(dòng)作502)。寫鎖定阻止另一事務(wù)更新該記錄的該版本。例如,第二事務(wù)可通過(guò)將其事務(wù)ID寫入該版本的寫鎖定字段202c來(lái)獲取寫鎖定。第二事務(wù)還創(chuàng)建對(duì)該版本的等待依賴性(動(dòng)作503)。例如,第二事務(wù)可遞增其等待計(jì)數(shù)301,等待計(jì)數(shù)301可被存儲(chǔ)在其事務(wù)對(duì)象中。第二事務(wù)繼續(xù)處理,但等待直到第一事務(wù)終止并移除該版本上的讀取記錄才進(jìn)行提交(動(dòng)作504)。
方法500還可包括,第二事務(wù)在創(chuàng)建等待依賴性之前,通過(guò)讀取版本的讀取標(biāo)記計(jì)數(shù)202b并確定該讀取標(biāo)記計(jì)數(shù)202b大于O來(lái)確定該版本具有尚待解決的讀取標(biāo)記。在某些實(shí)施例中,方法500還可包括,第一事務(wù)確定其讀取標(biāo)記是該版本上的最后一個(gè)讀取標(biāo)記(諸如通過(guò)確定在第一事務(wù)終止之前該版本的讀取標(biāo)記計(jì)數(shù)202b等于I)。該方法還包括,第一事務(wù)遞減該版本的讀取標(biāo)記計(jì)數(shù)202b,設(shè)置該版本的不再有讀取標(biāo)記標(biāo)志202a以及遞減第二事務(wù)的等待計(jì)數(shù)301。第一事務(wù)可通過(guò)讀取該版本的寫鎖定字段202c中的第二事務(wù)的事務(wù)ID來(lái)標(biāo)識(shí)第二事務(wù)。在其他實(shí)施例中,方法500還可包括,第一事務(wù)確定一個(gè)或多個(gè)其他讀取標(biāo)記已經(jīng)被放置在該版本上,并且第一事務(wù)通過(guò)遞減該版本的讀取標(biāo)記計(jì)數(shù)202b來(lái)移除其讀取標(biāo)記。在某些實(shí)施例中,該版本的不再有讀取標(biāo)記標(biāo)志202a、讀取標(biāo)記計(jì)數(shù)202b和寫鎖定字段202c被存儲(chǔ)在該版本中。圖6示出用于當(dāng)事務(wù)將新版本添加到具有一個(gè)或多個(gè)掃描標(biāo)記的桶時(shí)創(chuàng)建等待依賴性的方法600的流程圖。方法600將參照?qǐng)D3和4中的示例性數(shù)據(jù)結(jié)構(gòu)來(lái)描述。在方法600中,一個(gè)或多個(gè)第一事務(wù)將掃描標(biāo)記放置在桶上(動(dòng)作601)。例如,一個(gè)或多個(gè)第一事務(wù)通過(guò)遞增標(biāo)記計(jì)數(shù)401并將它們的事務(wù)ID添加到標(biāo)記列表402來(lái)放置掃描標(biāo)記。第二事務(wù)隨后試圖將記錄的新的版本添加到該桶(動(dòng)作602)。第二事務(wù)在檢測(cè)到該桶上的一個(gè)或多個(gè)掃描標(biāo)記之后創(chuàng)建對(duì)該一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)的等待依賴性(動(dòng)作603)。例如,第二事務(wù)可通過(guò)讀取該桶的標(biāo)記計(jì)數(shù)401來(lái)檢測(cè)該桶上的一個(gè)或多個(gè)標(biāo)記。第二事務(wù)隨后可通過(guò)將其事務(wù)ID添加到鎖定列表402中列出的每一事務(wù)的等待事務(wù)列表303來(lái)創(chuàng)建一個(gè)或多個(gè)等待依賴性。第二事務(wù)繼續(xù)處理,但等待直到一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)終止才進(jìn)行提交(動(dòng)作604)。例如,在終止時(shí),一個(gè)或多個(gè)第一事務(wù)中的每一個(gè)都可遞增第二事務(wù)的等待計(jì)數(shù)301。一旦第二事務(wù)的等待計(jì)數(shù)301達(dá)到0,這指示第二事務(wù)不再有等待依賴性,則第二事務(wù)可繼續(xù)以進(jìn)行提交。圖7示出用于當(dāng)事務(wù)將讀取標(biāo)記放置在已經(jīng)被另一事務(wù)寫鎖定的版本上時(shí)創(chuàng)建等待依賴性的方法700的流程圖。方法700將參照?qǐng)D2和3中的示例性數(shù)據(jù)結(jié)構(gòu)來(lái)描述。在方法700中,第一事務(wù)獲取記錄的一版本的寫鎖定(動(dòng)作701)。例如,第一事務(wù)可通過(guò)將其事務(wù)ID寫入該版本的寫鎖定字段202c來(lái)獲取寫鎖定。當(dāng)該版本被第一事務(wù)寫鎖定的同時(shí),第二事務(wù)試圖將讀取標(biāo)記放置在該版本上(動(dòng)作702)。在確定該版本被第一事務(wù)寫鎖定之后,第二事務(wù)創(chuàng)建針對(duì)第一事務(wù)的對(duì)該版本的等待依賴性,并將讀取標(biāo)記放置在該版本上(動(dòng)作703)。例如,第二事務(wù)可通過(guò)確定該版本的寫鎖定字段202c包含第一事務(wù)的事務(wù)ID來(lái)確定該版本被寫鎖定。第二事務(wù)可通過(guò)遞增第二版本的等待計(jì)數(shù)301來(lái)創(chuàng)建第一事務(wù)對(duì)該版本的等待依賴性,并且可通過(guò)遞增該版本的讀取標(biāo)記計(jì)數(shù)202b來(lái)放置讀取標(biāo)記。等待依賴性使得第一事務(wù)等待直到第二事務(wù)已終止并且移除了它在版本上的讀取標(biāo)記之后才進(jìn)行提交。例如,第一事務(wù)可繼續(xù)處理,但直到等待計(jì)數(shù)301等于O之后才進(jìn)行提交。除了如上所述的等待依賴性,本發(fā)明的各實(shí)施例還可與等待依賴性同時(shí)實(shí)現(xiàn)提交依賴性。
與等待依賴性類似,提交依賴性可以是傳入或傳出依賴性,如下文將進(jìn)一步描述的。類似地,事務(wù)僅需要知道傳入提交依賴性的數(shù)量,并因此維護(hù)傳入提交依賴性計(jì)數(shù)。此夕卜,事務(wù)必須跟蹤其傳出提交依賴性中的每一個(gè),并因此維護(hù)傳出提交依賴性集合。再次參照?qǐng)D1,盡管V2從t2到t6是有效的,但是存在V2的有效性存疑的時(shí)間段。換言之,因?yàn)樵趧?chuàng)建了記錄的新版本之后事務(wù)可能中止,所以直到事務(wù)提交之后才可能知道新版本將是有效的。具體地,V2在tl被創(chuàng)建,但其有效時(shí)間間隔的起始直到Tl在時(shí)間t2預(yù)先提交之后才知道。在這一時(shí)間(tl-t2)期間,V2僅對(duì)Tl可見(jiàn)。此外,雖然一旦Tl在t2預(yù)先提 交就知道了 V2的有效時(shí)間的起始,但直到Tl在t3實(shí)際地進(jìn)行提交,V2才穩(wěn)定,因?yàn)門l在它已預(yù)先提交之后仍然可能中止。然而,使用根據(jù)本發(fā)明的提交依賴性,另一事務(wù)可被允許在這一間隔(t2-t3)期間讀取V2。提交依賴性允許進(jìn)行讀取的事務(wù)假定Tl將提交,從而允許進(jìn)行讀取的事務(wù)在Tl已提交之前讀取更新的版本V2。提交依賴性可由悲觀和樂(lè)觀事務(wù)兩者使用。在該場(chǎng)景中,進(jìn)行讀取的事務(wù)TR可向Tl注冊(cè)提交依賴性。提交依賴性的實(shí)現(xiàn)將參照?qǐng)D8來(lái)描述。圖8與圖3類似,因?yàn)樗ㄅc圖3中示出的字段類似的字段。參照?qǐng)D8,為向Tl注冊(cè)提交依賴性,TR遞增它自己的傳入提交依賴性計(jì)數(shù)804,并在Tl的傳出提交依賴性集合805中注冊(cè)它的事務(wù)ID。隨后,當(dāng)Tl已提交之后,它在其傳出提交依賴性集合805中定位TR的事務(wù)ID(以及已向Tl注冊(cè)了提交依賴性的其他事務(wù)的任何其他事務(wù)ID),并遞減TR的提交依賴性計(jì)數(shù)804。如果TR的唯一的依賴性是關(guān)于Tl的,則它的提交依賴性計(jì)數(shù)804現(xiàn)在將為0,這指示它不再等待任何其他事務(wù)進(jìn)行提交。因此,TR現(xiàn)在可以進(jìn)行提交。如可以見(jiàn)到的,使用這一方法,TR能夠在它確定版本將是有效的之前從該版本讀取值。如果Tl中止而非提交,則Tl將向TR通知該中止,從而導(dǎo)致TR也中止(因?yàn)樗呀?jīng)讀取了將永遠(yuǎn)不會(huì)變得有效的值)。這可以是通過(guò)在每一事務(wù)中使用中止標(biāo)志806來(lái)實(shí)現(xiàn)的,當(dāng)中止標(biāo)志被設(shè)置時(shí)致使事務(wù)中止。進(jìn)行中止的事務(wù)(在該情況下是Tl)可在TR中設(shè)置這一標(biāo)志。因?yàn)榇蟛糠质聞?wù)都提交了,所以使用提交依賴性的這一推測(cè)性的讀取方法是非常高效的。另外,在許多情況下,進(jìn)行讀取的事務(wù)將不會(huì)等待,因?yàn)樵谶M(jìn)行讀取的事務(wù)準(zhǔn)備好提交之前,進(jìn)行讀取的事務(wù)所取決的事務(wù)完成了處理。本發(fā)明包括可通過(guò)利用讀取標(biāo)記、掃描標(biāo)記和寫鎖定、以及提交依賴性和等待依賴性兩者來(lái)實(shí)現(xiàn)如上所述的樂(lè)觀和悲觀事務(wù)兩者的多版本并發(fā)控制技術(shù)的各實(shí)施例。附圖中示出的且在上文中描述的示例性數(shù)據(jù)結(jié)構(gòu)允許兩種依賴性對(duì)讀取標(biāo)記、掃描標(biāo)記和寫鎖定的并發(fā)使用。本發(fā)明可具體化為其它具體形式而不背離其精神或本質(zhì)特征。所描述的實(shí)施例在所有方面都應(yīng)被認(rèn)為僅是說(shuō)明性而非限制性的。因此,本發(fā)明的范圍由所附權(quán)利要求書而非前述描述指示。落入權(quán)利要求書的等效方案的含義和范圍內(nèi)的所有改變被權(quán)利要求書的范圍所涵蓋。
權(quán)利要求
1.一種用于在主存儲(chǔ)器數(shù)據(jù)庫(kù)的多版本并發(fā)控制方案中創(chuàng)建等待依賴性的方法,所述方法包括 第一事務(wù)將讀取標(biāo)記放置在數(shù)據(jù)庫(kù)中的記錄的一版本上(501),所述讀取標(biāo)記指示所述第一事務(wù)正讀取所述記錄的所述版本,但不阻止另一事務(wù)并發(fā)地讀取或更新所述記錄;在所述第一事務(wù)終止之前,第二事務(wù)獲取所述記錄的所述版本上的寫鎖定(502),所述寫鎖定阻止另一事務(wù)更新所述記錄的所述版本; 作為獲取所述寫鎖定的一部分,所述第二事務(wù)創(chuàng)建對(duì)所述版本的等待依賴性(503);以及 所述第二事務(wù)繼續(xù)處理,但等待直到所述第一事務(wù)終止并移除所述版本上的所述讀取標(biāo)記之后才開(kāi)始提交(504)。
2.如權(quán)利要求I所述的方法,其特征在于,所述第二事務(wù)通過(guò)遞增所述第二事務(wù)的等待計(jì)數(shù)來(lái)創(chuàng)建所述等待依賴性。
3.如權(quán)利要求2所述的方法,其特征在干,所述等待計(jì)數(shù)被存儲(chǔ)在所述第二事務(wù)的事務(wù)對(duì)象中。
4.如權(quán)利要求2所述的方法,其特征在于,還包括 所述第一事務(wù)確定所述版本的讀取標(biāo)記計(jì)數(shù)指示所述第一事務(wù)是具有所述版本上的讀取標(biāo)記的唯一事務(wù);以及 所述第一事務(wù)設(shè)置所述版本的不再有讀取標(biāo)記標(biāo)志,以阻止另一事務(wù)將讀取標(biāo)記放置在所述版本上。
5.如權(quán)利要求4所述的方法,其特征在于,還包括 所述第一事務(wù)通過(guò)讀取所述版本的寫鎖定字段中的所述第二事務(wù)的事務(wù)ID來(lái)標(biāo)識(shí)所述第二事務(wù),并遞減所述第二事務(wù)的等待計(jì)數(shù)。
6.如權(quán)利要求I所述的方法,其特征在于,所述第一事務(wù)通過(guò)遞增所述版本的讀取標(biāo)記計(jì)數(shù)來(lái)將所述讀取標(biāo)記放置在所述版本上。
7.如權(quán)利要求I所述的方法,其特征在于,所述第二事務(wù)通過(guò)將其事務(wù)ID寫入所述版本的寫鎖定字段來(lái)獲取所述寫鎖定。
8.如權(quán)利要求7所述的方法,其特征在干,所述版本的寫鎖定字段被存儲(chǔ)在所述版本內(nèi)。
9.如權(quán)利要求I所述的方法,其特征在于,還包括 在所述版本被所述第二事務(wù)寫鎖定的同時(shí),ー個(gè)或多個(gè)其他事務(wù)將讀取標(biāo)記放置在所述版本上,其中所述ー個(gè)或多個(gè)其他事務(wù)中的每ー個(gè)通過(guò)遞增所述版本的讀取標(biāo)記計(jì)數(shù)來(lái)放置讀取標(biāo)記。
10.如權(quán)利要求9所述的方法,其特征在于,還包括 在所述ー個(gè)或多個(gè)其他事務(wù)終止并移除它們?cè)谒霭姹旧系淖x取標(biāo)記之前,所述第一事務(wù)終止并移除它在所述版本上的讀取標(biāo)記; 所述ー個(gè)或多個(gè)其他事務(wù)終止并移除它們?cè)谒霭姹旧系淖x取標(biāo)記,其中所述ー個(gè)或多個(gè)其他事務(wù)中的最后ー個(gè)終止并移除它在所述版本上的讀取標(biāo)記還執(zhí)行以下動(dòng)作 確定所述版本的讀取標(biāo)記計(jì)數(shù)指示所述ー個(gè)或多個(gè)其他事務(wù)中的最后ー個(gè)是具有在所述版本上的讀取標(biāo)記的唯一事務(wù);設(shè)置所述版本的不再有讀取標(biāo)記標(biāo)志,以阻止另一事務(wù)獲取所述版本上的讀取標(biāo)記;通過(guò)讀取所述版本的寫鎖定字段中的所述第二事務(wù)的事務(wù)ID,來(lái)將所述第二事務(wù)標(biāo)識(shí)為具有在所述版本上的寫鎖定的事務(wù);以及遞減所述第二事務(wù)的等待計(jì)數(shù)。
11.如權(quán)利要求I所述的方法,其特征在于,還包括 所述第二事務(wù)創(chuàng)建所述版本的修改版本; 所述第二事務(wù)預(yù)先提交; 在所述第二事務(wù)預(yù)先提交的同時(shí)但在所述第二事務(wù)提交之前,第三事務(wù)創(chuàng)建對(duì)所述第ニ事務(wù)的提交依賴性并讀取所述修改版本;以及 所述第三事務(wù)繼續(xù)處理,但等待直到所述第二事務(wù)提交之后才提交。
12.如權(quán)利要求11所述的方法,其特征在于,創(chuàng)建所述提交依賴性包括,所述第三事務(wù)遞增它的提交依賴性計(jì)數(shù)并將它的事務(wù)ID寫入所述第二事務(wù)的傳出提交依賴性集合。
13.如權(quán)利要求12所述的方法,其特征在于,還包括 在所述第二事務(wù)提交時(shí),所述第二事務(wù)讀取所述第二事務(wù)的傳出提交依賴性集合中的所述第三事務(wù)的事務(wù)ID;以及 所述第二事務(wù)遞減所述第三事務(wù)的提交依賴性計(jì)數(shù)。
14.一種用于在主存儲(chǔ)器數(shù)據(jù)庫(kù)的多版本并發(fā)控制方案中創(chuàng)建等待依賴性的方法,所述方法包括 ー個(gè)或多個(gè)第一事務(wù)將掃描標(biāo)記放置在桶上(601); 在所述桶由所述ー個(gè)或多個(gè)第一事務(wù)標(biāo)記的同時(shí),第二事務(wù)試圖將記錄的新的版本添加到所述桶(602); 在檢測(cè)到所述桶上的ー個(gè)或多個(gè)標(biāo)記時(shí),所述第二事務(wù)創(chuàng)建對(duì)所述ー個(gè)或多個(gè)第一事務(wù)中的每ー個(gè)的等待依賴性¢03);以及 所述第二事務(wù)繼續(xù)處理,但等待直到所述ー個(gè)或多個(gè)第一事務(wù)中的每ー個(gè)終止之后才提交(604)。
15.如權(quán)利要求14所述的方法,其特征在于,所述方法還包括 所述第二事務(wù)創(chuàng)建對(duì)所述ー個(gè)或多個(gè)第一事務(wù)中的每ー個(gè)的等待依賴性包括所述第ニ事務(wù)將其事務(wù)ID添加到所述ー個(gè)或多個(gè)第一事務(wù)的等待事務(wù)列表中的每ー個(gè),以及所述第二事務(wù)遞增對(duì)所述ー個(gè)或多個(gè)第一事務(wù)中的每ー個(gè)的等待計(jì)數(shù);以及 在終止時(shí),所述ー個(gè)或多個(gè)第一事務(wù)中的每ー個(gè)遞減所述第二事務(wù)的等待計(jì)數(shù)。
全文摘要
本發(fā)明涉及用于主存儲(chǔ)器數(shù)據(jù)庫(kù)的高效的多版本鎖定。事務(wù)創(chuàng)建對(duì)實(shí)現(xiàn)多版本并發(fā)控制方案的主存儲(chǔ)器數(shù)據(jù)庫(kù)中的版本的等待依賴性。等待依賴性允許該事務(wù)在其他事務(wù)正讀取版本的同時(shí)更新該版本。多版本并發(fā)控制方案還允許與等待依賴性并發(fā)地實(shí)現(xiàn)提交依賴性。提交依賴性允許事務(wù)在提交更新的版本之前讀取該更新的版本。
文檔編號(hào)G06F17/30GK102682071SQ20121005748
公開(kāi)日2012年9月19日 申請(qǐng)日期2012年3月6日 優(yōu)先權(quán)日2011年3月7日
發(fā)明者C·迪亞科努, P-A·拉爾森, S·布拉納斯 申請(qǐng)人:微軟公司
網(wǎng)友詢問(wèn)留言 已有0條留言
  • 還沒(méi)有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1