本申請(qǐng)涉及計(jì)算機(jī)領(lǐng)域,尤其涉及一種用于分布式事務(wù)處理的方法及設(shè)備。
背景技術(shù):
隨著互聯(lián)網(wǎng)技術(shù)的發(fā)展,分布式事務(wù)的應(yīng)用越來(lái)越廣泛?;诠蚕泶鎯?chǔ)的分布式事務(wù)數(shù)據(jù)庫(kù)一般包括至少兩個(gè)計(jì)算節(jié)點(diǎn)和一個(gè)數(shù)據(jù)節(jié)點(diǎn),其中所述計(jì)算節(jié)點(diǎn)是指無(wú)需磁盤僅有操作系統(tǒng)的主機(jī),包括一個(gè)主節(jié)點(diǎn)設(shè)備和至少一個(gè)備節(jié)點(diǎn)設(shè)備,而所述數(shù)據(jù)節(jié)點(diǎn)是指高可用的共享存儲(chǔ)設(shè)備,可以通過(guò)網(wǎng)絡(luò)輸出為塊設(shè)備,數(shù)據(jù)庫(kù)的所有數(shù)據(jù)文件和日志都存在在所述共享存儲(chǔ)設(shè)備的磁盤中,由所有計(jì)算節(jié)點(diǎn)共同掛載讀取。在由可靠的數(shù)據(jù)節(jié)點(diǎn)的前提下(即不考慮共享存儲(chǔ)設(shè)備的失效),利用更多的設(shè)備作為計(jì)算節(jié)點(diǎn)共享同一份磁盤數(shù)據(jù),能夠有效降低擴(kuò)展計(jì)算資源的成本。
對(duì)于分布式事務(wù)處理的場(chǎng)景,在計(jì)算節(jié)點(diǎn)的主節(jié)點(diǎn)設(shè)備可讀可寫,備節(jié)點(diǎn)設(shè)備只可讀的情況下,有可能會(huì)因?yàn)橹鞴?jié)點(diǎn)設(shè)備向共享存儲(chǔ)設(shè)備回寫數(shù)據(jù)頁(yè)的進(jìn)度過(guò)快,導(dǎo)致保證備節(jié)點(diǎn)由共享存儲(chǔ)設(shè)備中讀取到不應(yīng)該可見(jiàn)的數(shù)據(jù),從而無(wú)法保持備節(jié)點(diǎn)設(shè)備的事務(wù)特性。
申請(qǐng)內(nèi)容
本申請(qǐng)的一個(gè)目的是提供一種用于分布式事務(wù)處理的方法及設(shè)備,用以解決現(xiàn)有技術(shù)中可能無(wú)法保持備節(jié)點(diǎn)設(shè)備的事務(wù)特性的問(wèn)題。
為實(shí)現(xiàn)上述目的,本申請(qǐng)?zhí)峁┝艘环N在主節(jié)點(diǎn)設(shè)備端用于分布式事務(wù)處理的方法,該方法包括:
在向共享存儲(chǔ)設(shè)備回寫事務(wù)提交的重做日志后,將所述事務(wù)提交的重做日志的日志序號(hào)作為提交日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備;
接收所述備節(jié)點(diǎn)設(shè)備在重放日志序號(hào)小于等于所述提交日志序號(hào)的重做日志后所發(fā)送的限制日志序號(hào),其中所述限制日志序號(hào)等于所述提交 日志序號(hào);
向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè)。
本申請(qǐng)還提供了一種在備節(jié)點(diǎn)設(shè)備端用于分布式事務(wù)處理的方法,該方法包括:
接收主節(jié)點(diǎn)設(shè)備發(fā)送的提交日志序號(hào),其中所述提交日志序號(hào)為所述主節(jié)點(diǎn)設(shè)備向共享存儲(chǔ)設(shè)備回寫的事務(wù)提交的重做日志的日志序號(hào);
重放日志序號(hào)小于等于所述提交日志序號(hào)的重做日志;
向所述主節(jié)點(diǎn)設(shè)備發(fā)送限制日志序號(hào),其中所述限制日志序號(hào)用于控制向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè),所述限制日志序號(hào)等于所述提交日志序號(hào)。
基于本申請(qǐng)的另一方面,還提供了一種用于分布式事務(wù)處理的主節(jié)點(diǎn)設(shè)備,該主節(jié)點(diǎn)設(shè)備包括:
發(fā)送裝置,用于在向共享存儲(chǔ)設(shè)備回寫事務(wù)提交的重做日志后,將所述事務(wù)提交的重做日志的日志序號(hào)作為提交日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備;
接收裝置,用于接收所述備節(jié)點(diǎn)設(shè)備在重放日志序號(hào)小于等于所述提交日志序號(hào)的重做日志后所發(fā)送的限制日志序號(hào),其中所述限制日志序號(hào)等于所述提交日志序號(hào);
數(shù)據(jù)提交裝置,用于向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè)。
本申請(qǐng)還提供了一種用于分布式事務(wù)處理的備節(jié)點(diǎn)設(shè)備,該備節(jié)點(diǎn)設(shè)備包括:
接收裝置,用于接收主節(jié)點(diǎn)設(shè)備發(fā)送的提交日志序號(hào),其中所述提交日志序號(hào)為所述主節(jié)點(diǎn)設(shè)備向共享存儲(chǔ)設(shè)備回寫的事務(wù)提交的重做日志的日志序號(hào);
日志應(yīng)用裝置,用于重放日志序號(hào)小于等于所述提交日志序號(hào)的重做日志;
發(fā)送裝置,用于向所述主節(jié)點(diǎn)設(shè)備發(fā)送限制日志序號(hào),其中所述限制日志序號(hào)用于控制向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè),所述限制日志序號(hào)等于所述提交日志序號(hào)。
與現(xiàn)有技術(shù)相比,本申請(qǐng)的技術(shù)方案中,主節(jié)點(diǎn)設(shè)備在向共享存儲(chǔ)設(shè)備回寫事務(wù)提交的重做日志后,將重做日志中對(duì)應(yīng)事務(wù)提交事件的日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備,由此控制備節(jié)點(diǎn)設(shè)備重放相應(yīng)的重做日志,以更新備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù)頁(yè)。同時(shí),主節(jié)點(diǎn)設(shè)備根據(jù)備節(jié)點(diǎn)設(shè)備的反饋來(lái)限制自身向回寫數(shù)據(jù)頁(yè)的進(jìn)度,使得備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)始終為主節(jié)點(diǎn)設(shè)備提交后某一事務(wù)后的快照,不會(huì)由共享存儲(chǔ)設(shè)備中讀取到不應(yīng)該可見(jiàn)的數(shù)據(jù),由此保證事務(wù)特性。
附圖說(shuō)明
通過(guò)閱讀參照以下附圖所作的對(duì)非限制性實(shí)施例所作的詳細(xì)描述,本申請(qǐng)的其它特征、目的和優(yōu)點(diǎn)將會(huì)變得更明顯:
圖1為本申請(qǐng)實(shí)施例中一種用于分布式事務(wù)處理的數(shù)據(jù)庫(kù)系統(tǒng)的結(jié)構(gòu)示意圖;
圖2為本申請(qǐng)實(shí)施例提供的一種在主節(jié)點(diǎn)設(shè)備端用于分布式事務(wù)處理的方法的流程圖;
圖3為本申請(qǐng)實(shí)施例提供的一種在備節(jié)點(diǎn)設(shè)備端用于分布式事務(wù)處理的方法的流程圖;
圖4為本申請(qǐng)實(shí)施例提供的一種用于分布式事務(wù)處理的主節(jié)點(diǎn)設(shè)備的結(jié)構(gòu)示意圖;
圖5為本申請(qǐng)實(shí)施例提供的一種用于分布式事務(wù)處理的備節(jié)點(diǎn)設(shè)備的結(jié)構(gòu)示意圖;
圖6為本申請(qǐng)實(shí)施例提供的另一種用于分布式事務(wù)處理的備節(jié)點(diǎn)設(shè)備的結(jié)構(gòu)示意圖;
圖7為一種用于分布式事務(wù)處理的數(shù)據(jù)庫(kù)系統(tǒng)中各個(gè)設(shè)備之間的交互流程圖;
圖8為一種用于分布式事務(wù)處理的數(shù)據(jù)庫(kù)系統(tǒng)在處理過(guò)程中某一時(shí)刻的日志及數(shù)據(jù)狀態(tài)示意圖;
附圖中相同或相似的附圖標(biāo)記代表相同或相似的部件。
具體實(shí)施方式
下面結(jié)合附圖對(duì)本申請(qǐng)作進(jìn)一步詳細(xì)描述。
在本申請(qǐng)一個(gè)典型的配置中,終端、服務(wù)網(wǎng)絡(luò)的設(shè)備和可信方均包括一個(gè)或多個(gè)處理器(CPU)、輸入/輸出接口、網(wǎng)絡(luò)接口和內(nèi)存。
內(nèi)存可能包括計(jì)算機(jī)可讀介質(zhì)中的非永久性存儲(chǔ)器,隨機(jī)存取存儲(chǔ)器(RAM)和/或非易失性內(nèi)存等形式,如只讀存儲(chǔ)器(ROM)或閃存(flash RAM)。內(nèi)存是計(jì)算機(jī)可讀介質(zhì)的示例。
計(jì)算機(jī)可讀介質(zhì)包括永久性和非永久性、可移動(dòng)和非可移動(dòng)媒體可以由任何方法或技術(shù)來(lái)實(shí)現(xiàn)信息存儲(chǔ)。信息可以是計(jì)算機(jī)可讀指令、數(shù)據(jù)結(jié)構(gòu)、程序的模塊或其他數(shù)據(jù)。計(jì)算機(jī)的存儲(chǔ)介質(zhì)的例子包括,但不限于相變內(nèi)存(PRAM)、靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)、動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)、其他類型的隨機(jī)存取存儲(chǔ)器(RAM)、只讀存儲(chǔ)器(ROM)、電可擦除可編程只讀存儲(chǔ)器(EEPROM)、快閃記憶體或其他內(nèi)存技術(shù)、只讀光盤只讀存儲(chǔ)器(CD-ROM)、數(shù)字多功能光盤(DVD)或其他光學(xué)存儲(chǔ)、磁盒式磁帶,磁帶磁盤存儲(chǔ)或其他磁性存儲(chǔ)設(shè)備或任何其他非傳輸介質(zhì),可用于存儲(chǔ)可以被計(jì)算設(shè)備訪問(wèn)的信息。按照本文中的界定,計(jì)算機(jī)可讀介質(zhì)不包括非暫存電腦可讀媒體(transitory media),如調(diào)制的數(shù)據(jù)信號(hào)和載波。
圖1示出了一種用于分布式事務(wù)處理的數(shù)據(jù)庫(kù)系統(tǒng),以一主一備的構(gòu)架為例,該數(shù)據(jù)庫(kù)系統(tǒng)中包括一臺(tái)主節(jié)點(diǎn)設(shè)備110、一臺(tái)備節(jié)點(diǎn)設(shè)備120和一臺(tái)高可用的共享存儲(chǔ)設(shè)備130,三者通過(guò)網(wǎng)絡(luò)相互連接。其中,所述主節(jié)點(diǎn)設(shè)備110和備節(jié)點(diǎn)設(shè)備120均為僅有操作系統(tǒng)、且沒(méi)有用于保存文件的磁盤的計(jì)算節(jié)點(diǎn),所有文件均存在于內(nèi)存中。而所述共享存儲(chǔ)設(shè)備130可通過(guò)網(wǎng)絡(luò)輸出為塊設(shè)備,數(shù)據(jù)庫(kù)的所有數(shù)據(jù)文件和日志文件都存放在所述共享存儲(chǔ)設(shè)備中,由所述主節(jié)點(diǎn)設(shè)備110和備節(jié)點(diǎn)設(shè)備120共同讀取使用。根據(jù)實(shí)際的應(yīng)用需求,該數(shù)據(jù)庫(kù)系統(tǒng)也可以為包含多個(gè)備節(jié)點(diǎn)設(shè)備120,其中任意一個(gè)備節(jié)點(diǎn)設(shè)備與主節(jié)點(diǎn)設(shè)備、共享存儲(chǔ)設(shè)備之間的交互方式,與本例中一主一備的構(gòu)架類似。
在此,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)理解,所述數(shù)據(jù)庫(kù)系統(tǒng)中的主節(jié)點(diǎn)設(shè)備110、 備節(jié)點(diǎn)設(shè)備120和共享存儲(chǔ)設(shè)備130可以包括但不限于用戶設(shè)備、網(wǎng)絡(luò)設(shè)備或用戶設(shè)備與網(wǎng)絡(luò)設(shè)備通過(guò)網(wǎng)絡(luò)相集成所構(gòu)成的設(shè)備。所述用戶設(shè)備包括但不限于個(gè)人計(jì)算機(jī)、觸控終端等實(shí)現(xiàn);所述網(wǎng)絡(luò)設(shè)備包括但不限于如網(wǎng)絡(luò)主機(jī)、單個(gè)網(wǎng)絡(luò)服務(wù)器、多個(gè)網(wǎng)絡(luò)服務(wù)器集或基于云計(jì)算的計(jì)算機(jī)集合等實(shí)現(xiàn)。在此,云由基于云計(jì)算(Cloud Computing)的大量主機(jī)或網(wǎng)絡(luò)服務(wù)器構(gòu)成,其中,云計(jì)算是分布式計(jì)算的一種,由一群松散耦合的計(jì)算機(jī)集組成的一個(gè)虛擬計(jì)算機(jī)。
圖2示出了在主節(jié)點(diǎn)設(shè)備110端用于分布式事務(wù)處理的方法包括:
步驟S201,主節(jié)點(diǎn)設(shè)備在向共享存儲(chǔ)設(shè)備回寫事務(wù)提交的重做日志(Redo Log)后,將所述事務(wù)提交的重做日志的日志序號(hào)(LSN)作為提交日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備。
其中,所述重做日志包含對(duì)一個(gè)數(shù)據(jù)庫(kù)實(shí)例進(jìn)行所有數(shù)據(jù)修改的物理操作記錄,因此通過(guò)在另一個(gè)數(shù)據(jù)庫(kù)實(shí)例重放重做日志,就可以重新進(jìn)行原數(shù)據(jù)庫(kù)實(shí)例的所有物理操作,從而同步數(shù)據(jù)。例如,主節(jié)點(diǎn)設(shè)備在進(jìn)行事務(wù)處理時(shí),每一次對(duì)數(shù)據(jù)進(jìn)行的修改均會(huì)生成相應(yīng)的日志寫入重做日志,備節(jié)點(diǎn)設(shè)備通過(guò)重放相應(yīng)的重做日志即可實(shí)現(xiàn)重復(fù)對(duì)相應(yīng)數(shù)據(jù)的修改操作,由此同步數(shù)據(jù)。重做日志中的每條日志都會(huì)有一個(gè)日志序號(hào),該日志序號(hào)用于標(biāo)記每個(gè)日志在重做日志中的位置,相當(dāng)于對(duì)應(yīng)的數(shù)據(jù)修改事件產(chǎn)生的位置,每個(gè)被修改的數(shù)據(jù)頁(yè)也會(huì)包含相應(yīng)的日志序號(hào)表示其最新被修改的點(diǎn)在重做日志中位置。
主節(jié)點(diǎn)設(shè)備在進(jìn)行事務(wù)處理時(shí),會(huì)對(duì)內(nèi)存中的數(shù)據(jù)頁(yè)進(jìn)行一系列修改,同時(shí)產(chǎn)生相應(yīng)的日志寫入重做日志中,在提交事務(wù)時(shí),同樣會(huì)產(chǎn)生對(duì)應(yīng)于該提交事務(wù)事件的日志被寫入重做日志中。在事務(wù)提交之后,重做日志會(huì)被主節(jié)點(diǎn)設(shè)備由其內(nèi)存及時(shí)回寫到共享存儲(chǔ)設(shè)備的磁盤中,而修改的數(shù)據(jù)頁(yè)則采用異步的方式在其內(nèi)存寫滿之前回寫到共享存儲(chǔ)設(shè)備的磁盤中。主節(jié)點(diǎn)設(shè)備在回寫重做日志后,將所述事務(wù)提交的重做日志的日志序號(hào)(即對(duì)應(yīng)事務(wù)提交的日志的日志序號(hào)),作為提交日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備,在本例中所述提交日志序號(hào)記為L(zhǎng)SN_COMMIT。
步驟S202,主節(jié)點(diǎn)設(shè)備接收所述備節(jié)點(diǎn)設(shè)備在重放日志序號(hào)小于等于 所述提交日志序號(hào)的重做日志后所發(fā)送的限制日志序號(hào)。
主節(jié)點(diǎn)設(shè)備通過(guò)LSN_COMMIT來(lái)控制備節(jié)點(diǎn)設(shè)備重放哪些日志,從而將相應(yīng)的數(shù)據(jù)變更應(yīng)用到被節(jié)點(diǎn)設(shè)備內(nèi)存的數(shù)據(jù)頁(yè)中。為了備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)與主庫(kù)在提交事務(wù)后的數(shù)據(jù)一致,備節(jié)點(diǎn)設(shè)備將重放日志序號(hào)小于等于LSN_COMMIT的重做日志,以完成數(shù)據(jù)同步。
在連續(xù)處理的過(guò)程中,若備節(jié)點(diǎn)設(shè)備上一次接收到的LSN_COMMIT為5,此次接收到的LSN_COMMIT為10,對(duì)于本次處理,由于LSN小于等于5的日志已經(jīng)在上次處理過(guò)程中完成了重放,因此只需要重放LSN為6-10的日志即可。由此,步驟S202具體包括:主節(jié)點(diǎn)設(shè)備接收所述備節(jié)點(diǎn)設(shè)備在重放變更日志后所發(fā)送的限制日志序號(hào),其中所述變更日志包括日志序號(hào)在前一次接收到的標(biāo)記日志序號(hào)至本次接收到的標(biāo)記日志序號(hào)之間的重做日志,所述限制日志序號(hào)等于本次所述備節(jié)點(diǎn)設(shè)備本次接收到提交日志序號(hào)。
此外,主節(jié)點(diǎn)設(shè)備接收到的限制日志序號(hào)由備節(jié)點(diǎn)設(shè)備在重放相應(yīng)的日志之后發(fā)出,該限制日志序號(hào)記為L(zhǎng)SN_LIMIT,與對(duì)應(yīng)的LSN_COMMIT相等,表示備節(jié)點(diǎn)設(shè)備當(dāng)前已經(jīng)重放的日志,能夠標(biāo)記備節(jié)點(diǎn)設(shè)備內(nèi)存中數(shù)據(jù)頁(yè)的狀態(tài)。在連續(xù)處理的過(guò)程中,若備節(jié)點(diǎn)設(shè)備上一次接收到的LSN_COMMIT為5,此次接收到的LSN_COMMIT為10,由此本次重放LSN為6-10的日志,則相應(yīng)的LSN_LIMIT也為10。
步驟S203,主節(jié)點(diǎn)設(shè)備向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè)。
主節(jié)點(diǎn)設(shè)備通過(guò)備節(jié)點(diǎn)設(shè)備返回的LSN_LIMIT來(lái)限制其內(nèi)存中的數(shù)據(jù)頁(yè)回寫至共享存儲(chǔ)設(shè)備磁盤的進(jìn)度。只有根據(jù)LSN_LIMIT確認(rèn)備節(jié)點(diǎn)設(shè)備已經(jīng)重放了相應(yīng)的重做日志,才將對(duì)應(yīng)的數(shù)據(jù)頁(yè)回寫到共享存儲(chǔ)設(shè)備磁盤。例如,接收到的LSN_LIMIT為5,則將LSN小于等于5的數(shù)據(jù)頁(yè)回寫共享存儲(chǔ)設(shè)備磁盤,此時(shí)磁盤上的數(shù)據(jù)文件和備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù),構(gòu)成主節(jié)點(diǎn)設(shè)備在LSN為5時(shí)的數(shù)據(jù)狀態(tài)的快照。由此保證共享存儲(chǔ)設(shè)備磁盤中的數(shù)據(jù)更新不會(huì)早于備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù)更新,使得備節(jié)點(diǎn)設(shè)備不會(huì)由共享存儲(chǔ)設(shè)備中讀取到不應(yīng)該可見(jiàn)的數(shù)據(jù),由此保證事務(wù) 特性。
進(jìn)一步地,在連續(xù)處理的過(guò)程中,若主節(jié)點(diǎn)設(shè)備上一次接收到的LSN_LIMIT為5,此次接收到的LSN_LIMI為10,對(duì)于本次處理,由于LSN小于等于5的數(shù)據(jù)頁(yè)已經(jīng)在上次處理過(guò)程回寫完畢,因此只需要回寫LSN為6-10的數(shù)據(jù)頁(yè)即可。由此,步驟S203具體包括:主節(jié)點(diǎn)設(shè)備向共享存儲(chǔ)設(shè)備回寫日志序號(hào)在前一次接收到的限制日志序號(hào)至本次接收到的限制日志序號(hào)之間的數(shù)據(jù)頁(yè)。
在備節(jié)點(diǎn)設(shè)備120端,用于分布式事務(wù)處理的方法如圖3所示,包括以下步驟:
步驟S301,備節(jié)點(diǎn)設(shè)備接收主節(jié)點(diǎn)設(shè)備發(fā)送的提交日志序號(hào),其中所述提交日志序號(hào)為所述主節(jié)點(diǎn)設(shè)備向共享存儲(chǔ)設(shè)備回寫的事務(wù)提交的重做日志的日志序號(hào)。
步驟S302,備節(jié)點(diǎn)設(shè)備重放日志序號(hào)小于等于所述提交日志序號(hào)的重做日志。
由于主節(jié)點(diǎn)設(shè)備與備節(jié)點(diǎn)設(shè)備共用共享存儲(chǔ)設(shè)備的磁盤,主節(jié)點(diǎn)設(shè)備會(huì)在提交事務(wù)后把相應(yīng)的重做日志回寫到共享存儲(chǔ)設(shè)備的磁盤中,因此備節(jié)點(diǎn)設(shè)備用于重放的重做日志可以根據(jù)收到的提交日志序號(hào),由共享存儲(chǔ)設(shè)備的磁盤中讀取,然后進(jìn)行重放。具體地,所述步驟S302可以包括兩個(gè)步驟:
S3021,由所述共享存儲(chǔ)設(shè)備獲取日志序號(hào)小于等于所述提交日志序號(hào)的重做日志。
S3022,重放所述重做日志。
在連續(xù)處理的過(guò)程中,對(duì)于本次處理,僅需要重放上次接收到的LSN_COMMIT到本次收到的LSN_COMMIT之間的重做日志即可,因此可以僅讀取需要重放的日志即可。具體地,所述步驟S3021包括:由所述共享存儲(chǔ)設(shè)備獲取日志序號(hào)在前一次接收到的標(biāo)記日志序號(hào)至本次接收到的標(biāo)記日志序號(hào)之間的重做日志。例如,備節(jié)點(diǎn)設(shè)備上一次接收到的LSN_COMMIT為5,此次接收到的LSN_COMMIT為10,對(duì)于本次處理,由于LSN小于等于5的日志已經(jīng)在上次處理過(guò)程中由共享存儲(chǔ)設(shè)備中讀 取并進(jìn)行了重放,因此在本次處理時(shí),只需要從共享存儲(chǔ)設(shè)備讀取LSN為6-10的日志即可。
步驟S302,用于向所述主節(jié)點(diǎn)設(shè)備發(fā)送限制日志序號(hào),其中所述限制日志序號(hào)用于控制向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè),所述限制日志序號(hào)等于所述提交日志序號(hào)。
備節(jié)點(diǎn)設(shè)備通過(guò)限制日志序號(hào)來(lái)限制其內(nèi)存中的數(shù)據(jù)頁(yè)回寫至共享存儲(chǔ)設(shè)備磁盤的進(jìn)度,由此保證共享存儲(chǔ)設(shè)備磁盤中的數(shù)據(jù)更新不會(huì)早于備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù)更新,使得備節(jié)點(diǎn)設(shè)備不會(huì)由共享存儲(chǔ)設(shè)備中讀取到不應(yīng)該可見(jiàn)的數(shù)據(jù),由此保證事務(wù)特性。
由于所述備節(jié)點(diǎn)設(shè)備為僅有操作系統(tǒng)、且沒(méi)有用于保存文件的磁盤的計(jì)算節(jié)點(diǎn),所有文件均存在于內(nèi)存中。內(nèi)存能夠保存的數(shù)據(jù)量相對(duì)有限,當(dāng)備節(jié)點(diǎn)設(shè)備中的內(nèi)存滿時(shí),就需要?jiǎng)h除一些數(shù)據(jù)頁(yè),為重放重做日志留出內(nèi)存空間。由于備節(jié)點(diǎn)設(shè)備會(huì)通過(guò)重放重做日志,生成LSN_COMMIT之前的數(shù)據(jù)頁(yè),而主節(jié)點(diǎn)設(shè)備也會(huì)根據(jù)相應(yīng)的LSN_LIMIT向共享存儲(chǔ)設(shè)備回寫數(shù)據(jù)頁(yè),因此備節(jié)點(diǎn)設(shè)備若需要?jiǎng)h除內(nèi)存中的數(shù)據(jù)頁(yè),可以刪除主節(jié)點(diǎn)設(shè)備已經(jīng)回寫到共享存儲(chǔ)設(shè)備中的數(shù)據(jù)頁(yè)(即小于等于LSN_LIMIT的數(shù)據(jù)頁(yè))。由于這些刪除的數(shù)據(jù)頁(yè)已經(jīng)由主節(jié)點(diǎn)設(shè)備回寫至共享存儲(chǔ)設(shè)備,備節(jié)點(diǎn)設(shè)備在需要時(shí)可以隨時(shí)讀取,因此不會(huì)造成備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)缺失,保證事務(wù)特性。
由此,在備節(jié)點(diǎn)設(shè)備120端,用于分布式事務(wù)處理的方法還包括:若需要?jiǎng)h除所述備節(jié)點(diǎn)設(shè)備中的數(shù)據(jù)頁(yè),則刪除日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè)。
在本實(shí)施例中,所述用于分布式事務(wù)處理的數(shù)據(jù)庫(kù)系統(tǒng)中主節(jié)點(diǎn)設(shè)備可讀可寫,所述備節(jié)點(diǎn)設(shè)備僅可讀,且備節(jié)點(diǎn)設(shè)備中的數(shù)據(jù)始終為主節(jié)點(diǎn)設(shè)備在某次事務(wù)提交之后的時(shí)間點(diǎn)的數(shù)據(jù)狀態(tài)快照。當(dāng)備節(jié)點(diǎn)設(shè)備接收到讀請(qǐng)求時(shí),可以根據(jù)讀請(qǐng)求由其內(nèi)存的數(shù)據(jù)頁(yè)中調(diào)取相應(yīng)的數(shù)據(jù),若備節(jié)點(diǎn)設(shè)備的內(nèi)存中缺少相應(yīng)的數(shù)據(jù)頁(yè)導(dǎo)致無(wú)法直接調(diào)取相應(yīng)的數(shù)據(jù)(相應(yīng)的數(shù)據(jù)頁(yè)已經(jīng)刪除),由于這些缺少的數(shù)據(jù)頁(yè)已經(jīng)由主節(jié)點(diǎn)設(shè)備回寫至共享存儲(chǔ)設(shè)備,因此備節(jié)點(diǎn)設(shè)備可以根據(jù)需要從共享存儲(chǔ)設(shè)備中獲取所述讀請(qǐng) 求對(duì)應(yīng)的數(shù)據(jù)頁(yè),以完成數(shù)據(jù)讀取,由此保證備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)完整性。
由此,在備節(jié)點(diǎn)設(shè)備120端,用于分布式事務(wù)處理的方法還包括:獲取讀請(qǐng)求,若所述備節(jié)點(diǎn)設(shè)備不包含所述讀請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)頁(yè),則由所述共享存儲(chǔ)設(shè)備獲取所述讀請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)頁(yè)。
基于本申請(qǐng)的另一方面,本實(shí)施例提供了一種用于分布式事務(wù)處理的主節(jié)點(diǎn)設(shè)備,該主節(jié)點(diǎn)設(shè)備110的結(jié)構(gòu)如圖4所示,包括發(fā)送裝置111、接收裝置112和數(shù)據(jù)提交裝置113。
具體的,所述發(fā)送裝置111用于在向共享存儲(chǔ)設(shè)備回寫事務(wù)提交的重做日志后,將所述事務(wù)提交的重做日志的日志序號(hào)作為提交日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備。
其中,所述重做日志包含對(duì)一個(gè)數(shù)據(jù)庫(kù)實(shí)例進(jìn)行所有數(shù)據(jù)修改的物理操作記錄,因此通過(guò)在另一個(gè)數(shù)據(jù)庫(kù)實(shí)例重放重做日志,就可以重新進(jìn)行原數(shù)據(jù)庫(kù)實(shí)例的所有物理操作,從而同步數(shù)據(jù)。例如,主節(jié)點(diǎn)設(shè)備在進(jìn)行事務(wù)處理時(shí),每一次對(duì)數(shù)據(jù)進(jìn)行的修改均會(huì)生成相應(yīng)的日志寫入重做日志,備節(jié)點(diǎn)設(shè)備通過(guò)重放相應(yīng)的重做日志即可實(shí)現(xiàn)重復(fù)對(duì)相應(yīng)數(shù)據(jù)的修改操作,由此同步數(shù)據(jù)。重做日志中的每條日志都會(huì)有一個(gè)日志序號(hào),該日志序號(hào)用于標(biāo)記每個(gè)日志在重做日志中的位置,相當(dāng)于對(duì)應(yīng)的數(shù)據(jù)修改事件產(chǎn)生的位置,每個(gè)被修改的數(shù)據(jù)頁(yè)也會(huì)包含相應(yīng)的日志序號(hào)表示其最新被修改的點(diǎn)在重做日志中位置。
主節(jié)點(diǎn)設(shè)備在進(jìn)行事務(wù)處理時(shí),會(huì)對(duì)內(nèi)存中的數(shù)據(jù)頁(yè)進(jìn)行一系列修改,同時(shí)產(chǎn)生相應(yīng)的日志寫入重做日志中,在提交事務(wù)時(shí),同樣會(huì)產(chǎn)生對(duì)應(yīng)于該提交事務(wù)事件的日志被寫入重做日志中。在事務(wù)提交之后,重做日志會(huì)被主節(jié)點(diǎn)設(shè)備由其內(nèi)存及時(shí)回寫到共享存儲(chǔ)設(shè)備的磁盤中,而修改的數(shù)據(jù)頁(yè)則采用異步的方式在其內(nèi)存寫滿之前回寫到共享存儲(chǔ)設(shè)備的磁盤中。主節(jié)點(diǎn)設(shè)備在回寫重做日志后,將所述事務(wù)提交的重做日志的日志序號(hào)(即對(duì)應(yīng)事務(wù)提交的日志的日志序號(hào)),作為提交日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備,在本例中所述提交日志序號(hào)記為L(zhǎng)SN_COMMIT。
所述接收裝置112用于接收所述備節(jié)點(diǎn)設(shè)備在重放日志序號(hào)小于等于所述提交日志序號(hào)的重做日志后所發(fā)送的限制日志序號(hào),其中所述限制日 志序號(hào)等于所述提交日志序號(hào)。
主節(jié)點(diǎn)設(shè)備通過(guò)LSN_COMMIT來(lái)控制備節(jié)點(diǎn)設(shè)備重放哪些日志,從而將相應(yīng)的數(shù)據(jù)變更應(yīng)用到被節(jié)點(diǎn)設(shè)備內(nèi)存的數(shù)據(jù)頁(yè)中。為了備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)與主庫(kù)在提交事務(wù)后的數(shù)據(jù)一致,備節(jié)點(diǎn)設(shè)備將重放日志序號(hào)小于等于LSN_COMMIT的重做日志,以完成數(shù)據(jù)同步。
在連續(xù)處理的過(guò)程中,若備節(jié)點(diǎn)設(shè)備上一次接收到的LSN_COMMIT為5,此次接收到的LSN_COMMIT為10,對(duì)于本次處理,由于LSN小于等于5的日志已經(jīng)在上次處理過(guò)程中完成了重放,因此只需要重放LSN為6-10的日志即可。由此,所述接收裝置112具體用于接收所述備節(jié)點(diǎn)設(shè)備在重放變更日志后所發(fā)送的限制日志序號(hào),其中所述變更日志包括日志序號(hào)在前一次接收到的標(biāo)記日志序號(hào)至本次接收到的標(biāo)記日志序號(hào)之間的重做日志,所述限制日志序號(hào)等于本次所述備節(jié)點(diǎn)設(shè)備本次接收到提交日志序號(hào)。
此外,主節(jié)點(diǎn)設(shè)備接收到的限制日志序號(hào)由備節(jié)點(diǎn)設(shè)備在重放相應(yīng)的日志之后發(fā)出,該限制日志序號(hào)記為L(zhǎng)SN_LIMIT,與對(duì)應(yīng)的LSN_COMMIT相等,表示備節(jié)點(diǎn)設(shè)備當(dāng)前已經(jīng)重放的日志,能夠標(biāo)記備節(jié)點(diǎn)設(shè)備內(nèi)存中數(shù)據(jù)頁(yè)的狀態(tài)。在連續(xù)處理的過(guò)程中,若備節(jié)點(diǎn)設(shè)備上一次接收到的LSN_COMMIT為5,此次接收到的LSN_COMMIT為10,由此本次重放LSN為6-10的日志,則相應(yīng)的LSN_LIMIT也為10。
所述數(shù)據(jù)提交裝置113用于向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè)。
主節(jié)點(diǎn)設(shè)備通過(guò)備節(jié)點(diǎn)設(shè)備返回的LSN_LIMIT來(lái)限制其內(nèi)存中的數(shù)據(jù)頁(yè)回寫至共享存儲(chǔ)設(shè)備磁盤的進(jìn)度。只有根據(jù)LSN_LIMIT確認(rèn)備節(jié)點(diǎn)設(shè)備已經(jīng)重放了相應(yīng)的重做日志,才將對(duì)應(yīng)的數(shù)據(jù)頁(yè)回寫到共享存儲(chǔ)設(shè)備磁盤。例如,接收到的LSN_LIMIT為5,則將LSN小于等于5的數(shù)據(jù)頁(yè)回寫共享存儲(chǔ)設(shè)備磁盤,此時(shí)磁盤上的數(shù)據(jù)文件和備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù),構(gòu)成主節(jié)點(diǎn)設(shè)備在LSN為5時(shí)的數(shù)據(jù)狀態(tài)的快照。由此保證共享存儲(chǔ)設(shè)備磁盤中的數(shù)據(jù)更新不會(huì)早于備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù)更新,使得備節(jié)點(diǎn)設(shè)備不會(huì)由共享存儲(chǔ)設(shè)備中讀取到不應(yīng)該可見(jiàn)的數(shù)據(jù),由此保證事務(wù) 特性。
進(jìn)一步地,在連續(xù)處理的過(guò)程中,若主節(jié)點(diǎn)設(shè)備上一次接收到的LSN_LIMIT為5,此次接收到的LSN_LIMI為10,對(duì)于本次處理,由于LSN小于等于5的數(shù)據(jù)頁(yè)已經(jīng)在上次處理過(guò)程回寫完畢,因此只需要回寫LSN為6-10的數(shù)據(jù)頁(yè)即可。由此,所述數(shù)據(jù)提交裝置113,具體用于向共享存儲(chǔ)設(shè)備回寫日志序號(hào)在前一次接收到的限制日志序號(hào)至本次接收到的限制日志序號(hào)之間的數(shù)據(jù)頁(yè)。
此外,本申請(qǐng)實(shí)施例還提供了一種用于分布式事務(wù)處理的備節(jié)點(diǎn)設(shè)備。該備節(jié)點(diǎn)設(shè)備120的結(jié)構(gòu)如圖5所示,包括接收裝置121、日志應(yīng)用裝置122和發(fā)送裝置123。
具體的,所述接收裝置121用于接收主節(jié)點(diǎn)設(shè)備發(fā)送的提交日志序號(hào),其中所述提交日志序號(hào)為所述主節(jié)點(diǎn)設(shè)備向共享存儲(chǔ)設(shè)備回寫的事務(wù)提交的重做日志的日志序號(hào)。
所述日志應(yīng)用裝置122用于重放日志序號(hào)小于等于所述提交日志序號(hào)的重做日志。由于主節(jié)點(diǎn)設(shè)備與備節(jié)點(diǎn)設(shè)備共用共享存儲(chǔ)設(shè)備的磁盤,主節(jié)點(diǎn)設(shè)備會(huì)在提交事務(wù)后把相應(yīng)的重做日志回寫到共享存儲(chǔ)設(shè)備的磁盤中,因此備節(jié)點(diǎn)設(shè)備用于重放的重做日志可以根據(jù)收到的提交日志序號(hào),由共享存儲(chǔ)設(shè)備的磁盤中讀取,然后進(jìn)行重放。所述日志應(yīng)用裝置122,具體用于由所述共享存儲(chǔ)設(shè)備獲取日志序號(hào)小于等于所述提交日志序號(hào)的重做日志,以及重放所述重做日志。
在連續(xù)處理的過(guò)程中,對(duì)于本次處理,僅需要重放上次接收到的LSN_COMMIT到本次收到的LSN_COMMIT之間的重做日志即可,因此可以僅讀取需要重放的日志即可。具體地,所述日志應(yīng)用裝置122用于由所述共享存儲(chǔ)設(shè)備獲取日志序號(hào)在前一次接收到的標(biāo)記日志序號(hào)至本次接收到的標(biāo)記日志序號(hào)之間的重做日志,以及重放所述重做日志。例如,備節(jié)點(diǎn)設(shè)備上一次接收到的LSN_COMMIT為5,此次接收到的LSN_COMMIT為10,對(duì)于本次處理,由于LSN小于等于5的日志已經(jīng)在上次處理過(guò)程中由共享存儲(chǔ)設(shè)備中讀取并進(jìn)行了重放,因此在本次處理時(shí),只需要從共享存儲(chǔ)設(shè)備讀取LSN為6-10的日志即可。
所述發(fā)送裝置123用于向所述主節(jié)點(diǎn)設(shè)備發(fā)送限制日志序號(hào),其中所述限制日志序號(hào)用于控制向共享存儲(chǔ)設(shè)備回寫日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè),所述限制日志序號(hào)等于所述提交日志序號(hào)。備節(jié)點(diǎn)設(shè)備通過(guò)限制日志序號(hào)來(lái)限制其內(nèi)存中的數(shù)據(jù)頁(yè)回寫至共享存儲(chǔ)設(shè)備磁盤的進(jìn)度,由此保證共享存儲(chǔ)設(shè)備磁盤中的數(shù)據(jù)更新不會(huì)早于備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù)更新,使得備節(jié)點(diǎn)設(shè)備不會(huì)由共享存儲(chǔ)設(shè)備中讀取到不應(yīng)該可見(jiàn)的數(shù)據(jù),由此保證事務(wù)特性。
由于所述備節(jié)點(diǎn)設(shè)備為僅有操作系統(tǒng)、且沒(méi)有用于保存文件的磁盤的計(jì)算節(jié)點(diǎn),所有文件均存在于內(nèi)存中。內(nèi)存能夠保存的數(shù)據(jù)量相對(duì)有限,當(dāng)備節(jié)點(diǎn)設(shè)備中的內(nèi)存滿時(shí),就需要?jiǎng)h除一些數(shù)據(jù)頁(yè),為重放重做日志留出內(nèi)存空間。由于備節(jié)點(diǎn)設(shè)備會(huì)通過(guò)重放重做日志,生成LSN_COMMIT之前的數(shù)據(jù)頁(yè),而主節(jié)點(diǎn)設(shè)備也會(huì)根據(jù)相應(yīng)的LSN_LIMIT向共享存儲(chǔ)設(shè)備回寫數(shù)據(jù)頁(yè),因此備節(jié)點(diǎn)設(shè)備若需要?jiǎng)h除內(nèi)存中的數(shù)據(jù)頁(yè),可以刪除主節(jié)點(diǎn)設(shè)備已經(jīng)回寫到共享存儲(chǔ)設(shè)備中的數(shù)據(jù)頁(yè)(即小于等于LSN_LIMIT的數(shù)據(jù)頁(yè))。由于這些刪除的數(shù)據(jù)頁(yè)已經(jīng)由主節(jié)點(diǎn)設(shè)備回寫至共享存儲(chǔ)設(shè)備,備節(jié)點(diǎn)設(shè)備在需要時(shí)可以隨時(shí)讀取,因此不會(huì)造成備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)缺失,保證事務(wù)特性。
由此,本申請(qǐng)實(shí)施例還提供了一種優(yōu)選的用于分布式事務(wù)處理的備節(jié)點(diǎn)設(shè)備,該備節(jié)點(diǎn)設(shè)備120的結(jié)構(gòu)如圖6所示,除如圖5所示的接收裝置121、日志應(yīng)用裝置122和發(fā)送裝置123之外,還包括清理裝置124。具體的,該清理裝置124用于在需要?jiǎng)h除所述備節(jié)點(diǎn)設(shè)備中的數(shù)據(jù)頁(yè)時(shí),刪除日志序號(hào)小于等于所述限制日志序號(hào)的數(shù)據(jù)頁(yè)。
在本實(shí)施例中,所述用于分布式事務(wù)處理的數(shù)據(jù)庫(kù)系統(tǒng)中主節(jié)點(diǎn)設(shè)備可讀可寫,所述備節(jié)點(diǎn)設(shè)備僅可讀,且備節(jié)點(diǎn)設(shè)備中的數(shù)據(jù)始終為主節(jié)點(diǎn)設(shè)備在某次事務(wù)提交之后的時(shí)間點(diǎn)的數(shù)據(jù)狀態(tài)快照。當(dāng)備節(jié)點(diǎn)設(shè)備接收到讀請(qǐng)求時(shí),可以根據(jù)讀請(qǐng)求由其內(nèi)存的數(shù)據(jù)頁(yè)中調(diào)取相應(yīng)的數(shù)據(jù),若備節(jié)點(diǎn)設(shè)備的內(nèi)存中缺少相應(yīng)的數(shù)據(jù)頁(yè)導(dǎo)致無(wú)法直接調(diào)取相應(yīng)的數(shù)據(jù)(相應(yīng)的數(shù)據(jù)頁(yè)已經(jīng)刪除),由于這些缺少的數(shù)據(jù)頁(yè)已經(jīng)由主節(jié)點(diǎn)設(shè)備回寫至共享存儲(chǔ)設(shè)備,因此備節(jié)點(diǎn)設(shè)備可以根據(jù)需要從共享存儲(chǔ)設(shè)備中獲取所述讀請(qǐng) 求對(duì)應(yīng)的數(shù)據(jù)頁(yè),以完成數(shù)據(jù)讀取,由此保證備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)完整性。
由此,所述備節(jié)點(diǎn)設(shè)備120的所述接收裝置121還用于獲取讀請(qǐng)求,以及在所述備節(jié)點(diǎn)設(shè)備不包含所述讀請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)頁(yè)時(shí),由所述共享存儲(chǔ)設(shè)備獲取所述讀請(qǐng)求對(duì)應(yīng)的數(shù)據(jù)頁(yè)。
以本實(shí)施例中一主一備構(gòu)架的數(shù)據(jù)庫(kù)系統(tǒng)為例,主節(jié)點(diǎn)設(shè)備可讀可寫,能夠處理讀寫請(qǐng)求,備節(jié)點(diǎn)設(shè)備僅可讀,僅可處理讀請(qǐng)求,圖7示出了該數(shù)據(jù)庫(kù)系統(tǒng)中主節(jié)點(diǎn)設(shè)備110、備節(jié)點(diǎn)設(shè)備120和共享存儲(chǔ)設(shè)備130之間的交互流程圖,具體如下:
步驟S701,主節(jié)點(diǎn)設(shè)備110在進(jìn)行事提交后,會(huì)將該事務(wù)相關(guān)的Redo Log(重做日志)及時(shí)寫入到共享存儲(chǔ)設(shè)備130的日志文件中。例如某一事務(wù)處理過(guò)程中對(duì)應(yīng)的Redo Log的LSN為6-10,其事務(wù)提交對(duì)應(yīng)的Redo Log的LSN為10。
步驟S702,主節(jié)點(diǎn)設(shè)備110在向共享存儲(chǔ)設(shè)備130磁盤的日志文件中寫入LSN為6-10的Redo Log之后,向備節(jié)點(diǎn)設(shè)備120通知已經(jīng)回寫的事務(wù)提交的Redo Log對(duì)應(yīng)的LSN。該LSN即為L(zhǎng)SN_COMMIT(提交日志序號(hào))。
步驟S703,備節(jié)點(diǎn)設(shè)備120根據(jù)LSN_COMMIT所表示的LSN,由共享存儲(chǔ)設(shè)備130的日志文件中讀取本次LSN_COMMIT與上次LSN_COMMIT之間的Redo Log。在本例中,本次LSN_COMMIT表示的LSN為10,上次LSN_COMMIT表示的LSN為5,因此在本步驟中備節(jié)點(diǎn)設(shè)備120由共享存儲(chǔ)設(shè)備130的日志文件讀取LSN為6-10的Redo Log。
步驟S704,備節(jié)點(diǎn)設(shè)備120重放讀取到的Redo Log,來(lái)更新對(duì)應(yīng)的數(shù)據(jù),同時(shí)更新LSN_LIMIT(限制日志序號(hào))為已經(jīng)重放的Redo Log的LSN。由此,在Redo Log重放完成后,LSN_LIMIT表示的LSN為10。
步驟S705,備節(jié)點(diǎn)設(shè)備120將LSN_LIMIT通知主節(jié)點(diǎn)設(shè)備110。
步驟S706,主節(jié)點(diǎn)設(shè)備110根據(jù)接收到的LSN_LIMIT所表示的LSN,向共享存儲(chǔ)設(shè)備130磁盤的數(shù)據(jù)文件寫入本次LSN_LIMIT與上次LSN_LIMIT之間的數(shù)據(jù)頁(yè)。
步驟S707,當(dāng)備節(jié)點(diǎn)設(shè)備120中的內(nèi)存用完時(shí),可以根據(jù)當(dāng)前更新的 LSN_LIMIT刪除LSN_LIMIT之前的相應(yīng)數(shù)據(jù)頁(yè),從而釋放內(nèi)存。例如,當(dāng)LSN_LIMIT更新為10之后,可以刪除LSN為10之前的數(shù)據(jù)頁(yè),以釋放內(nèi)存,完成正常的處理。
步驟S708,備節(jié)點(diǎn)設(shè)備120在處理讀請(qǐng)求時(shí),當(dāng)其內(nèi)存中無(wú)法找到相關(guān)的數(shù)據(jù)頁(yè)時(shí),由共享存儲(chǔ)設(shè)備130磁盤的數(shù)據(jù)文件讀取對(duì)應(yīng)的數(shù)據(jù)頁(yè),使得備節(jié)點(diǎn)設(shè)備能夠完成讀請(qǐng)求的處理。
以圖8所示的狀態(tài)為例,主節(jié)點(diǎn)設(shè)備110生成并向共享存儲(chǔ)設(shè)備130的日志文件中寫入的Redo Log的LSN為50,而備節(jié)點(diǎn)設(shè)備120已經(jīng)重放并Redo Log的LSN為40,其內(nèi)存中最新的數(shù)據(jù)頁(yè)的LSN為40??紤]通信以及讀寫處理的延遲,因此主節(jié)點(diǎn)設(shè)備110有可能還未根據(jù)最新更新的LSN_LIMIT向共享存儲(chǔ)設(shè)備130的數(shù)據(jù)文件寫入LSN 40之前的所有數(shù)據(jù)頁(yè),假設(shè)此時(shí)共享存儲(chǔ)設(shè)備130的數(shù)據(jù)文件中最新的數(shù)據(jù)頁(yè)的LSN為30。由此可知,由備節(jié)點(diǎn)設(shè)備120和共享存儲(chǔ)設(shè)備130中最多可以讀取到LSN為40的數(shù)據(jù)頁(yè)。
例如,若備節(jié)點(diǎn)設(shè)備120由于內(nèi)存不足而刪除了LSN 20之前的數(shù)據(jù)頁(yè),當(dāng)備節(jié)點(diǎn)設(shè)備120需要根據(jù)讀請(qǐng)求讀取LSN為15的數(shù)據(jù)頁(yè)中的數(shù)據(jù)時(shí),由于在其內(nèi)存中缺少對(duì)應(yīng)的數(shù)據(jù)頁(yè),則可以從共享存儲(chǔ)設(shè)備130的數(shù)據(jù)文件中去讀取LSN為15的數(shù)據(jù)頁(yè),從而完成讀請(qǐng)求的處理。若備節(jié)點(diǎn)設(shè)備120由于內(nèi)存不足而刪除了LSN 40之前的所有數(shù)據(jù)頁(yè),當(dāng)備節(jié)點(diǎn)設(shè)備120需要根據(jù)讀請(qǐng)求讀取LSN為35的數(shù)據(jù)頁(yè)中的數(shù)據(jù)時(shí),由于此時(shí)共享存儲(chǔ)設(shè)備130的數(shù)據(jù)文件中最新的數(shù)據(jù)頁(yè)的LSN為30,此時(shí)備節(jié)點(diǎn)設(shè)備120需要等待主節(jié)點(diǎn)設(shè)備根據(jù)LSN_LIMIT向共享存儲(chǔ)設(shè)備130的數(shù)據(jù)文件寫入LSN為31-40的數(shù)據(jù)頁(yè)之后,再?gòu)墓蚕泶鎯?chǔ)設(shè)備130的數(shù)據(jù)文件中去讀取LSN為35的數(shù)據(jù)頁(yè),從而完成讀請(qǐng)求的處理。
綜上所述,主節(jié)點(diǎn)設(shè)備在向共享存儲(chǔ)設(shè)備回寫事務(wù)提交的重做日志后,將重做日志中對(duì)應(yīng)事務(wù)提交事件的日志序號(hào)發(fā)送給備節(jié)點(diǎn)設(shè)備,由此控制備節(jié)點(diǎn)設(shè)備重放相應(yīng)的重做日志,以更新備節(jié)點(diǎn)設(shè)備內(nèi)存中的數(shù)據(jù)頁(yè)。同時(shí),主節(jié)點(diǎn)設(shè)備根據(jù)備節(jié)點(diǎn)設(shè)備的反饋來(lái)限制自身向回寫數(shù)據(jù)頁(yè)的進(jìn)度,使得備節(jié)點(diǎn)設(shè)備的數(shù)據(jù)始終為主節(jié)點(diǎn)設(shè)備提交后某一事務(wù)后的快照,不會(huì) 由共享存儲(chǔ)設(shè)備中讀取到不應(yīng)該可見(jiàn)的數(shù)據(jù),由此保證事務(wù)特性。
需要注意的是,本申請(qǐng)可在軟件和/或軟件與硬件的組合體中被實(shí)施,例如,可采用專用集成電路(ASIC)、通用目的計(jì)算機(jī)或任何其他類似硬件設(shè)備來(lái)實(shí)現(xiàn)。在一個(gè)實(shí)施例中,本申請(qǐng)的軟件程序可以通過(guò)處理器執(zhí)行以實(shí)現(xiàn)上文所述步驟或功能。同樣地,本申請(qǐng)的軟件程序(包括相關(guān)的數(shù)據(jù)結(jié)構(gòu))可以被存儲(chǔ)到計(jì)算機(jī)可讀記錄介質(zhì)中,例如,RAM存儲(chǔ)器,磁或光驅(qū)動(dòng)器或軟磁盤及類似設(shè)備。另外,本申請(qǐng)的一些步驟或功能可采用硬件來(lái)實(shí)現(xiàn),例如,作為與處理器配合從而執(zhí)行各個(gè)步驟或功能的電路。
另外,本申請(qǐng)的一部分可被應(yīng)用為計(jì)算機(jī)程序產(chǎn)品,例如計(jì)算機(jī)程序指令,當(dāng)其被計(jì)算機(jī)執(zhí)行時(shí),通過(guò)該計(jì)算機(jī)的操作,可以調(diào)用或提供根據(jù)本申請(qǐng)的方法和/或技術(shù)方案。而調(diào)用本申請(qǐng)的方法的程序指令,可能被存儲(chǔ)在固定的或可移動(dòng)的記錄介質(zhì)中,和/或通過(guò)廣播或其他信號(hào)承載媒體中的數(shù)據(jù)流而被傳輸,和/或被存儲(chǔ)在根據(jù)所述程序指令運(yùn)行的計(jì)算機(jī)設(shè)備的工作存儲(chǔ)器中。在此,根據(jù)本申請(qǐng)的一個(gè)實(shí)施例包括一個(gè)裝置,該裝置包括用于存儲(chǔ)計(jì)算機(jī)程序指令的存儲(chǔ)器和用于執(zhí)行程序指令的處理器,其中,當(dāng)該計(jì)算機(jī)程序指令被該處理器執(zhí)行時(shí),觸發(fā)該裝置運(yùn)行基于前述根據(jù)本申請(qǐng)的多個(gè)實(shí)施例的方法和/或技術(shù)方案。
對(duì)于本領(lǐng)域技術(shù)人員而言,顯然本申請(qǐng)不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本申請(qǐng)的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本申請(qǐng)。因此,無(wú)論從哪一點(diǎn)來(lái)看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本申請(qǐng)的范圍由所附權(quán)利要求而不是上述說(shuō)明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化涵括在本申請(qǐng)內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。此外,顯然“包括”一詞不排除其他單元或步驟,單數(shù)不排除復(fù)數(shù)。裝置權(quán)利要求中陳述的多個(gè)單元或裝置也可以由一個(gè)單元或裝置通過(guò)軟件或者硬件來(lái)實(shí)現(xiàn)。第一,第二等詞語(yǔ)用來(lái)表示名稱,而并不表示任何特定的順序。