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

基于記錄的多版本并發(fā)控制的一致性讀取的有效方法和系統(tǒng)與流程

文檔序號(hào):12287933閱讀:171來源:國知局
本申請(qǐng)要求于2014年3月28日遞交的發(fā)明名稱為“基于記錄的多版本并發(fā)控制的一致性讀取的有效方法和系統(tǒng)”的第“14/229,519”號(hào)美國專利申請(qǐng)案的在先申請(qǐng)優(yōu)先權(quán),其全部內(nèi)容通過引用結(jié)合在本申請(qǐng)中。本申請(qǐng)要求于2014年3月28日遞交的發(fā)明名稱為“索引中優(yōu)化多版本支持的系統(tǒng)和方法”的第“14/229,638”號(hào)美國專利申請(qǐng)案的在先申請(qǐng)優(yōu)先權(quán),其全部內(nèi)容通過引用結(jié)合在本申請(qǐng)中。
技術(shù)領(lǐng)域
:本發(fā)明涉及在數(shù)據(jù)庫管理系統(tǒng)中基于記錄的多版本并發(fā)控制的系統(tǒng)和方法,在實(shí)施例中,尤其涉及在數(shù)據(jù)庫管理系統(tǒng)中一致性讀取基于記錄的多版本并發(fā)控制的系統(tǒng)和方法。
背景技術(shù)
::現(xiàn)代數(shù)據(jù)庫管理系統(tǒng)中,多版本并發(fā)控制(Multi-VersionConcurrencyControl,MVCC)是基本機(jī)制,實(shí)現(xiàn)高并發(fā)性來允許閱讀器而不阻塞更新器和允許更新器而不阻塞閱讀器,實(shí)現(xiàn)快照讀取一致性,而這對(duì)很多應(yīng)用至關(guān)重要。MVCC可被歸為基于頁和基于記錄的方法,典型地與UNDO和日志記錄機(jī)制結(jié)合?;谟涗浀姆椒墒褂脷v史(差異)記錄鏈接的鏈以用于記錄的歷史。為了讀取在某一時(shí)間的記錄,系統(tǒng)遍歷所述鏈來找到在所述時(shí)間提交的最后記錄。技術(shù)實(shí)現(xiàn)要素:根據(jù)一實(shí)施例,一種基于記錄的多版本并發(fā)控制(Multi-VersionConcurrentControl,MVCC)數(shù)據(jù)庫(database,DB)管理系統(tǒng)中用于快照一致性讀取的方法包括:從閱讀器起點(diǎn)的事務(wù)日志中復(fù)制系統(tǒng)提交事務(wù)標(biāo)識(shí)(transactionidentifier,TxID)和當(dāng)前日志記錄序號(hào)(logrecordsequencenumber,LSN),而無需將事務(wù)的提交LSN回填到改變的記錄,也無需閱讀器復(fù)制整個(gè)事務(wù)表;根據(jù)記錄TxID、提交TxID和當(dāng)前LSN確定記錄是否可見,其中,只有當(dāng)所述記錄TxID等于或大于事務(wù)起點(diǎn)處的提交TxID時(shí),才會(huì)查閱事務(wù)表。根據(jù)一方面,一種基于記錄的多版本并發(fā)控制(Multi-VersionConcurrentControl,MVCC)數(shù)據(jù)庫(database,DB)管理系統(tǒng)中用于快照一致性讀取的裝置包括:復(fù)制構(gòu)件,用于從閱讀器起點(diǎn)的事務(wù)日志中復(fù)制系統(tǒng)提交事務(wù)標(biāo)識(shí)(transactionidentifier,TxID)和當(dāng)前日志記錄序號(hào)(logrecordsequencenumber,LSN),而無需將事務(wù)的提交LSN回填到改變的記錄,也無需閱讀器復(fù)制整個(gè)事務(wù)表;確定構(gòu)件,用于根據(jù)記錄TxID、提交TxID和當(dāng)前LSN確定記錄是否可見,其中,只有當(dāng)所述記錄TxID等于或大于事務(wù)起點(diǎn)處的提交TxID時(shí),才會(huì)查閱事務(wù)表。根據(jù)上述方面的一實(shí)施形式,所述裝置的所述確定構(gòu)件還用于:當(dāng)所述記錄的創(chuàng)建TxID小于所述事務(wù)起點(diǎn)處的系統(tǒng)提交TxID或所述事務(wù)本身創(chuàng)建所述記錄時(shí),確定所述記錄可見。根據(jù)上述方面的另一實(shí)施形式,所述裝置的所述確定構(gòu)件還用于:當(dāng)所述記錄創(chuàng)建TxID被提交且所述創(chuàng)建TxID的結(jié)束時(shí)間戳(endtimestamp,ETS)小于所述事務(wù)起點(diǎn)處的當(dāng)前LSN,確定所述記錄可見。根據(jù)上述方面的一實(shí)施形式,所述裝置的所述確定構(gòu)件還用于:當(dāng)創(chuàng)建TxID大于或等于所述事務(wù)起點(diǎn)處的提交TxID且滿足兩個(gè)條件中的一個(gè)時(shí),確定所述記錄不可見,其中,所述情況包括:確定未提交的創(chuàng)建TxID大于或等于所述事務(wù)起點(diǎn)處的當(dāng)前LSN,以及確定創(chuàng)建TxID的結(jié)束時(shí)間戳(endtimestamp,ETS)大于或等于所述事務(wù)起點(diǎn)處的當(dāng)前LSN。根據(jù)上述方面的一實(shí)施形式,所述裝置的所述確定構(gòu)件還用于:當(dāng)刪除TxID小于所述事務(wù)起點(diǎn)處的提交TxID或所述事務(wù)本身作出刪除時(shí),判斷所述記錄是根據(jù)刪除標(biāo)志刪除的。根據(jù)上述方面的一實(shí)施形式,所述裝置的所述確定構(gòu)件還用于:當(dāng)刪除TxID被提交且所述刪除TxID的結(jié)束時(shí)間戳(endtimestamp,ETS)小于所述事務(wù)開始處的當(dāng)前LSN,判斷所述記錄是根據(jù)刪除標(biāo)志刪除的。根據(jù)上述方面的任何實(shí)施形式,所述裝置的所述確定構(gòu)件還用于:確定是否根據(jù)與記錄對(duì)應(yīng)的索引葉子頁記錄中的刪除指示刪除了記錄;在未刪除所述記錄時(shí),根據(jù)索引葉子頁中的新記錄指示并根據(jù)事務(wù)開始處的系統(tǒng)提交事務(wù)標(biāo)識(shí)(transactionidentifier,TxID)與從所述索引葉子頁記錄得到的記錄創(chuàng)建TxID的比較,確定所述記錄是否可見;處理器,用于執(zhí)行所述確定步驟的結(jié)果。根據(jù)上述管理數(shù)據(jù)庫的所述裝置的任何實(shí)施形式,所述確定構(gòu)件還用于將刪除TxID與所述事務(wù)開始處的系統(tǒng)提交TxID進(jìn)行比較,其中,當(dāng)所述刪除指示指示所述記錄被刪除時(shí)且當(dāng)所述刪除TxID的結(jié)束時(shí)間戳(endtimestamp,ETS)小于或等于事務(wù)開始處的系統(tǒng)提交TxID時(shí),所述記錄被刪除。根據(jù)上述管理數(shù)據(jù)庫的所述裝置的任何實(shí)施形式,所述確定構(gòu)件還用于:當(dāng)刪除TxID被提交且所述刪除TxID的ETS小于所述事務(wù)開始處的當(dāng)前日志序號(hào)(logrecordsequencenumber,LSN)時(shí),判斷所述記錄被刪除。上述方案通過Commit_TxID(或Commit_LSN)優(yōu)化了存儲(chǔ)緊縮。緊縮后,版本信息只有1比特。根據(jù)一實(shí)施例,一種用于管理數(shù)據(jù)庫的數(shù)據(jù)處理系統(tǒng)包括:處理器和計(jì)算機(jī)可讀存儲(chǔ)介質(zhì),用于存儲(chǔ)所述處理器的執(zhí)行程序,其中,所述程序包括指令,用于:從閱讀器起點(diǎn)的事務(wù)日志中復(fù)制系統(tǒng)提交事務(wù)標(biāo)識(shí)(transactionidentifier,TxID)和當(dāng)前日志記錄序號(hào)(logrecordsequencenumber,LSN),而無需將事務(wù)的提交LSN回填到改變的記錄,也無需閱讀器復(fù)制整個(gè)事務(wù)表;根據(jù)記錄TxID、所述提交TxID和當(dāng)前LSN確定記錄是否可見,其中,只有當(dāng)所述記錄TxID等于或大于事務(wù)起點(diǎn)處的提交TxID時(shí),才會(huì)查閱事務(wù)表。根據(jù)一實(shí)施例,一種基于記錄的多版本并發(fā)控制(Multi-VersionConcurrencyControl,MVCC)數(shù)據(jù)庫(database,DB)管理系統(tǒng)包括:事務(wù)表,包括所述系統(tǒng)中多個(gè)事務(wù)中的每個(gè)事務(wù)的狀態(tài),其中,每個(gè)事務(wù)被按事務(wù)標(biāo)識(shí)(transactionidentifier,TxID)索引,這些TxID隨著時(shí)間單一增加,提交TxID是所述事務(wù)表中活動(dòng)事務(wù)的最舊的ID;存儲(chǔ)子系統(tǒng),用于存儲(chǔ)多個(gè)版本的記錄和每個(gè)記錄的更新歷史,其中,每個(gè)記錄都包括創(chuàng)建或刪除所述記錄的事務(wù)TxID;日志記錄子系統(tǒng),包括處理器,其中,所述日志記錄子系統(tǒng)用于追蹤所述存儲(chǔ)子系統(tǒng)的所有變化并用于使用日志記錄序號(hào)(logrecordsequencenumber,LSN)來進(jìn)行序列比對(duì)和恢復(fù);閱讀器,用于僅僅復(fù)制系統(tǒng)提交TxID和當(dāng)前LSN,根據(jù)事務(wù)起點(diǎn)處的記錄TxID、提交TxID和當(dāng)前LSN,確定記錄是否可見,而無需查閱所述事務(wù)表,除非所述記錄TxID等于或大于所述事務(wù)起點(diǎn)處的提交TxID。MVCC是DBMS引擎中的基本技術(shù)。簡單而有效的算法具有高需求。通過應(yīng)用上述方案,為數(shù)據(jù)管理簡化了MVCC的實(shí)現(xiàn)。通過有效的可見性檢查,所述系統(tǒng)復(fù)雜度可更低且更穩(wěn)健。更具體的,基于記錄的MVCC使用記錄中的事務(wù)ID,而使用事務(wù)提交LSN來檢查可見性,可見性查看所需要的保存在閱讀器開始處的變量較小,可避免當(dāng)事務(wù)開始時(shí)的現(xiàn)有SQL熱點(diǎn)。更具體的優(yōu)點(diǎn)是,與現(xiàn)有SQL服務(wù)器方法相比,上述方案避免了將事務(wù)ID替換為事務(wù)接觸的記錄相應(yīng)的提交LSN。還提供了使用Commit_TxID優(yōu)化的效率。附圖說明為了更完整地理解本發(fā)明及其優(yōu)點(diǎn),現(xiàn)在參考下文結(jié)合附圖進(jìn)行的描述,其中:圖1示出了一實(shí)施例的基于記錄的MVCC的架構(gòu)的方框圖。圖2示出了一實(shí)施例的表空間內(nèi)的記錄格式的方框圖。圖3示出了一實(shí)施例的讀取MVCC數(shù)據(jù)庫中記錄的方法的流程圖。圖4示出了根據(jù)一實(shí)施例的運(yùn)算平臺(tái),可用于實(shí)現(xiàn),例如,此處描述的設(shè)備和方法。具體實(shí)施方式下文將詳細(xì)論述當(dāng)前示例性實(shí)施例的制作和使用。然而,應(yīng)了解,本發(fā)明提供可在各種具體上下文中體現(xiàn)的許多適用的發(fā)明性概念。所論述的具體實(shí)施例僅僅說明用以實(shí)施和使用本發(fā)明的具體方式,而不限制本發(fā)明的范圍。相比于回滾全部頁來找到正確記錄的基于頁的MVCC機(jī)制,基于記錄的方法更簡單也會(huì)更有效。本發(fā)明的一個(gè)重點(diǎn)在于基于記錄的MVCC方法,尤其是實(shí)現(xiàn)有效讀取一致性和快照讀取一致性。所述快照讀取一致性是對(duì)閱讀器(事務(wù)或查詢)讀取所述閱讀器開始時(shí)提交的最后記錄。每個(gè)記錄都在邏輯上標(biāo)有其事務(wù)信息。當(dāng)事務(wù)更新記錄時(shí),事務(wù)并不知道其本身提交時(shí)間戳,而是往往由提交日志序號(hào)或事務(wù)提交LSN來表示。因此,事務(wù)ID被記錄在由更新事務(wù)寫入的記錄中。只有在提交時(shí)間,才知道事務(wù)提交LSN。事務(wù)提交LSN用于測試記錄對(duì)于閱讀器是否可見。事務(wù)提交LSN在記錄創(chuàng)建時(shí)或更新時(shí)未知而一致性讀取對(duì)提交LSN有要求的情況提出了一個(gè)具有挑戰(zhàn)性的問題,而優(yōu)化對(duì)有效的方法是至關(guān)重要的。另一個(gè)方法是保存用于記錄事務(wù)ID和事務(wù)終結(jié)時(shí)間之間映射關(guān)系的事務(wù)表,例如,提交LSN或中止的LSN。然而,為了加速一致性讀取而又不至于延長提交,在事務(wù)被提交后,事務(wù)所改變的記錄中的事務(wù)ID被其在后臺(tái)中的提交LSN所替換。一比特可用于區(qū)分TxID和記錄標(biāo)頭中的事務(wù)提交LSN(transactioncommitLSN,Tx_CLSN)。對(duì)提交LSN的回填仍舊是一項(xiàng)高成本的操作。這里公開了一種快照讀取的方法和系統(tǒng),不需要替換記錄中的事務(wù)ID,同時(shí)通過將系統(tǒng)范圍的Commit_TxID(Commit_TransactionID)作為優(yōu)化以實(shí)現(xiàn)有效的一致性讀取。Commit_TxID類似于C·莫漢提出的Commit_LSN,用以對(duì)記錄的提交/可見性的測試進(jìn)行優(yōu)化。事務(wù)ID單一增加。若事務(wù)在運(yùn)行中或是中止了但沒有物理地回滾,該事務(wù)就被稱為是活動(dòng)的。(系統(tǒng))Commit_TxID被定義為最舊的在系統(tǒng)中仍舊是活動(dòng)的事務(wù)ID。注意:所有中止的記錄或ID小于這個(gè)事務(wù)ID的回滾的事務(wù)的記錄都是物理上的UNDONE。這意味著所有事務(wù)ID小于這個(gè)Commit_TxID的記錄會(huì)被提交。系統(tǒng)繼續(xù)維持Commit_TxID。當(dāng)閱讀器(事務(wù)或查詢)開始時(shí),系統(tǒng)保存myCommit_TxID中的當(dāng)前Commit_TxID值,用于與記錄中的事務(wù)ID進(jìn)行比較,進(jìn)而確定記錄是否在所述閱讀器開始時(shí)的時(shí)間提交。所述系統(tǒng)還為閱讀器記錄所述當(dāng)前LSN。在事務(wù)ID大于或等于所述Commit_TxID的情況下,查閱事務(wù)表找到事務(wù)ID的commit_LSN,基于LSN比較可作出決定。因?yàn)閿?shù)據(jù)庫系統(tǒng)中大部分的記錄被提交了,只有很少比例的記錄需要查閱所述事務(wù)表。因?yàn)橐恍┯涗泴?huì)有事務(wù)ID,所以即使是將commit_LSN替換回填到記錄也需要查詢操作。避免將事務(wù)ID替換為commit_LSN使得這個(gè)方法更簡單也更穩(wěn)健,并且在大多情況下更有效。在一實(shí)施例中,相比于類似的基于UNDO的方法,本發(fā)明一方面中沒有將事務(wù)的提交LSN回填到改變的記錄。盡管其可以通過下面的事務(wù)回滾/撤銷鏈實(shí)現(xiàn),但是提交LSN的回填對(duì)正常的事務(wù)處理有干擾,尤其是對(duì)輸入/輸出(input/output,I/O)和中央處理器(centralprocessingunit,CPU)/緩存行為有影響。回填方法要求對(duì)所述事務(wù)表進(jìn)行回填方法遇到的事務(wù)ID的檢查,而實(shí)施例公開的方法則限制對(duì)所述事務(wù)表進(jìn)行等于或大于myCommit_LSN的事務(wù)ID的檢查。等于或大于myCommit_LSN的事務(wù)ID應(yīng)該較小。更進(jìn)一步地,避免回填具有較大的益處。同時(shí),在一實(shí)施例中,相比于PostgreSQL中使用的不采用UNDO的方法,所公開的不同于PostgreSQL的一方面在于對(duì)提交進(jìn)行快照語義的檢查更簡單。PostgreSQL中,PostgreSQL需要復(fù)制閱讀器(所有活動(dòng)的事務(wù)ID)開始處的整個(gè)(邏輯的)事務(wù)表,所述事務(wù)表變?yōu)闊狳c(diǎn)。此外,PostgreSQL需要比本發(fā)明實(shí)施例更多的空間。而且,PostgreSQL中,對(duì)于歷史中的事務(wù),因?yàn)榘粗兄沟氖聞?wù)的記錄并未進(jìn)行物理上的回滾,所以所有的事務(wù)歷史需要保存有位圖,直到數(shù)據(jù)批清理完成(真空),這往往對(duì)系統(tǒng)造成性能影響。在一實(shí)施例中公開了比基于頁的MVCC更簡單且質(zhì)量更輕的基于記錄的MVCC。在一實(shí)施例中,事務(wù)提交LSN被用于檢查記錄的可見性。圖1示出了一實(shí)施例的基于記錄的MVCC的架構(gòu)100的方框圖。在一實(shí)施例中,所述架構(gòu)100包括數(shù)據(jù)頁MVCC和索引MVCC,而索引MVCC的方法基本不依賴于數(shù)據(jù)頁MVCC。本發(fā)明的一個(gè)重點(diǎn)是數(shù)據(jù)頁MVCC。所述架構(gòu)100包括數(shù)據(jù)頁120(或表空間內(nèi)的基礎(chǔ)數(shù)據(jù)記錄)、事務(wù)表102、日志132、UNDO/版本存儲(chǔ)126和B樹索引子系統(tǒng)104。所述事務(wù)表102保存有事務(wù)信息。所述事務(wù)表102包括多個(gè)條目:TxID、狀態(tài)、開始時(shí)間戳(starttimestamp,STS)、結(jié)束時(shí)間戳(endtimestamp,ETS)和多個(gè)記錄的撤銷記錄鏈。所述狀態(tài)可為已提交(committed,C)、已中止(aborted,A)和運(yùn)行中(inflight,I)。所述事務(wù)表102中的撤銷條目表示一個(gè)版本存儲(chǔ)記錄ID作為當(dāng)前事務(wù)的撤銷記錄鏈中的撤銷起點(diǎn)。所述日志132包括以恢復(fù)為目的的常規(guī)表空間(tablespace,TS)(例如,數(shù)據(jù)頁120)的變化和版本TS(例如,UNDO/版本存儲(chǔ)126)的變化。所述日志132還包括提交的記錄、記錄的提交LSN和當(dāng)前LSN。所述UNDO/版本存儲(chǔ)126存儲(chǔ)舊版本的記錄。所述數(shù)據(jù)頁120中的基礎(chǔ)數(shù)據(jù)記錄和所述UNDO/版本存儲(chǔ)126中的歷史記錄之間有鏈接。所述UNDO/版本存儲(chǔ)126包括記錄版本和每個(gè)事務(wù)(未示出)的UNDO鏈的鏈接128和130。因此,版本2(version2,v2)的鏈接指向版本1(version1,v1)的鏈接作為記錄的版本。所述數(shù)據(jù)頁120包括當(dāng)前版本記錄122和刪除的記錄124。在一實(shí)施例中,所述B樹索引子系統(tǒng)104包括B樹1106和B樹2108。B樹106和108分別包括對(duì)應(yīng)的葉子頁110和112。葉子頁110和112分別包括指向所述數(shù)據(jù)頁120中的現(xiàn)版本記錄3122或指向所述數(shù)據(jù)頁120中的刪除的版本記錄124的指針114和116。在一實(shí)施例中,B樹葉子頁(或其他索引結(jié)構(gòu))中的記錄會(huì)保存其創(chuàng)建和刪除的事務(wù)信息,以便于實(shí)現(xiàn)一致性讀取,而無需查看數(shù)據(jù)記錄。也不需要將舊版本移到單獨(dú)的存儲(chǔ)空間內(nèi)。舊記錄可被清除(若刪除)或被緊縮,從而提升空間和時(shí)間效率。在一實(shí)施例中,這些可通過Commit_TxID或Commit_LSN來優(yōu)化。在一實(shí)施例中,使用關(guān)于創(chuàng)建或刪除記錄的事務(wù)的信息來擴(kuò)展葉子頁記錄,進(jìn)而實(shí)現(xiàn)多版本對(duì)B樹索引的支持。所述系統(tǒng)保存有事務(wù)表中的所有事務(wù)狀態(tài),并且在日志中記下變化。日志(記錄)序號(hào)(log(record)sequencenumber,LSN)用于標(biāo)識(shí)頁和記錄的狀態(tài)。當(dāng)事務(wù)開始時(shí),所述事務(wù)分配有事務(wù)ID和開始時(shí)間戳(LSN)。所述事務(wù)引起的所有變化都可暫時(shí)用事務(wù)ID(或TxID)標(biāo)記。當(dāng)所述事務(wù)提交時(shí),所述事務(wù)具有提交LSN。一致性讀取基于提交LSN來實(shí)現(xiàn)快照一致性,例如,閱讀器可只讀取閱讀器開始時(shí)所提交的記錄。換句話說,若記錄未被刪除且其事務(wù)的提交LSN小于閱讀器的LSN,則所述記錄對(duì)閱讀器可見。比較LSN有兩種方法。一種是當(dāng)事務(wù)提交時(shí)或當(dāng)事務(wù)提交后,用記錄中的LSN替換TxID。另一種是在所述事務(wù)表中查找TxID,從而找到事務(wù)狀態(tài)及其提交LSN用于比較。通過采用系統(tǒng)范圍的Commit_LSN或Commit_TxID,可以優(yōu)化這兩種方法。Commit_LSN被定義為最大的LSN,使得在這個(gè)LSN之前所有的日志記錄都被提交了。類似地,Commit_TxID是最大的事務(wù)ID,使得在這個(gè)TxID之前所有的事務(wù)都被提交了,在這個(gè)TxID之前回滾的事務(wù)的所有的記錄都被物理上地撤銷了。因此,在一實(shí)施例中,用于支持并優(yōu)化索引MVCC的主要的技術(shù)為:1.對(duì)具有事務(wù)信息的葉子頁記錄進(jìn)行增大。不需要為索引記錄存儲(chǔ)單獨(dú)的版本。2.可從記錄中去除或用1比特替換創(chuàng)建事務(wù)ID(創(chuàng)建TxID或CTxID)或提交LSN,來指示記錄是舊的且比系統(tǒng)范圍的Commit_TxID或Commit_LSN(比最舊的閱讀器LSN還舊)還舊。3.若記錄的刪除LSN或TxID比系統(tǒng)范圍的Commit_TxID或Commit_LSN還舊,則可清除刪除的記錄。動(dòng)作2和3被稱為緊縮且可在查找空間時(shí)的頁拆分前執(zhí)行。緊縮后,版本信息變成了1比特,因?yàn)榇蟛糠值挠涗洉?huì)被緊縮,所以使得相比于其他方法,就空間要求而言,索引多版本的成本更少。查找操作中,通過為記錄中的事務(wù)ID或提交LSN比較Commit_TxID或Commit_LSN并只在事務(wù)表102中查閱更新記錄可極大的優(yōu)化記錄可見性的檢查,所述更新的記錄往往在所有記錄中僅為很少占比。類似的緊縮技術(shù)可應(yīng)用于數(shù)據(jù)頁的數(shù)據(jù)記錄。圖2示出了一實(shí)施例的表空間內(nèi)的記錄格式200的方框圖。所述記錄格式200包括四類記錄204、206、208和210。記錄204、206、208和210分別包括記錄標(biāo)頭和記錄內(nèi)容。記錄標(biāo)頭以指示記錄格式細(xì)節(jié)的標(biāo)志為開始。在一實(shí)施例中,所述標(biāo)志包括:刪除標(biāo)志,指示所述記錄204、206、208和210是正常的記錄還是刪除的記錄;以及更新標(biāo)志,指示所述記錄204、206、208和210是原始的記錄還是更新的記錄。記錄204、206、208和210每種類型的特定的標(biāo)志值202都分別標(biāo)在記錄204、206、208和210的左邊。在一實(shí)施例中,記錄204的記錄標(biāo)頭包括標(biāo)志和創(chuàng)建事務(wù)ID(creationtransactionID,CTxID),其中所述標(biāo)志為00,表示正常的原始的記錄(例如,沒有版本存儲(chǔ)記錄ID(versionstorerecordID,VSRID)的記錄)。記錄206是刪除的原始的記錄。記錄206的記錄標(biāo)頭包括標(biāo)志、CTxID和刪除事務(wù)ID(deletiontransactionID,DTxID)。記錄206的標(biāo)志為10,表示記錄206是刪除的記錄且為原始的記錄(例如,沒有VSRID)。記錄208是正常的(即,不是刪除的)更新的記錄。記錄208的記錄標(biāo)頭包括標(biāo)志、CTxID和VSRID。記錄208的標(biāo)志為01,表示記錄208是正常的(不是刪除的)記錄且記錄208為更新的記錄。更新的記錄包括VSRID。記錄210的記錄標(biāo)頭包括標(biāo)志、CTxID、DTxID和VSRID。記錄210的標(biāo)志為11,表示記錄210是刪除且更新的記錄。因?yàn)橛涗?10是刪除的記錄,所以記錄210包括DTxID。因?yàn)橛涗?10是更新的記錄,所以記錄210包括VSRID。在一實(shí)施例中,每個(gè)標(biāo)志都是1個(gè)字節(jié)。在一實(shí)施例中,CTxID是4個(gè)字節(jié)。在一實(shí)施例中,DTxID是4個(gè)或5個(gè)字節(jié)。在一實(shí)施例中,VSRID是4個(gè)或5個(gè)字節(jié)。除了如圖2所示的實(shí)施例,記錄204、206、208和210的實(shí)施可能有變化。在一實(shí)施例中,VSRID用作歷史記錄的鏈接。歷史記錄可能有類似的格式或利用差異來降低存儲(chǔ)空間消耗?;氐綀D1,事務(wù)表203的維護(hù)已然十分了解。當(dāng)事務(wù)提交或中止時(shí),可實(shí)現(xiàn)Commit_TxID的維護(hù)。最初,Commit_TxID是所述事務(wù)表中最小的TxID。若當(dāng)前Commit_TxID相鄰的事務(wù)提交,則Commit_TxID會(huì)前進(jìn)。直到下個(gè)事務(wù)中止或運(yùn)行之前,一直重復(fù)這個(gè)步驟。若事務(wù)中止,則有兩個(gè)選擇:立刻UNDO或延遲UNDO。立刻UNDO的情況下,系統(tǒng)100將物理上撤銷事務(wù)在中止完成前造成的變化。延遲UNDO的情況下,系統(tǒng)100將通過后臺(tái)進(jìn)程來物理上回滾事務(wù)造成的變化。一旦物理上完成所述回滾/撤銷,Commit_TxID就能前進(jìn)到下一個(gè)。一旦Commit_TxID前進(jìn),就可以清除Commit_TxID之前的條目了。在一實(shí)施例中,圓形陣用于實(shí)現(xiàn)事務(wù)表102。本領(lǐng)域技術(shù)人員都了解日志132與Commit_LSN的實(shí)現(xiàn)。任何更新協(xié)議都可用于鎖定等。在一實(shí)施例中,只要求基于從最近版本到最舊版本的順序?qū)⒂涗洿B起來。可利用任何方法來將記錄拆分到常規(guī)表空間120和撤銷表空間126。在一實(shí)施例中,一致性是指快照隔離(事務(wù)開始時(shí)間的快照)。在另一實(shí)施例中,一致性是指提交的讀取(查詢開始時(shí)間的快照)。關(guān)于一致性的每個(gè)實(shí)施方式都可使用相同的邏輯,唯一的區(qū)別在于測試記錄提交所使用的不同點(diǎn)的值:快照隔離是在事務(wù)開始時(shí)間而提交的讀取是在查詢/聲明開始時(shí)間。本發(fā)明利用術(shù)語“事務(wù)開始時(shí)”進(jìn)行說明。閱讀器開始處:記錄當(dāng)前Commit_TxID和當(dāng)前LSN,還有閱讀器的TxID。這些分別被稱為:myCommit_TxID、MyLSN和myTxID。在一實(shí)施例中,按從最新的(例如,v2130)到最舊的(例如,v1128)將更新的記錄126串連起來。當(dāng)讀取記錄時(shí),應(yīng)用下列邏輯。圖3所示流程圖和下列描述的示出了用于讀取記錄的詳細(xì)邏輯的實(shí)施例。根據(jù)實(shí)施例,下列描述著重解釋了讀取記錄的一些情況。若記錄未被刪除且未更新(例如,標(biāo)志=00)若CTxID<myCommit_TxID,則提交所述記錄,或者若CTxID=myTxID,則這個(gè)事務(wù)創(chuàng)建了記錄,因此記錄可見,并讀取記錄內(nèi)容。否則,CTxID≥myCommit_TxID,在事務(wù)表中查找CTxID,若CTxID事務(wù)被提交了且CTxID的ETS<myLSN,在閱讀器開始前提交了所述事務(wù),則讀取內(nèi)容。否則,忽略記錄。若記錄未被刪除但更新了(例如,標(biāo)志=01),則為CTxID應(yīng)用與上述同樣的邏輯,一直到最后一行而不是忽視記錄,必須追蹤更新鏈來找到提交的一個(gè)記錄或直到找不到提交的記錄。若記錄被刪除了且未更新(例如,標(biāo)志=10),則應(yīng)用類似的邏輯看刪除的事務(wù)是否被提交了。若事務(wù)被提交了,則忽視記錄,否則,應(yīng)用上述邏輯,包括追蹤所述鏈來找到提交的記錄或直到找不到提交的記錄。圖3示出了一實(shí)施例的讀取MVCC數(shù)據(jù)庫中記錄的方法300的流程圖。所述方法300從方框302開始,確定刪除標(biāo)志是否等于1。若刪除標(biāo)志等于1,則方法300跳轉(zhuǎn)到方框304:確定刪除TxID是否小于事務(wù)開始處的系統(tǒng)提交TxID,或確定是否是事務(wù)本身作出所述刪除。若在方框304中刪除TxID小于事務(wù)開始處的系統(tǒng)提交TxID,或事務(wù)本身作出所述刪除,則方法300跳轉(zhuǎn)到方框314:確定記錄被刪除,之后方法300結(jié)束。若在方框304中刪除TxID不小于或等于事務(wù)開始處的系統(tǒng)提交TxID且并非事務(wù)本身作出所述刪除,則方法300跳轉(zhuǎn)到方框306:確定是否提交了具有刪除TxID的事務(wù),并確定所述刪除TxID的結(jié)束時(shí)間戳(endtimestamp,ETS)是否小于事務(wù)開始處當(dāng)前日志序號(hào)(logrecordsequencenumber,LSN)(例如,myLSN)。若在方框306中提交了刪除TxID且所述刪除TxID的結(jié)束時(shí)間戳(endtimestamp,ETS)小于myLSN,則方法300跳轉(zhuǎn)到方框314:確定記錄被刪除,之后方法300結(jié)束。若在方框302中刪除標(biāo)記不等于1或在方框306中沒有提交刪除TxID和/或刪除TxID的結(jié)束時(shí)間戳(endtimestamp,ETS)不小于事務(wù)開始處的當(dāng)前日志序號(hào)(logrecordsequencenumber,LSN),則方法300跳轉(zhuǎn)到方框308:確定記錄創(chuàng)建TxID是否小于所述事務(wù)開始處的當(dāng)前提交TxID(myCommit_TxID),或確定是否是事務(wù)本身創(chuàng)建了所述記錄。若在方框308中,所述創(chuàng)建TxID小于所述myCommit_TxID,或事務(wù)本身創(chuàng)建了所述記錄,則方法300跳轉(zhuǎn)到方框316:確定記錄可見,之后方法300結(jié)束。若在方框308中所述創(chuàng)建TxID不小于所述myCommit_TxID且并非事務(wù)本身創(chuàng)建了所述記錄,則方法300跳轉(zhuǎn)到方框310:確定是否提交了所述創(chuàng)建TxID(createTxID,CTxID),并確定ETS(CTxID)是否小于事務(wù)開始處的當(dāng)前日志序號(hào)(logrecordsequencenumber,LSN)(例如,myLSN)。若在方框310中提交了所述創(chuàng)建TxID(creatTxID,CTxID)且所述ETS(CTxID)小于事務(wù)開始處當(dāng)前日志序號(hào)(logrecordsequencenumber,LSN)(例如,myLSN),則方法300跳轉(zhuǎn)到方框316,確定記錄可見,之后方法300結(jié)束。若在方框310中確定沒有提交所述創(chuàng)建TxID(createTxID,CTxID)或所述ETS(CTxID)不小于事務(wù)開始處當(dāng)前日志序號(hào)(logrecordsequencenumber,LSN)(例如,myLSN),則方法300跳轉(zhuǎn)到方框312:確定更新標(biāo)志是否等于1。若在方框312中,更新標(biāo)志等于1,則方法300跳轉(zhuǎn)到方框320:跟隨VSRID以得到下一記錄,之后方法300返回至方框308:對(duì)歷史記錄應(yīng)用所述邏輯。若在方框312中,確定更新標(biāo)志不等于1,則方法300跳轉(zhuǎn)到方框318:確定記錄不可見,之后方法300結(jié)束。在一實(shí)施例中,為了為更長久地運(yùn)行閱讀器進(jìn)行優(yōu)化,可使用另一個(gè)值:最后事務(wù)的ID(Last_TxID),位于閱讀器開始處,將所述ID保存在myLast_TxID中。任何大于myLast_TxID的事務(wù)ID不會(huì)在事務(wù)開始處提交。在一實(shí)施例中,另一種優(yōu)化是縮短事務(wù)ID和緊縮記錄標(biāo)頭。事務(wù)ID基數(shù)(在實(shí)施例中為8個(gè)字節(jié))可用于頁,相關(guān)的事務(wù)ID(在實(shí)施例中為4個(gè)字節(jié))用在記錄標(biāo)頭中以降低空間使用率。當(dāng)所述相關(guān)的事務(wù)ID溢出時(shí),可選擇一個(gè)新基數(shù),使得更舊的事務(wù)ID都被提交,所有這些相關(guān)的較小的TxID都可設(shè)為0,來表示這些TxID全都是在所述頁上的當(dāng)前基數(shù)事務(wù)ID之前提交的,或者,在另一實(shí)施例中,簡單地使用標(biāo)志位來表示該事實(shí)并通過移除事務(wù)ID域來緊縮記錄標(biāo)頭。當(dāng)所述頁中需要更多的空間時(shí),可應(yīng)要求完成緊縮。本申請(qǐng)主旨與下面的參考文獻(xiàn)相關(guān)。每個(gè)所述參考文獻(xiàn)的全部內(nèi)容均通過引用結(jié)合在本申請(qǐng)中:【1】C·莫漢等人.ARIES支持精細(xì)粒度鎖定和通過預(yù)寫日志記錄的部分回滾的事務(wù)恢復(fù)方法【J】.美國計(jì)算機(jī)學(xué)會(huì)數(shù)據(jù)庫系統(tǒng)匯刊(TransactionsonDatabaseSystems,TODS),1992-03,17(1):94-162.【2】C·莫漢.提交LSN:一種降低事務(wù)處理系統(tǒng)中鎖定及封鎖的新穎而簡單的方法.第16屆國際超大型數(shù)據(jù)庫會(huì)議綜述,406-418.圖4是可用于實(shí)現(xiàn)此處公開的設(shè)備和方法的處理系統(tǒng)400的方框圖。特定的設(shè)備可利用所有所示的組件或組件的僅一子集,且設(shè)備之間的集成程度可能不同。此外,設(shè)備可包括組件的多個(gè)示例,如多個(gè)處理單元、處理器、存儲(chǔ)器、發(fā)射器和接收器等。所述處理系統(tǒng)400可包括配備一個(gè)或多個(gè)輸入/輸出設(shè)備,如揚(yáng)聲器、麥克風(fēng)、鼠標(biāo)、觸摸屏、按鍵、鍵盤、打印機(jī)和顯示器等的處理單元401。所述處理單元401可包括中央處理器(centralprocessingunit,CPU)410、存儲(chǔ)器420、海量存儲(chǔ)設(shè)備430、網(wǎng)絡(luò)接口450、I/O接口460和與總線440連接的天線電路470。所述處理單元401還包括與所述天線電路連接的天線振子475。所述總線440可為任何類型的若干總線架構(gòu)中的一個(gè)或多個(gè),包括存儲(chǔ)總線或存儲(chǔ)控制器、外設(shè)總線、視頻總線等。所述CPU410可包括任何類型的電子數(shù)據(jù)處理器。所述存儲(chǔ)器420可包括任何類型的系統(tǒng)存儲(chǔ)器,如靜態(tài)隨機(jī)存取存儲(chǔ)器(staticrandomaccessmemory,SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(dynamicrandomaccessmemory,DRAM)、同步DRAM(synchronousdynamicrandomaccessmemory,SDRAM)、只讀存儲(chǔ)器(read-onlymemory,ROM)或其組合等。在一實(shí)施例中,所述存儲(chǔ)器420可包括啟動(dòng)時(shí)使用的ROM和執(zhí)行程序時(shí)使用的用于存儲(chǔ)程序和數(shù)據(jù)的DRAM。所述海量存儲(chǔ)設(shè)備430可包括任何類型的存儲(chǔ)設(shè)備,用于存儲(chǔ)數(shù)據(jù)、程序和其他信息,并使得所述數(shù)據(jù)、程序和其他信息可通過所述總線440訪問。所述海量存儲(chǔ)設(shè)備430可以包括,例如,固態(tài)硬盤、硬盤驅(qū)動(dòng)器、磁盤驅(qū)動(dòng)器或光盤驅(qū)動(dòng)器等中的一個(gè)或多個(gè)。所述I/O接口460可提供接口來將外部輸入輸出設(shè)備耦合至處理單元401。所述I/O接口460可包括視頻適配器。例如,輸入輸出設(shè)備可包括耦合至所述視頻適配器的顯示器和耦合至所述I/O接口的鼠標(biāo)/鍵盤/打印機(jī)。其他設(shè)備可耦合至所述處理單元401,并且可利用額外或更少的接口卡。例如,可使用如通用串行總線(UniversalSerialBus,USB)(未示出)等串行接口為打印機(jī)提供接口。所述天線電路470和天線振子475可允許所述處理單元401通過網(wǎng)絡(luò)與遠(yuǎn)端機(jī)通信。在一實(shí)施例中,所述天線電路470和天線振子475提供接入無線廣域網(wǎng)(wirelesswideareanetwork,WAN)和/或接入蜂窩網(wǎng)絡(luò),如長期演進(jìn)(LongTermEvolution,LTE)網(wǎng)絡(luò)、碼分多址接入(CodeDivisionMultipleAccess,CDMA)網(wǎng)絡(luò)、寬帶CDMA(WidebandCodeDivisionMultipleAccess,WCDMA)網(wǎng)絡(luò)和全球移動(dòng)通信系統(tǒng)(GlobalSystemforMobileCommunications,GSM)網(wǎng)絡(luò)。在某些實(shí)施例中,所述天線電路470和天線振子475還可向其他設(shè)備提供藍(lán)牙和/或WiFi連接。所述處理單元401還可包括一個(gè)或多個(gè)網(wǎng)絡(luò)接口450,其中可包括以太網(wǎng)線等有線鏈路,和/或無線鏈路來接入節(jié)點(diǎn)或不同的網(wǎng)絡(luò)。所述網(wǎng)絡(luò)接口401允許所述處理單元401通過網(wǎng)絡(luò)480與遠(yuǎn)端機(jī)通信。例如,所述網(wǎng)絡(luò)接口450可通過一個(gè)或多個(gè)發(fā)射器/發(fā)射天線和一個(gè)或多個(gè)接收器/接收天線提供無線通信。在一實(shí)施例中,所述處理單元401耦合至局域網(wǎng)或廣域網(wǎng)來進(jìn)行數(shù)據(jù)處理和與例如其他處理單元、因特網(wǎng)或遠(yuǎn)端存儲(chǔ)設(shè)施等遠(yuǎn)端機(jī)通信。雖然已經(jīng)詳細(xì)描述了本說明,但是應(yīng)理解,在不脫離附加的權(quán)利要求所定義的本發(fā)明的精神和范圍的情況下可做出各種變化、替換和改變。此外,此處描述的特定的實(shí)施例并不意圖限定本發(fā)明的范圍,本領(lǐng)域技術(shù)人員能簡單從本發(fā)明中獲取的過程、機(jī)械、制造、事物的組成、方式、方法、步驟或現(xiàn)在所存在的或后期所要發(fā)展的可執(zhí)行大體相同的功能或?qū)崿F(xiàn)大體相同的結(jié)果,均作為此處描述的對(duì)應(yīng)的實(shí)施例。相應(yīng)地,所述附加的權(quán)利要求用于包括其范圍內(nèi)的,如過程、機(jī)械、制造、事物的組成、方式、方法或步驟。當(dāng)前第1頁1 2 3 當(dāng)前第1頁1 2 3 
當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1