本發(fā)明涉及數(shù)據(jù)庫(kù)技術(shù)領(lǐng)域,尤其涉及一種事務(wù)之間的時(shí)序確定方法和裝置。
背景技術(shù):
快照隔離(Snapshot Isolation,簡(jiǎn)稱SI)是真實(shí)系統(tǒng)中普遍使用的并發(fā)控制策略,很多主流數(shù)據(jù)庫(kù)產(chǎn)品(例如Oracle,SQL Server,PostgreSQL)均采用SI作為并發(fā)控制機(jī)制。傳統(tǒng)的SI方法使用中心時(shí)鐘分配的時(shí)間戳來(lái)確定事務(wù)在時(shí)間上的先后關(guān)系,并以此來(lái)探測(cè)可能破壞數(shù)據(jù)一致性的沖突操作。由于SI僅使用一個(gè)中心時(shí)鐘分配時(shí)間戳,因此,其需要一個(gè)中心協(xié)調(diào)節(jié)點(diǎn)對(duì)其進(jìn)行調(diào)節(jié),限制了并行度較高的計(jì)算平臺(tái)的擴(kuò)展,降低了整個(gè)系統(tǒng)的擴(kuò)展性和容錯(cuò)能力。
相關(guān)技術(shù)中,為了降低中心時(shí)鐘對(duì)系統(tǒng)的影響,提出了一種分布式快照隔離(Distributed Snapshot Isolation,簡(jiǎn)稱DSI)機(jī)制,并提出了四種不同的實(shí)施方案,其中的“樂(lè)觀協(xié)調(diào)方法”使計(jì)算機(jī)集群中的每一個(gè)節(jié)點(diǎn)都維護(hù)一個(gè)用來(lái)分配時(shí)間戳的本地時(shí)鐘,這樣本地的單節(jié)點(diǎn)事務(wù)只從本地時(shí)鐘獲取時(shí)間戳,但全局的多節(jié)點(diǎn)事務(wù)必須預(yù)先鎖定所有涉及該事務(wù)的節(jié)點(diǎn),并從每一個(gè)節(jié)點(diǎn)獲取一個(gè)時(shí)間戳,且每一個(gè)事務(wù)需要預(yù)先知道它要訪問(wèn)的所有節(jié)點(diǎn)。
因此,雖然上述分布式快照隔離機(jī)制的“樂(lè)觀協(xié)調(diào)方法”不需要中心節(jié)點(diǎn)進(jìn)行協(xié)調(diào),但卻要求每個(gè)事務(wù)事先知道其要訪問(wèn)的所有節(jié)點(diǎn),這對(duì)于實(shí)時(shí)事務(wù)來(lái)說(shuō)基本是不可能實(shí)現(xiàn)的,而且,全局的多節(jié)點(diǎn)事務(wù)需要預(yù)先鎖定該事務(wù)涉及的所有節(jié)點(diǎn),初始化代價(jià)大,成本高。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明提供一種事務(wù)之間的時(shí)序確定方法和裝置,用于解決現(xiàn)有快照隔離方法擴(kuò)展性和可靠性差、成本高的問(wèn)題。
本發(fā)明提供一種事務(wù)之間的時(shí)序確定方法,包括:
獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系;
根據(jù)所述數(shù)據(jù)依賴關(guān)系,確定所述事務(wù)A和所述事務(wù)B之間的數(shù)據(jù)可見(jiàn)性,其中,所述數(shù)據(jù)可見(jiàn)性用于指示對(duì)方事務(wù)的已提交數(shù)據(jù)是否可見(jiàn);
根據(jù)所述數(shù)據(jù)可見(jiàn)性,確定所述事務(wù)A和所述事務(wù)B的發(fā)生時(shí)序。
本發(fā)明還提供一種事務(wù)之間的時(shí)序確定裝置,包括:
依賴關(guān)系獲取模塊,用于獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系;
可見(jiàn)性確定模塊,用于根據(jù)所述依賴關(guān)系獲取模塊獲取到的所述數(shù)據(jù)依賴關(guān)系,確定所述事務(wù)A和所述事務(wù)B之間的數(shù)據(jù)可見(jiàn)性,其中,所述數(shù)據(jù)可見(jiàn)性用于指示對(duì)方事務(wù)的已提交數(shù)據(jù)是否可見(jiàn);
時(shí)序確定模塊,用于根據(jù)所述可見(jiàn)性確定模塊確定的所述數(shù)據(jù)可見(jiàn)性,確定所述事務(wù)A和所述事務(wù)B的發(fā)生時(shí)序。
本發(fā)明提供的事務(wù)之間的時(shí)序確定方法和裝置,通過(guò)獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系,進(jìn)而根據(jù)該數(shù)據(jù)依賴關(guān)系,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)可見(jiàn)性,即利用數(shù)據(jù)可見(jiàn)性指示對(duì)方事務(wù)的已提交數(shù)據(jù)是否可見(jiàn),最后根據(jù)數(shù)據(jù)可見(jiàn)性,確定出事務(wù)A和事務(wù)B的發(fā)生時(shí)序。本發(fā)明的技術(shù)方案,利用事務(wù)之間的可見(jiàn)性來(lái)確定事務(wù)的邏輯時(shí)間戳,也即,事務(wù)通過(guò)與其他事務(wù)協(xié)商來(lái)確定自己的邏輯時(shí)間區(qū)間,進(jìn)而利用邏輯時(shí)間戳來(lái)確定事務(wù)之間的時(shí)序關(guān)系,避免了從中心化的時(shí)鐘獲取時(shí)間戳,消除了中心協(xié)調(diào)節(jié)點(diǎn)存在的必要性,提高了分布式數(shù)據(jù)庫(kù)系統(tǒng)的擴(kuò)展性和可靠性。
附圖說(shuō)明
為了更清楚地說(shuō)明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作一簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例一的流程示意圖;
圖2為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例二的流程示意圖;
圖3為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例三的流程示意圖;
圖4為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例四的流程示意圖;
圖5為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例五的流程示意圖;
圖6為本發(fā)明提供的事務(wù)之間的時(shí)序確定裝置實(shí)施例一的結(jié)構(gòu)示意圖;
圖7為本發(fā)明提供的事務(wù)之間的時(shí)序確定裝置實(shí)施例二的結(jié)構(gòu)示意圖;
圖8為本發(fā)明提供的事務(wù)之間的時(shí)序確定裝置實(shí)施例三的結(jié)構(gòu)示意圖。
具體實(shí)施方式
為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有作出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
隨著當(dāng)今計(jì)算平臺(tái)的并行度在不斷地提高,擁有數(shù)百個(gè)核的服務(wù)器在可預(yù)見(jiàn)的未來(lái)會(huì)變得非常普遍,因此,為了應(yīng)對(duì)這種發(fā)展趨勢(shì),眾多研究項(xiàng)目旨在締造能夠適應(yīng)高并行平臺(tái)的數(shù)據(jù)庫(kù)系統(tǒng)。另外,隨著數(shù)據(jù)規(guī)模的快速增長(zhǎng),大規(guī)模集群的橫向擴(kuò)展能力被認(rèn)為是當(dāng)今數(shù)據(jù)庫(kù)系統(tǒng)的一項(xiàng)最重要的能力,眾多并行數(shù)據(jù)庫(kù)系統(tǒng)(包括NoSQL、NewSQL數(shù)據(jù)庫(kù))都是圍繞擴(kuò)展性能力而設(shè)計(jì)的。在高度并行化的平臺(tái)中,由于中心協(xié)調(diào)節(jié)點(diǎn)有可能?chē)?yán)重降低整個(gè)系統(tǒng)的擴(kuò)展性和容錯(cuò)能力,因此,為了提高系統(tǒng)的擴(kuò)展性,很有必要將中心協(xié)調(diào)節(jié)點(diǎn)去掉。
在實(shí)際應(yīng)用中,為了降低中心時(shí)鐘對(duì)系統(tǒng)的影響,在前面提到的分布式快照隔離(DSI)機(jī)制中,還有一種“增量快照方法”,具體的,某一事務(wù)在一個(gè)節(jié)點(diǎn)上啟動(dòng)時(shí),只需要從本地時(shí)鐘獲得時(shí)間戳,而當(dāng)該事務(wù)嘗試訪問(wèn)某個(gè)遠(yuǎn)程節(jié)點(diǎn)上的數(shù)據(jù)時(shí),才需要從該遠(yuǎn)程節(jié)點(diǎn)上獲取一個(gè)合適的時(shí)間戳。在該方法中,為了確保遠(yuǎn)程時(shí)間戳的有效性,系統(tǒng)需要維護(hù)一個(gè)從本地時(shí)鐘到全局時(shí)鐘的映射,此時(shí),每一個(gè)節(jié)點(diǎn)都需要和中心協(xié)調(diào)節(jié)點(diǎn)進(jìn)行交互來(lái)保證該映射的正確性。雖然“增量快照方法”不需要預(yù)先知道事務(wù)將要訪問(wèn)的節(jié)點(diǎn),但是需要維護(hù)更新從本地時(shí)鐘到全局時(shí)鐘的映射,每個(gè)節(jié)點(diǎn)都需要以一定頻率和中心協(xié)調(diào)節(jié)點(diǎn)進(jìn)行通信,因此,在該方法中,中心協(xié)調(diào)節(jié)點(diǎn)還是不可缺少的,使得系統(tǒng)的擴(kuò)展性受到限制,當(dāng)中心協(xié)調(diào)節(jié)點(diǎn)失效時(shí),將導(dǎo)致系統(tǒng)癱瘓。
進(jìn)一步的,為了降低中心時(shí)鐘對(duì)系統(tǒng)的影響,還可使用同步物理時(shí)鐘來(lái)實(shí)現(xiàn)事務(wù)之間的并發(fā)機(jī)制,具體的,使用同步物理時(shí)鐘來(lái)分配快照和提交時(shí)間戳,事務(wù)的快照時(shí)間戳從事務(wù)啟動(dòng)節(jié)點(diǎn)上的時(shí)鐘獲取,對(duì)于更新事務(wù)的提交時(shí)間戳,若為單節(jié)點(diǎn)更新事務(wù),則提交時(shí)間戳直接從更新數(shù)據(jù)所在節(jié)點(diǎn)上的時(shí)鐘獲取,若為多節(jié)點(diǎn)更新事務(wù),則通過(guò)多節(jié)點(diǎn)時(shí)鐘的協(xié)商來(lái)確定事務(wù)的提交時(shí)間戳。在該方法中,時(shí)鐘的同步可能導(dǎo)致時(shí)間上的偏移,進(jìn)而導(dǎo)致事務(wù)的快照時(shí)間戳對(duì)應(yīng)的數(shù)據(jù)快照不可用,這時(shí)事務(wù)的操作就必須阻塞直到該數(shù)據(jù)快照可用為止。為了處理這種偏移,同步物理時(shí)鐘會(huì)給事務(wù)分配一個(gè)比較靠前的快照時(shí)間戳,以此來(lái)減少事務(wù)阻塞的可能性,但這種方案比較復(fù)雜,并且因?yàn)闀r(shí)間偏移可能導(dǎo)致嚴(yán)重的性能損失。
針對(duì)上述技術(shù)問(wèn)題,本發(fā)明提出了一種事務(wù)之間的時(shí)序確定方法和裝置,用于解決現(xiàn)有快照隔離方法擴(kuò)展性和可靠性差、成本高的問(wèn)題。下面,通過(guò)具體實(shí)施例對(duì)本申請(qǐng)所示的技術(shù)方案進(jìn)行詳細(xì)說(shuō)明。
需要說(shuō)明的是,下面這幾個(gè)具體的實(shí)施例可以相互結(jié)合,對(duì)于相同或相似的概念或過(guò)程可能在某些實(shí)施例中不再贅述。為了便于理解,下面先對(duì)各個(gè)實(shí)施例可能所涉及到的基本概念進(jìn)行定義和說(shuō)明。
1、可見(jiàn)性
假設(shè)ti和tj為兩個(gè)不同的事務(wù),則ti對(duì)于tj是可見(jiàn)的(用ti→tj表示),當(dāng)且僅當(dāng)ti寫(xiě)的全部數(shù)據(jù)對(duì)于tj都是可見(jiàn)的;ti對(duì)于tj是不可見(jiàn)的(用表示),當(dāng)且僅當(dāng)ti寫(xiě)的全部數(shù)據(jù)對(duì)于tj都是不可見(jiàn)的。
值得說(shuō)明的是,可見(jiàn)性的定義中,事務(wù)寫(xiě)的數(shù)據(jù)均指已提交的數(shù)據(jù),對(duì)于未提交的數(shù)據(jù)只在事務(wù)內(nèi)部可見(jiàn),在事務(wù)外部是不可見(jiàn)的。
因此,基于可見(jiàn)性的定義可知,事務(wù)t可見(jiàn)的數(shù)據(jù)快照由兩部分組成:事務(wù)t開(kāi)始前已提交的數(shù)據(jù)版本和對(duì)于事務(wù)t可見(jiàn)的全部事務(wù)寫(xiě)的數(shù)據(jù)版本,因此,一旦事務(wù)之間的可見(jiàn)性關(guān)系(決定事務(wù)的提交順序)確定,就可以推出每個(gè)事務(wù)可見(jiàn)的數(shù)據(jù)快照(決定事務(wù)可見(jiàn)的數(shù)據(jù)版本),進(jìn)而就可以確定整個(gè)事務(wù)集合的調(diào)度順序。
2、可見(jiàn)性調(diào)度
假設(shè)給定一個(gè)事務(wù)的集合T={t0,t1,t2,….,tn},那么T的一個(gè)可見(jiàn)性調(diào)度可以是這樣一個(gè)映射S:T×T→{可見(jiàn),不可見(jiàn)},對(duì)于任何兩個(gè)事務(wù)ti、tj∈T(i≠j),或者ti→tj,或者
可見(jiàn)性調(diào)度是在每?jī)蓚€(gè)事務(wù)之間確定的一種可見(jiàn)性關(guān)系(可見(jiàn)性是一個(gè)二元關(guān)系),然而并不是任意的可見(jiàn)性調(diào)度都是可執(zhí)行的。舉例來(lái)說(shuō),如果兩個(gè)事務(wù)相互之間是可見(jiàn)的,則這個(gè)事務(wù)集合就不可能存在一個(gè)可執(zhí)行的調(diào)度順序。因此一個(gè)可見(jiàn)性調(diào)度必須要滿足其他的一些約束條件才能是實(shí)際可執(zhí)行的,下面將對(duì)其進(jìn)行說(shuō)明。
一個(gè)事務(wù)集合的實(shí)際調(diào)度是由事務(wù)的讀/寫(xiě)操作相互交錯(cuò)而產(chǎn)生的一個(gè)操作序列,在這個(gè)操作序列中能夠產(chǎn)生三種可能的數(shù)據(jù)依賴關(guān)系:
1)寫(xiě)-讀依賴關(guān)系:如果ti在tj讀數(shù)據(jù)A之前寫(xiě)了數(shù)據(jù)A并且提交,則ti與tj之間存在寫(xiě)-讀依賴關(guān)系,用表示。
2)讀-寫(xiě)依賴關(guān)系:如果ti在tj寫(xiě)數(shù)據(jù)A之前讀了數(shù)據(jù)A,則ti與tj之間存在讀-寫(xiě)依賴關(guān)系,用表示。
3)寫(xiě)-寫(xiě)依賴關(guān)系:如果ti在tj寫(xiě)數(shù)據(jù)A之前寫(xiě)了數(shù)據(jù)A并且提交,則ti與tj之間存在寫(xiě)-寫(xiě)依賴關(guān)系,用表示。
因此,從這些數(shù)據(jù)依賴關(guān)系可以推斷出事務(wù)之間的可見(jiàn)性關(guān)系,舉例來(lái)說(shuō),如果則可以推斷出是不可能的,因?yàn)閠j讀了ti寫(xiě)的數(shù)據(jù);如果則可以推斷出tj→ti是不可能的。對(duì)于可見(jiàn)性調(diào)度S,如果存在一個(gè)實(shí)際調(diào)度X,使得從X推斷出的事務(wù)可見(jiàn)性關(guān)系與S是一致的,則S是實(shí)際可執(zhí)行的。
3、可執(zhí)行的可見(jiàn)性調(diào)度
給定一個(gè)事務(wù)的集合T={t0,t1,t2,….,tn},S是T的一個(gè)可見(jiàn)性調(diào)度,則S是可執(zhí)行的,當(dāng)且僅當(dāng)S與一個(gè)實(shí)際調(diào)度X保持一致。S與X是保持一致的,當(dāng)且僅當(dāng)滿足:對(duì)于任何兩個(gè)事務(wù)ti、tj∈T(i≠j),(1)如果在X中,則ti→tj在S中;(2)如果在X中,則在S中;(3)如果在X中,則ti→tj在S中。值得說(shuō)明的是,一個(gè)可執(zhí)行的可見(jiàn)性調(diào)度至少需要與一個(gè)實(shí)際調(diào)度保持一致。
值得說(shuō)明的是,為了描述的方便性,在發(fā)明實(shí)施例中,可選的,用事務(wù)ti表示事務(wù)A,用事務(wù)tj表示事務(wù)B。
圖1為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例一的流程示意圖。本發(fā)明實(shí)施例主要以事務(wù)集合中的兩個(gè)事務(wù)進(jìn)行舉例說(shuō)明。具體的,如圖1所示,本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法,包括:
步驟101:獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系;
一般來(lái)說(shuō),給定的事務(wù)集合通常為T(mén)={t0,t1,t2,….,tn},其可包括多個(gè)事務(wù),而且,事務(wù)與事務(wù)之間均具有一定的數(shù)據(jù)依賴關(guān)系??蛇x的,本發(fā)明實(shí)施例均以事務(wù)集合T中的兩個(gè)事務(wù)(ti、tj∈T,其中i≠j)之間的數(shù)據(jù)依賴關(guān)系為例進(jìn)行說(shuō)明,也即,事務(wù)A與事務(wù)B之間的數(shù)據(jù)依賴關(guān)系。
具體的,在本實(shí)施例中可將事務(wù)之間的數(shù)據(jù)依賴關(guān)系記錄在依賴關(guān)系表中,進(jìn)而通過(guò)查詢?cè)撘蕾囮P(guān)系表即可獲取到事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系。
步驟102:根據(jù)上述數(shù)據(jù)依賴關(guān)系,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)可見(jiàn)性;
其中,數(shù)據(jù)可見(jiàn)性用于指示對(duì)方事務(wù)的已提交數(shù)據(jù)是否可見(jiàn)。
具體的,本發(fā)明實(shí)施例中的數(shù)據(jù)可見(jiàn)性與前述的可見(jiàn)性一致。由上述可知,根據(jù)數(shù)據(jù)依賴關(guān)系可推斷出事務(wù)之間的可見(jiàn)性關(guān)系,并且,可見(jiàn)性的定義中指出事務(wù)寫(xiě)的數(shù)據(jù)均指已提交的數(shù)據(jù),其在事務(wù)外部可見(jiàn),對(duì)于未提交的數(shù)據(jù)只在事務(wù)內(nèi)部可見(jiàn),在事務(wù)外部是不可見(jiàn)的。因此,根據(jù)步驟101中確定的事務(wù)A與事務(wù)B之間的數(shù)據(jù)依賴關(guān)系,可確定出事務(wù)A與事務(wù)B之間的數(shù)據(jù)可見(jiàn)性。
步驟103:根據(jù)數(shù)據(jù)可見(jiàn)性,確定事務(wù)A和事務(wù)B的發(fā)生時(shí)序。
下述結(jié)合事務(wù)之間的一致可見(jiàn)性(CV)定義,對(duì)步驟103進(jìn)行說(shuō)明。
具體的,給定一個(gè)事務(wù)的集合T={t0,t1,t2,….,tn},S是T的一個(gè)調(diào)度,則S是滿足CV的,當(dāng)且僅當(dāng)S滿足:(1)對(duì)于任何兩個(gè)事務(wù)ti、tj∈T(i≠j),在S中或者ti→tj,或者(沒(méi)有部分可見(jiàn)或者臨時(shí)可見(jiàn));(2)對(duì)于任何兩個(gè)事務(wù)ti、tj∈T(i≠j),如果ti→tj,則(3)如果ti和tj相互之間不可見(jiàn),則ti與tj之間不存在寫(xiě)-寫(xiě)依賴關(guān)系。
值得說(shuō)明的是,一個(gè)實(shí)際調(diào)度是滿足CV的,僅當(dāng)至少有一個(gè)與之一致的可見(jiàn)性調(diào)度是滿足CV的。
對(duì)于條件(2),CV在任何兩個(gè)事務(wù)之間確定一個(gè)順序,即如果ti→tj,那么ti就被當(dāng)作在tj開(kāi)始之前已經(jīng)提交的事務(wù),因此ti與tj之間不可能是相互可見(jiàn)的;對(duì)于條件(3),如果兩個(gè)事務(wù)相互之間不可見(jiàn),則這兩個(gè)事務(wù)是并發(fā)進(jìn)行的,不能同時(shí)對(duì)相同的數(shù)據(jù)進(jìn)行更新。
因此,在確定出兩個(gè)事務(wù)之間的數(shù)據(jù)可見(jiàn)性關(guān)系時(shí),便可確定出事務(wù)A和事務(wù)B的發(fā)生時(shí)序。
本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法中,通過(guò)獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系,進(jìn)而根據(jù)該數(shù)據(jù)依賴關(guān)系,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)可見(jiàn)性,即利用數(shù)據(jù)可見(jiàn)性指示對(duì)方事務(wù)的已提交數(shù)據(jù)是否可見(jiàn),最后根據(jù)數(shù)據(jù)可見(jiàn)性,確定出事務(wù)A和事務(wù)B的發(fā)生時(shí)序。本發(fā)明的技術(shù)方案,利用事務(wù)之間的可見(jiàn)性來(lái)確定事務(wù)的邏輯時(shí)間戳,也即,事務(wù)通過(guò)與其他事務(wù)協(xié)商來(lái)確定自己的邏輯時(shí)間區(qū)間,進(jìn)而利用邏輯時(shí)間戳來(lái)確定事務(wù)之間的時(shí)序關(guān)系,避免了從中心化的時(shí)鐘獲取時(shí)間戳,消除了中心協(xié)調(diào)節(jié)點(diǎn)存在的必要性,提高了分布式數(shù)據(jù)庫(kù)系統(tǒng)的擴(kuò)展性和可靠性。
進(jìn)一步的,在圖1所示實(shí)施例的基礎(chǔ)上,獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系(步驟101),可通過(guò)如下可行的實(shí)現(xiàn)方式實(shí)現(xiàn),具體的,請(qǐng)參照?qǐng)D2所示實(shí)施例。
圖2為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例二的流程示意圖。本發(fā)明實(shí)施例是在上述實(shí)施例的基礎(chǔ)上對(duì)事務(wù)之間的時(shí)序確定方法的進(jìn)一步說(shuō)明。如圖2所示,在本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法中,上述步驟101(獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系),包括:
步驟201:獲取數(shù)據(jù)元組的訪問(wèn)記錄;
其中,該訪問(wèn)記錄包括:事務(wù)A和事務(wù)B對(duì)每個(gè)數(shù)據(jù)元組的訪問(wèn)事件、以及訪問(wèn)事件的發(fā)生時(shí)間。
具體的,分布式數(shù)據(jù)庫(kù)系統(tǒng)中的每個(gè)事務(wù)均分配有唯一的事務(wù)編號(hào)(用TID表示),并且系統(tǒng)中的數(shù)據(jù)元組,其每個(gè)版本都記錄有一個(gè)事務(wù)編號(hào)(TID)列表,表示TID列表中的事務(wù)對(duì)數(shù)據(jù)元組的該版本具有訪問(wèn)關(guān)系。因此,每個(gè)數(shù)據(jù)元組都對(duì)應(yīng)有一個(gè)訪問(wèn)列表,該訪問(wèn)列表中記錄有處于活躍狀態(tài)并且已經(jīng)訪問(wèn)過(guò)該數(shù)據(jù)元組的所有事務(wù)的事務(wù)編號(hào)。所以,在本實(shí)施例中可通過(guò)查找數(shù)據(jù)元組的訪問(wèn)列表來(lái)獲取數(shù)據(jù)元組的訪問(wèn)記錄。
步驟202:根據(jù)事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組的訪問(wèn)事件、以及訪問(wèn)事件的發(fā)生時(shí)間,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系。
具體的,假設(shè)事務(wù)集合中的事務(wù)A和事務(wù)B均對(duì)目標(biāo)數(shù)據(jù)元組發(fā)生了訪問(wèn)事件,根據(jù)訪問(wèn)事件的發(fā)生時(shí)間,便能確定出事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系。
可選的,在分布式數(shù)據(jù)庫(kù)系統(tǒng)中,對(duì)數(shù)據(jù)元組有訪問(wèn)關(guān)系的事務(wù)之間維護(hù)有一個(gè)依賴關(guān)系表,用來(lái)記錄活躍事務(wù)之間的讀-寫(xiě)依賴關(guān)系。在依賴關(guān)系表中,若活躍事務(wù)tj在活躍事務(wù)ti寫(xiě)數(shù)據(jù)元組A之前讀了數(shù)據(jù)元組A,那么tj與ti之間的讀-寫(xiě)依賴關(guān)系記為
本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法,通過(guò)獲取數(shù)據(jù)元組的訪問(wèn)記錄來(lái)獲取事務(wù)A和事務(wù)B對(duì)每個(gè)數(shù)據(jù)元組的訪問(wèn)事件、以及該訪問(wèn)事件的發(fā)生時(shí)間,進(jìn)而根據(jù)事務(wù)A和事務(wù)B對(duì)目標(biāo)的數(shù)據(jù)元組的訪問(wèn)事件、以及訪問(wèn)事件的發(fā)生時(shí)間,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系。本發(fā)明的技術(shù)方案,通過(guò)訪問(wèn)記錄來(lái)記錄事務(wù)在目標(biāo)數(shù)據(jù)元組上的讀操作,利用訪問(wèn)記錄來(lái)判定事務(wù)之間的讀寫(xiě)沖突,能夠確定出事務(wù)之間的數(shù)據(jù)依賴關(guān)系,為后續(xù)確定事務(wù)之間的時(shí)序奠定了基礎(chǔ)。
可選的,圖3為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例三的流程示意圖。本發(fā)明實(shí)施例是在實(shí)施例一和實(shí)施例二的基礎(chǔ)上對(duì)事務(wù)之間的時(shí)序確定方法的完整性說(shuō)明。具體的,如圖3所示,本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法,包括:
步驟301:事務(wù)集合中的每個(gè)事務(wù)被分配一個(gè)唯一的事務(wù)編號(hào)(TID);
步驟302:數(shù)據(jù)元組的每個(gè)版本上均記錄有一個(gè)TID,每個(gè)數(shù)據(jù)元組對(duì)應(yīng)有一個(gè)訪問(wèn)列表;
具體的,事務(wù)編號(hào)表示產(chǎn)生數(shù)據(jù)元組相應(yīng)版本的事務(wù),每個(gè)數(shù)據(jù)元組對(duì)應(yīng)的有一個(gè)訪問(wèn)列表,該訪問(wèn)列表用于記錄處于活躍狀態(tài)并且已經(jīng)訪問(wèn)過(guò)該數(shù)據(jù)元組的所有事務(wù)的TID。
步驟303:事務(wù)之間的時(shí)序確定方法維護(hù)一個(gè)數(shù)據(jù)依賴關(guān)系表;
其中,該數(shù)據(jù)依賴關(guān)系表用來(lái)記錄活躍事務(wù)之間的讀-寫(xiě)依賴關(guān)系。
步驟304:當(dāng)事務(wù)對(duì)數(shù)據(jù)元組進(jìn)行讀操作時(shí),根據(jù)上述數(shù)據(jù)依賴關(guān)系表確定該事務(wù)需要訪問(wèn)的數(shù)據(jù)元祖的版本,更新該數(shù)據(jù)元組對(duì)應(yīng)的訪問(wèn)列表。
具體的,當(dāng)tj讀一個(gè)數(shù)據(jù)元組時(shí),總是先讀該數(shù)據(jù)元組最新的版本,如果該版本的事務(wù)編號(hào)是ti并且存在于依賴關(guān)系表中,則該版本對(duì)于tj不可見(jiàn)的(因?yàn)橐馕吨?,此時(shí)tj開(kāi)始讀該數(shù)據(jù)元組舊的版本;否則,當(dāng)并不存在于依賴關(guān)系表中時(shí),tj讀取該版本,并且在讀的同時(shí)將自己的TID記錄在該數(shù)據(jù)元組的訪問(wèn)列表中。
步驟305:當(dāng)事務(wù)對(duì)數(shù)據(jù)元組進(jìn)行寫(xiě)訪問(wèn)時(shí),對(duì)該數(shù)據(jù)元組施加排它鎖直到該數(shù)據(jù)元組的版本提交。
具體的,當(dāng)tj對(duì)數(shù)據(jù)元組進(jìn)行寫(xiě)操作時(shí),首先對(duì)該數(shù)據(jù)元組施加排它鎖,用于控制除該事務(wù)tj外的其他事務(wù)對(duì)該數(shù)據(jù)元組不可寫(xiě),并且在該tj事務(wù)提交該數(shù)據(jù)元組時(shí),立刻釋放該數(shù)據(jù)元組上的排它鎖,也即,一旦tj事務(wù)提交該數(shù)據(jù)元組,則新產(chǎn)生的該數(shù)據(jù)元組的版本對(duì)于其他事務(wù)立刻可見(jiàn)。
需要注意的是,在事務(wù)tj獲得排它鎖之后,檢查以下條件能否被滿足:(i)如果事務(wù)tj已經(jīng)讀過(guò)該數(shù)據(jù)元組,則讀到的版本必須是該數(shù)據(jù)元組最新的版本;(ii)如果該數(shù)據(jù)元組最新版本的TID是ti,則不在依賴關(guān)系表中。如果上述兩個(gè)條件之中的任意一個(gè)沒(méi)有滿足,則事務(wù)tj需要進(jìn)行回滾操作,將該事務(wù)tj對(duì)該數(shù)據(jù)元組的操作清除,這是因?yàn)槭聞?wù)tj的并發(fā)事務(wù)已經(jīng)完成對(duì)該元組的更新并且已經(jīng)提交。
步驟306:當(dāng)事務(wù)將其寫(xiě)訪問(wèn)的數(shù)據(jù)元組提交時(shí),更新該數(shù)據(jù)元組的訪問(wèn)列表,以及在事務(wù)將其寫(xiě)訪問(wèn)的數(shù)據(jù)元組提交后,更新事務(wù)之間的數(shù)據(jù)依賴關(guān)系表。
具體的,當(dāng)事務(wù)tj提交時(shí),遍歷事務(wù)tj更新過(guò)的所有數(shù)據(jù)元組的訪問(wèn)列表,對(duì)每一個(gè)事務(wù)編號(hào)TID(例如,事務(wù)ti),將加入數(shù)據(jù)依賴關(guān)系表。當(dāng)事務(wù)tj提交之后,將事務(wù)tj從所有的訪問(wèn)列表中移除,并且刪除所有與事務(wù)tj有依賴關(guān)系的事務(wù),例如,對(duì)于每一個(gè)事務(wù)tk,將從數(shù)據(jù)依賴關(guān)系表中移除。
為了證明上述事務(wù)之間時(shí)序確定方法的正確性,需要證明由該方法中的每一個(gè)操作步驟均滿足上述一致可見(jiàn)性(CV)定義中的所有條件。下面對(duì)圖3所示實(shí)施例的步驟進(jìn)行證明:
首先,該圖3所示實(shí)施例的事務(wù)之間時(shí)序確定方法不會(huì)導(dǎo)致一個(gè)事務(wù)更新的數(shù)據(jù)對(duì)其他事務(wù)部分可見(jiàn)或者臨時(shí)可見(jiàn),這是由一致可見(jiàn)性(CV)的定義決定的。由上述步驟305可知,一個(gè)事務(wù)提交后它對(duì)數(shù)據(jù)元組的所有更新對(duì)于其他事務(wù)立即可見(jiàn),如果事務(wù)ti更新的數(shù)據(jù)元組對(duì)于事務(wù)tj是可見(jiàn)的,則ti更新的所有數(shù)據(jù)元組對(duì)于tj都是可見(jiàn)的,這可避免出現(xiàn)數(shù)據(jù)元組對(duì)其他事務(wù)部分可見(jiàn)。
進(jìn)一步的,數(shù)據(jù)元組對(duì)其他事務(wù)臨時(shí)可見(jiàn)在本發(fā)明的事務(wù)之間的時(shí)序確定方法中也是不可能發(fā)生的。具體的,如果tj在ti提交之前讀了ti嘗試更新的元組,則有存在于依賴關(guān)系表中(根據(jù)步驟306可知),因此tj不能讀ti更新的任一數(shù)據(jù)元組的版本。因此,其滿足一致可見(jiàn)性(CV)定義的條件(1)。
其次,要證明本發(fā)明的事務(wù)之間的時(shí)序確定方法滿足一致可見(jiàn)性(CV)定義的條件(2),只需要考慮有數(shù)據(jù)依賴關(guān)系的事務(wù)之間的可見(jiàn)性關(guān)系,對(duì)于沒(méi)有數(shù)據(jù)依賴關(guān)系的事務(wù),它們之間的可見(jiàn)性關(guān)系可以是任意的,并且始終滿足條件(2)。
如果事務(wù)ti與事務(wù)tj之間存在ti→tj,則可以推出或者上述步驟305保證了只有已經(jīng)提交的數(shù)據(jù)元組的版本更新對(duì)于其他事務(wù)才是可見(jiàn)的,因此ti肯定在tj開(kāi)始之前提交,也就不可能存在,因此對(duì)于每一個(gè)實(shí)際執(zhí)行方案,都能找到一個(gè)一致的可見(jiàn)性調(diào)度使得ti→tj、tj→ti不可能同時(shí)存在。因此,一致可見(jiàn)性(CV)定義的條件(2)得到了滿足。
最后,上述步驟305可確保兩個(gè)并發(fā)事務(wù)不能更新相同的元組。如果同時(shí)存在,則可以推出并且如果事務(wù)ti在事務(wù)tj之前提交,ti會(huì)將加入依賴關(guān)系表,只有當(dāng)ti完成寫(xiě)操作并提交之后,tj才能獲得ti更新過(guò)的數(shù)據(jù)元組上的排它鎖,這時(shí)已經(jīng)存在于依賴關(guān)系表中,根據(jù)步驟305事務(wù)tj需要回滾;同樣,如果事務(wù)tj在事務(wù)ti之前提交,則事務(wù)ti需要回滾。因此,一致可見(jiàn)性(CV)定義的條件(3)得到了滿足。
綜上所述,本發(fā)明提供的事務(wù)之間的時(shí)序確定方法滿足CV定義。從定義上考慮,CV強(qiáng)于現(xiàn)有的讀已提交和可重復(fù)讀兩種隔離級(jí)別,能夠保證每個(gè)事務(wù)見(jiàn)到的是一個(gè)滿足一致性的數(shù)據(jù)快照。
可選的,在上述任一實(shí)施例的基礎(chǔ)上,為了進(jìn)一步提高事務(wù)之間時(shí)序確定的準(zhǔn)確度,下述實(shí)施例在確定事務(wù)之間的時(shí)序時(shí)引入時(shí)間的概念,相應(yīng)的,事務(wù)之間的時(shí)序確定方法的具體實(shí)現(xiàn)步驟可參照下述各實(shí)施例。
值得說(shuō)明的是,上述實(shí)施例中給出的相關(guān)概念和定義,對(duì)于下述實(shí)施例同樣適用。
可選的,為了有效說(shuō)明事務(wù)A與事務(wù)B映射到時(shí)間軸上時(shí),事務(wù)之間的存在一個(gè)統(tǒng)一的時(shí)間先后順序,下面首先給出后驗(yàn)快照隔離的定義。
后驗(yàn)快照隔離(PostSI):
假設(shè)(s,c)表示一個(gè)時(shí)間區(qū)間,其中s,c分別表示事務(wù)開(kāi)始時(shí)間和事務(wù)提交時(shí)間,并且滿足s<c,用I表示這樣一個(gè)時(shí)間區(qū)間的集合。給定一個(gè)事務(wù)的集合T={t0,t1,t2,….,tn},S是T的一個(gè)可見(jiàn)性調(diào)度,則S是滿足SI定義的調(diào)度,當(dāng)且僅當(dāng)可以找到一個(gè)T到I的映射F:T→I,滿足:(1)對(duì)于任何兩個(gè)事務(wù)ti、tj∈T(i≠j),在S中或者ti→tj,或者(2)假設(shè)F(ti)=(si,ci),F(xiàn)(tj)=(sj,cj),則ti→tj存在于S中,當(dāng)且僅當(dāng)滿足ci≤sj;(3)如果cj>si>sj,或者ci>sj>si(即兩個(gè)事務(wù)的時(shí)間區(qū)間有重疊),則ti與tj之間不存在寫(xiě)-寫(xiě)依賴關(guān)系。
后驗(yàn)快照隔離的定義需要事務(wù)之間的可見(jiàn)性關(guān)系來(lái)確定它們?cè)跁r(shí)間上的先后關(guān)系,一個(gè)事務(wù)能夠見(jiàn)到在它開(kāi)始之前提交的所有事務(wù)更新的數(shù)據(jù)元組的版本(后驗(yàn)快照隔離定義中的條件(2)),另外所有更新事務(wù)的提交都遵從一個(gè)全局的順序(后驗(yàn)快照隔離定義中的條件(3)),至于后驗(yàn)快照隔離定義中的條件(1)已經(jīng)在可見(jiàn)性調(diào)度的定義中得到了滿足。
后驗(yàn)快照隔離的方案不采用物理時(shí)間戳而是通過(guò)事務(wù)之間的可見(jiàn)性關(guān)系來(lái)確定事務(wù)之間時(shí)間上的先后關(guān)系,只要能夠把這種可見(jiàn)性關(guān)系映射至一條時(shí)間軸上,使得事務(wù)之間能夠確定一個(gè)統(tǒng)一的邏輯時(shí)間軸上的先后關(guān)系,則快照隔離的定義就能被滿足。如果只考慮調(diào)度執(zhí)行的最終結(jié)果,在后驗(yàn)快照隔離與傳統(tǒng)的快照隔離之間并不存在語(yǔ)義上的區(qū)別。
可選的,本發(fā)明上述任一實(shí)施例提供的事務(wù)之間的時(shí)序確定方法,還包括:
獲取事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、以及事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間。
具體的,假設(shè)S是事務(wù)集合T的一個(gè)CV調(diào)度,那么S也是一個(gè)滿足快照隔離的調(diào)度,如果能夠找到一個(gè)T到I的映射F:T→I,對(duì)于任何兩個(gè)事務(wù)ti和tj,時(shí)間區(qū)間分別為F(ti)=(si,ci),F(xiàn)(tj)=(sj,cj),滿足以下約束條件:(1)如果ti→tj,則ci≤sj;(2)如果則ci>sj。
事務(wù)之間為了滿足快照隔離的調(diào)度機(jī)制,關(guān)鍵在于給每個(gè)事務(wù)分配一個(gè)合適的時(shí)間區(qū)間。本發(fā)明實(shí)施例不采用物理時(shí)鐘來(lái)確定事務(wù)的時(shí)間區(qū)間,而是在事務(wù)運(yùn)行的過(guò)程中通過(guò)與其他事務(wù)的數(shù)據(jù)依賴關(guān)系來(lái)確定。在后驗(yàn)快照隔離的調(diào)度機(jī)制中,每個(gè)事務(wù)維護(hù)有一個(gè)起始時(shí)間的上/下界(分別用s-和s_表示)和提交時(shí)間的下界(用c_表示),在事務(wù)運(yùn)行過(guò)程中通過(guò)與其他事務(wù)的可見(jiàn)性關(guān)系來(lái)對(duì)s-、s_、c_進(jìn)行調(diào)整,最后根據(jù)s-、s_、c_來(lái)給事務(wù)分配一個(gè)合適的時(shí)間區(qū)間。
因此,為了確定出事務(wù)之間的時(shí)序關(guān)系,首先需要獲取到各事務(wù)的起始時(shí)間和提交時(shí)間。若以兩個(gè)事務(wù)為例進(jìn)行說(shuō)明,則獲取事務(wù)A的起始時(shí)間和提交時(shí)間、以及事務(wù)B的起始時(shí)間和提交時(shí)間。
圖4為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例四的流程示意圖。本發(fā)明實(shí)施例是在上述各實(shí)施例的基礎(chǔ)上對(duì)事務(wù)之間的時(shí)序確定方法的進(jìn)一步說(shuō)明。對(duì)于上述實(shí)施例中給出的定義和說(shuō)明,在本實(shí)施例中同樣適用。具體的,如圖4所示,本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法,還包括:
步驟401:獲取目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間;
通過(guò)分析每個(gè)數(shù)據(jù)元組對(duì)應(yīng)的訪問(wèn)列表,可獲知訪問(wèn)列表中處于活躍狀態(tài)并且已經(jīng)訪問(wèn)過(guò)該目標(biāo)數(shù)據(jù)元組的所有事務(wù)的事務(wù)編號(hào),同時(shí)獲取到該目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間。
步驟402:根據(jù)目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間、事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、以及事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間,確定事務(wù)A的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間、以及事務(wù)B的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間。
具體的,在已知事務(wù)A的起始/提交時(shí)間區(qū)間、事務(wù)B的起始/提交時(shí)間區(qū)間,并獲取到目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間時(shí),可根據(jù)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間來(lái)判斷對(duì)事務(wù)的可見(jiàn)性關(guān)系,并確定出事務(wù)A的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間、以及事務(wù)B的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間。
實(shí)際上,數(shù)據(jù)元組上記錄有一個(gè)產(chǎn)生該數(shù)據(jù)元組的事務(wù)的提交時(shí)間,如果新的事務(wù)訪問(wèn)了該數(shù)據(jù)元組,那么新事務(wù)的開(kāi)始時(shí)間應(yīng)該大于該事務(wù)的提交時(shí)間。數(shù)據(jù)元組上還記錄有最后一個(gè)讀該數(shù)據(jù)元組的事務(wù)的起始時(shí)間,如果新的事務(wù)改動(dòng)了該數(shù)據(jù)元組,那么新事務(wù)的提交時(shí)間應(yīng)該大于該起始時(shí)間。
本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法,通過(guò)獲取目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間,進(jìn)而根據(jù)目標(biāo)數(shù)據(jù)元組的各個(gè)版本更新時(shí)間、事務(wù)A的起始/提交時(shí)間區(qū)間以及事務(wù)B的起始/提交時(shí)間區(qū)間,確定事務(wù)A的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間、以及事務(wù)B的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間,便可保證事務(wù)之間存在一個(gè)統(tǒng)一的時(shí)間先后順序關(guān)系,從而保證得到的時(shí)間區(qū)間是正確的。
作為一種示例,上述步驟202(根據(jù)事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組的訪問(wèn)事件、以及訪問(wèn)事件的發(fā)生時(shí)間,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系)的一種可能實(shí)現(xiàn)方式通過(guò)如下步驟實(shí)現(xiàn)。
具體的,上述步驟202(根據(jù)事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組的訪問(wèn)事件、以及訪問(wèn)事件的發(fā)生時(shí)間,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系),包括:
根據(jù)事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組的訪問(wèn)事件、訪問(wèn)事件的發(fā)生時(shí)間、目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間、事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、以及事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系,并更新事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間。
可選的,首先由步驟201可知,通過(guò)獲取數(shù)據(jù)元組的訪問(wèn)記錄,可獲取到事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組的訪問(wèn)事件、以及訪問(wèn)事件的發(fā)生時(shí)間,因此,當(dāng)事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組進(jìn)行訪問(wèn)時(shí),可獲取到事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組的訪問(wèn)事件、訪問(wèn)事件的發(fā)生時(shí)間;其次,當(dāng)為訪問(wèn)目標(biāo)數(shù)據(jù)元組的事務(wù)分配起始時(shí)間區(qū)間和提交時(shí)間區(qū)間后,通過(guò)訪問(wèn)目標(biāo)數(shù)據(jù)元組的訪問(wèn)列表以及目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間,可確定出事務(wù)A的起始/提交時(shí)間區(qū)間、以及事務(wù)B的起始/提交時(shí)間區(qū)間,最后根據(jù)上述確定的目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間、事務(wù)A的起始/提交時(shí)間區(qū)間、以及事務(wù)B的起始/提交時(shí)間區(qū)間,可實(shí)現(xiàn)對(duì)事務(wù)A和事務(wù)B起始時(shí)間區(qū)間和提交時(shí)間區(qū)間的更新。
值得說(shuō)明的是,如果在更新事務(wù)A、事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間之前來(lái)確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系,那么,本發(fā)明實(shí)施例中采用的事務(wù)A的起始/提交時(shí)間區(qū)間、以及事務(wù)B的起始/提交時(shí)間區(qū)間是未更新的時(shí)間;而如果在更新事務(wù)A、事務(wù)B的起始/提交時(shí)間區(qū)間之后來(lái)確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系,此時(shí)本發(fā)明實(shí)施例中采用的事務(wù)A的起始/提交時(shí)間區(qū)間、事務(wù)B的起始/提交時(shí)間區(qū)間均是更新后的時(shí)間。
進(jìn)一步的,在上述實(shí)施例提供的事務(wù)之間的時(shí)序確定方法中,該方法還包括如下步驟:
在事務(wù)A對(duì)目標(biāo)數(shù)據(jù)元組進(jìn)行寫(xiě)訪問(wèn)時(shí),控制除該事務(wù)A外的其他事務(wù)對(duì)目標(biāo)數(shù)據(jù)元組不可寫(xiě)。
具體的,在事務(wù)A對(duì)目標(biāo)數(shù)據(jù)元組進(jìn)行寫(xiě)訪問(wèn)操作時(shí),首先在給該目標(biāo)數(shù)據(jù)元組上加排它鎖,用于控制除該事務(wù)A外的其他事務(wù)對(duì)目標(biāo)數(shù)據(jù)元組不可寫(xiě),進(jìn)而保證在對(duì)目標(biāo)數(shù)據(jù)元組的值進(jìn)行更改時(shí),只有該事務(wù)A可以對(duì)其操作,也即,在同一時(shí)間,只有一個(gè)事務(wù)能夠?qū)δ繕?biāo)數(shù)據(jù)元組進(jìn)行寫(xiě)訪問(wèn)。
但是,一旦事務(wù)A對(duì)目標(biāo)數(shù)據(jù)元組的寫(xiě)訪問(wèn)結(jié)束,將該目標(biāo)數(shù)據(jù)元組提交時(shí),便立刻釋放目標(biāo)數(shù)據(jù)元組上的排它鎖,則更新后的數(shù)據(jù)元組的新版本對(duì)于其他事務(wù)立刻可見(jiàn)。
更進(jìn)一步的,在本發(fā)明上述實(shí)施例提供的事務(wù)之間的時(shí)序確定方法中,該方法還包括:
事務(wù)A的起始時(shí)間區(qū)間滿足預(yù)設(shè)條件時(shí),刪除事務(wù)A的操作數(shù)據(jù)。
具體的,在本發(fā)明實(shí)施例中事務(wù)A用ti表示,事務(wù)B用tj表示,那么,在事務(wù)ti運(yùn)行期間,如果事務(wù)ti的起始時(shí)間區(qū)間的上下界(上界用si-表示,下界si-用表示)之間出現(xiàn)si->si-,此時(shí),事務(wù)ti必須回滾,也即,需要?jiǎng)h除事務(wù)ti的操作數(shù)據(jù),因?yàn)槭聞?wù)ti已經(jīng)不可能存在一個(gè)有效的起始時(shí)間區(qū)間了。
可選的,在一致可見(jiàn)性定義基礎(chǔ)上提出的事務(wù)之間的時(shí)序確定方法中,當(dāng)引入時(shí)間概念時(shí),下述給出完整性的說(shuō)明。詳細(xì)請(qǐng)參見(jiàn)圖5所示的實(shí)施例。
圖5為本發(fā)明提供的事務(wù)之間的時(shí)序確定方法實(shí)施例五的流程示意圖。本發(fā)明實(shí)施例是在上述各實(shí)施例的基礎(chǔ)上通過(guò)引入起始時(shí)間和提交時(shí)間的概念對(duì)事務(wù)之間的時(shí)序確定方法的完整性說(shuō)明。如圖5所示,本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法中,包括:
步驟501:事務(wù)集合中的每個(gè)事務(wù)被分配一個(gè)唯一的事務(wù)編號(hào)(TID),以及每個(gè)事務(wù)的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間;
具體的,本實(shí)施例中的事務(wù)以事務(wù)B為例進(jìn)行說(shuō)明,且事務(wù)B用事務(wù)tj表示,在事務(wù)tj開(kāi)始時(shí),事務(wù)tj的起始時(shí)間下界sj-和上界提交時(shí)間的下界cj-的初始值分別為的初始值分別為sj-=0、cj-=0。
步驟502:數(shù)據(jù)元組的每個(gè)版本都記錄有一個(gè)讀過(guò)該版本的所有事務(wù)開(kāi)始時(shí)間戳中的最大值(SID)和產(chǎn)生該版本的事務(wù)的提交時(shí)間戳(CID);
每個(gè)數(shù)據(jù)元組都對(duì)應(yīng)有一個(gè)訪問(wèn)列表,該訪問(wèn)列表,用于記錄處于活躍狀態(tài)并且已經(jīng)訪問(wèn)過(guò)該數(shù)據(jù)元組的所有事務(wù)的事務(wù)編號(hào)(TID)。
步驟503:事務(wù)之間的時(shí)序確定方法維護(hù)一個(gè)數(shù)據(jù)依賴關(guān)系表;
具體的,該數(shù)據(jù)依賴關(guān)系表用來(lái)記錄活躍事務(wù)之間的讀-寫(xiě)依賴關(guān)系,由于其他數(shù)據(jù)依賴關(guān)系(寫(xiě)-讀依賴關(guān)系和寫(xiě)-寫(xiě)依賴關(guān)系)不存在數(shù)據(jù)元組版本不一致的情況,在此不予考慮。
步驟504:當(dāng)事務(wù)對(duì)數(shù)據(jù)元組進(jìn)行讀操作時(shí),更新數(shù)據(jù)元組的訪問(wèn)列表,調(diào)整事務(wù)的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間。
具體的,當(dāng)tj讀一個(gè)數(shù)據(jù)元組時(shí),總是先讀該數(shù)據(jù)元組最新的版本。可選的,用cid表示該版本的CID(產(chǎn)生該版本的事務(wù)的提交時(shí)間戳),如果則數(shù)據(jù)元組的該版本對(duì)于tj是不可見(jiàn)的,此時(shí)tj讀取該數(shù)據(jù)元組舊的版本;否則,tj讀取該版本并且在讀的同時(shí)將自己的TID加入該數(shù)據(jù)元組的訪問(wèn)列表中。隨后,事務(wù)tj更新起始/提交時(shí)間區(qū)間的下界,更新規(guī)則為:sj-=max(sj-,cid),cj-=max(sj-,cj-)。
步驟505:當(dāng)事務(wù)對(duì)數(shù)據(jù)元組進(jìn)行寫(xiě)訪問(wèn)時(shí),對(duì)該數(shù)據(jù)元組施加排它鎖直到該數(shù)據(jù)元組更新后的版本提交。
步驟506:當(dāng)事務(wù)將其寫(xiě)訪問(wèn)的數(shù)據(jù)元組提交時(shí),更新該數(shù)據(jù)元組的訪問(wèn)列表以及事務(wù)之間的數(shù)據(jù)依賴關(guān)系表,并確定出該事務(wù)的起始/提交時(shí)間區(qū)間以及更新其他與該事務(wù)存在數(shù)據(jù)依賴關(guān)系的事務(wù)的起始/提交時(shí)間區(qū)間。
首先,當(dāng)事務(wù)tj提交時(shí),遍歷事務(wù)tj更新過(guò)的所有數(shù)據(jù)元組的訪問(wèn)列表,對(duì)每一個(gè)事務(wù)編號(hào)TID(例如,事務(wù)ti),將加入數(shù)據(jù)依賴關(guān)系表。
其次,事務(wù)tj需要確定出其起始/提交時(shí)間區(qū)間,并更新其他事務(wù)的起始/提交時(shí)間區(qū)間。確定和更新過(guò)程如下:
(i)sj:sj=sj-;
(ii)cj:對(duì)于每一個(gè)ti,存在于數(shù)據(jù)依賴關(guān)系表中,設(shè)置cj-=max{cj-,si-}。用S表示tj讀過(guò)的所有版本的SID(也即,讀過(guò)該版本的事務(wù)的開(kāi)始時(shí)間戳中的最大值)的集合,則cj=max({cj-,sj}∪S)+1。
(iii)當(dāng)sj和cj確定之后,需要通知和事務(wù)tj存在數(shù)據(jù)依賴關(guān)系的其它事務(wù)去調(diào)整它們的時(shí)間區(qū)間的上/下界。對(duì)于每一個(gè)事務(wù)tk,存在于依賴關(guān)系表中,有ck-=max{ck-,sj+1}(因?yàn)橥瞥鰐k1/2tj,有ck>sj);對(duì)于每一個(gè)事務(wù)ti,存在于數(shù)據(jù)依賴關(guān)系表中,有si-=min{si-,cj-1}(因?yàn)橥瞥鰐j1/2ti,有cj>si)。
(iv)最后將tj產(chǎn)生的所有數(shù)據(jù)元組的版本的CID設(shè)置為cj(提交時(shí)間),并且對(duì)于tj讀過(guò)的每一個(gè)版本,若有SID<sj,則設(shè)置SID=sj。
當(dāng)tj提交之后,將tj從所有的訪問(wèn)列表中移除,并且對(duì)于每一個(gè)事務(wù)tk,將從數(shù)據(jù)依賴關(guān)系表中移除。
步驟507:事務(wù)運(yùn)行期間的事務(wù)起始時(shí)間區(qū)間滿足預(yù)設(shè)條件時(shí),刪除事務(wù)的操作數(shù)據(jù),更新事務(wù)之間的數(shù)據(jù)依賴關(guān)系表。
具體的,在事務(wù)tj運(yùn)行期間,如果出現(xiàn)sj->sj-,則tj必須回滾,因?yàn)閠j已經(jīng)不可能存在一個(gè)有效的開(kāi)始時(shí)間區(qū)間。
當(dāng)事務(wù)確定起始/提交時(shí)間區(qū)間時(shí)(上述步驟506),只需要確保不會(huì)和時(shí)間區(qū)間的上/下界產(chǎn)生矛盾即可,比如sj-<sj<sj-,cj-<cj。確定起始時(shí)間sj比較簡(jiǎn)單,因?yàn)閟j的值不會(huì)對(duì)后續(xù)事務(wù)產(chǎn)生影響;而確定cj則需要考慮更多,一方面,cj會(huì)被用來(lái)設(shè)置和事務(wù)tj存在讀-寫(xiě)依賴關(guān)系的事務(wù)的上界s-(上述步驟506);另一方面,cj也會(huì)被用來(lái)當(dāng)作tj產(chǎn)生的數(shù)據(jù)元組的版本的CID,進(jìn)而影響后續(xù)事務(wù)的下界s_。如果cj太小或者太大,都有可能導(dǎo)致其他事務(wù)回滾(使得s_>s-),為了盡量減少這種回滾的可能性,本發(fā)明實(shí)施例中事務(wù)之間的時(shí)序確定方法對(duì)cj的設(shè)置如步驟506中所述。
本發(fā)明實(shí)施例中的事務(wù)之間的時(shí)序確定方法是正確的,因?yàn)檎_性(1)每一個(gè)由該方法生成的實(shí)際執(zhí)行調(diào)度都是滿足一致可見(jiàn)性CV定義;正確性(2)該方法滿足后驗(yàn)快照隔離(PostSI)定義的必要條件。具體說(shuō)明如下:
正確性(1)是很明顯的,因?yàn)樵摲椒ㄊ墙⒃谏鲜鰣D3所示實(shí)施例的確定方法基礎(chǔ)之上的;
對(duì)于正確性(2),下面逐一考慮后驗(yàn)快照隔離(PostSI)定義中的條件:
(i)如果存在ti→tj,則可以推出或者那么tj必定訪問(wèn)過(guò)ti產(chǎn)生并且已提交的數(shù)據(jù)元組的版本。根據(jù)該方法中的步驟504,當(dāng)tj讀這個(gè)版本時(shí),會(huì)使得sj-≥ci,而sj-≤sj,因此ci≤sj能被滿足。
(ii)如果存在則可以推出或者或者如果有或者cj≤si,從而有sj<ci;如果有那么tj必定讀了一個(gè)ti嘗試修改的版本,如果在ti訪問(wèn)該版本之前tj已經(jīng)提交,則ti獲取到的SID滿足SID≥sj,根據(jù)步驟506,ci必須大于ti讀到的每一個(gè)數(shù)據(jù)版本的SID,因此有ci>sj;如果在ti訪問(wèn)該數(shù)據(jù)版本之后tj才提交,根據(jù)步驟506,ti會(huì)在提交時(shí)更新sj-,即有ci-≥sj,因此有ci>sj。
綜上所述,本發(fā)明實(shí)施例提供的事務(wù)之間時(shí)序確定方法滿足后驗(yàn)快照隔離(PostSI)定義中的必要條件。
根據(jù)步驟506,在事務(wù)提交時(shí),tj需要把自己的起始/提交時(shí)間區(qū)間通知給每一個(gè)ti(滿足),以及tk(滿足),并發(fā)事務(wù)通過(guò)這種消息傳遞協(xié)商確定各自的時(shí)間區(qū)間。然而ti或者tk有可能接收不到tj的通知,因?yàn)樗鼈冇锌赡茉诮邮盏酵ㄖ熬鸵呀?jīng)提交,但是ti和tk在提交時(shí)會(huì)主動(dòng)和tj進(jìn)行通信,因此可以保證至少有一個(gè)方向的通知會(huì)及時(shí)到達(dá),只要事務(wù)之間的協(xié)商過(guò)程沒(méi)有中斷,最后得到的時(shí)間區(qū)間就是正確的。
以上描述了事務(wù)之間的時(shí)序確定方法的實(shí)現(xiàn)過(guò)程,該過(guò)程可以由事務(wù)之間的時(shí)序確定裝置來(lái)實(shí)現(xiàn),以下將對(duì)事務(wù)之間的時(shí)序確定裝置的內(nèi)部功能和結(jié)構(gòu)進(jìn)行說(shuō)明。對(duì)于本發(fā)明裝置實(shí)施例中未披露的細(xì)節(jié),請(qǐng)參照本發(fā)明方法實(shí)施例中的記載。
圖6為本發(fā)明提供的事務(wù)之間的時(shí)序確定裝置實(shí)施例一的結(jié)構(gòu)示意圖。如圖6所示,本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置,包括:
依賴關(guān)系獲取模塊601,用于獲取事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系;
可見(jiàn)性確定模塊602,用于根據(jù)依賴關(guān)系獲取模塊601獲取到的數(shù)據(jù)依賴關(guān)系,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)可見(jiàn)性;
其中,數(shù)據(jù)可見(jiàn)性用于指示對(duì)方事務(wù)的已提交數(shù)據(jù)是否可見(jiàn)。
時(shí)序確定模塊603,用于根據(jù)可見(jiàn)性確定模塊602確定的數(shù)據(jù)可見(jiàn)性,確定事務(wù)A和事務(wù)B的發(fā)生時(shí)序。
本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置,可用于執(zhí)行如圖1所示事務(wù)之間的時(shí)序確定方法實(shí)施例中的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。
圖7為本發(fā)明提供的事務(wù)之間的時(shí)序確定裝置實(shí)施例二的結(jié)構(gòu)示意圖。本發(fā)明實(shí)施例是在上述實(shí)施例的基礎(chǔ)上對(duì)事務(wù)之間的時(shí)序確定裝置的進(jìn)一步說(shuō)明。如圖7所示,在本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置中,上述依賴關(guān)系獲取模塊601,包括:訪問(wèn)記錄獲取單元701和依賴關(guān)系確定單元702。
該訪問(wèn)記錄獲取單元701,用于獲取數(shù)據(jù)元組的訪問(wèn)記錄;
其中,訪問(wèn)記錄包括:事務(wù)A和事務(wù)B對(duì)每個(gè)數(shù)據(jù)元組的訪問(wèn)事件、以及該訪問(wèn)事件的發(fā)生時(shí)間。
該依賴關(guān)系確定單元702,用于根據(jù)事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組的訪問(wèn)事件、以及該訪問(wèn)事件的發(fā)生時(shí)間,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系。
本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置,可用于執(zhí)行如圖2所示事務(wù)之間的時(shí)序確定方法實(shí)施例中的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。
進(jìn)一步的,在本發(fā)明上述實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置中,該裝置還包括:時(shí)間獲取模塊。
該時(shí)間區(qū)間獲取模塊,用于獲取事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、以及事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間。
圖8為本發(fā)明提供的事務(wù)之間的時(shí)序確定裝置實(shí)施例三的結(jié)構(gòu)示意圖。本發(fā)明實(shí)施例是在上述實(shí)施例的基礎(chǔ)上對(duì)事務(wù)之間的時(shí)序確定裝置的進(jìn)一步說(shuō)明。如圖8所示,本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置,還包括:
更新時(shí)間獲取模塊801,用于獲取目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間;
事務(wù)時(shí)間更新模塊802,用于根據(jù)上述目標(biāo)數(shù)據(jù)元組各個(gè)版本的更新時(shí)間、事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、以及事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間,確定事務(wù)A的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間、以及事務(wù)B的有效起始時(shí)間區(qū)間和有效提交時(shí)間區(qū)間。
本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置,可用于執(zhí)行如圖4所示事務(wù)之間的時(shí)序確定方法實(shí)施例中的技術(shù)方案,其實(shí)現(xiàn)原理和技術(shù)效果類(lèi)似,此處不再贅述。
進(jìn)一步的,在本發(fā)明上述實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置中,上述依賴關(guān)系確定單元702,具體用于根據(jù)事務(wù)A和事務(wù)B對(duì)目標(biāo)數(shù)據(jù)元組各個(gè)版本的訪問(wèn)事件、訪問(wèn)事件的發(fā)生時(shí)間、目標(biāo)數(shù)據(jù)元組的更新時(shí)間、事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、以及事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間,確定事務(wù)A和事務(wù)B之間的數(shù)據(jù)依賴關(guān)系,并更新事務(wù)A的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間、事務(wù)B的起始時(shí)間區(qū)間和提交時(shí)間區(qū)間。
可選的,本發(fā)明上述實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置,還包括:可寫(xiě)性控制模塊。
該可寫(xiě)性控制模塊,用于在事務(wù)A對(duì)目標(biāo)數(shù)據(jù)元組進(jìn)行寫(xiě)訪問(wèn)時(shí),控制除事務(wù)A外的其他事務(wù)對(duì)目標(biāo)數(shù)據(jù)元組不可寫(xiě)。
可選的,本發(fā)明上述實(shí)施例提供的事務(wù)之間的時(shí)序確定裝置,還包括:數(shù)據(jù)刪除模塊。
該數(shù)據(jù)刪除模塊,用于在事務(wù)A的起始時(shí)間區(qū)間滿足預(yù)設(shè)條件時(shí),刪除事務(wù)A的操作數(shù)據(jù)。
本發(fā)明實(shí)施例提供的事務(wù)之間的時(shí)序確定方法和裝置,用邏輯時(shí)間戳來(lái)取代物理時(shí)間戳,允許事務(wù)通過(guò)與其他事務(wù)協(xié)商確定自己的邏輯時(shí)間區(qū)間,并且給出了利用邏輯時(shí)間戳來(lái)確定事務(wù)之間的時(shí)序關(guān)系的具體方案,避免了從中心化的時(shí)鐘獲取時(shí)間戳,從而完全消除了中心協(xié)調(diào)節(jié)點(diǎn)存在的必要性,而去掉中心協(xié)調(diào)節(jié)點(diǎn)之后,系統(tǒng)的擴(kuò)展性瓶頸被去除,單點(diǎn)故障將不復(fù)存在。
可選的,本發(fā)明實(shí)施例的技術(shù)方案適用于多核的單點(diǎn)服務(wù)器和大規(guī)模的并行計(jì)算平臺(tái),提高了分布式數(shù)據(jù)庫(kù)系統(tǒng)的擴(kuò)展性和可靠性。
本領(lǐng)域普通技術(shù)人員可以理解:實(shí)現(xiàn)上述各方法實(shí)施例的全部或部分步驟可以通過(guò)程序指令相關(guān)的硬件來(lái)完成。前述的程序可以存儲(chǔ)于一計(jì)算機(jī)可讀取存儲(chǔ)介質(zhì)中。該程序在執(zhí)行時(shí),執(zhí)行包括上述各方法實(shí)施例的步驟;而前述的存儲(chǔ)介質(zhì)包括:ROM、RAM、磁碟或者光盤(pán)等各種可以存儲(chǔ)程序代碼的介質(zhì)。
最后應(yīng)說(shuō)明的是:以上各實(shí)施例僅用以說(shuō)明本發(fā)明的技術(shù)方案,而非對(duì)其限制;盡管參照前述各實(shí)施例對(duì)本發(fā)明進(jìn)行了詳細(xì)的說(shuō)明,本領(lǐng)域的普通技術(shù)人員應(yīng)當(dāng)理解:其依然可以對(duì)前述各實(shí)施例所記載的技術(shù)方案進(jìn)行修改,或者對(duì)其中部分或者全部技術(shù)特征進(jìn)行等同替換;而這些修改或者替換,并不使相應(yīng)技術(shù)方案的本質(zhì)脫離本發(fā)明各實(shí)施例技術(shù)方案的范圍。