本發(fā)明涉及分布式數(shù)據(jù)存儲(chǔ)領(lǐng)域,具體來說,涉及一種分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法和系統(tǒng)。
背景技術(shù):
:無共享(shared-nothing)結(jié)構(gòu)的數(shù)據(jù)庫(kù)集群因其較好的系統(tǒng)擴(kuò)展性和較高的并行查詢處理性能,而成為目前大規(guī)模數(shù)據(jù)庫(kù)系統(tǒng)的主流系統(tǒng)結(jié)構(gòu),如:IBMDB2的UDB、MysqlCluster和EMC的GreenPlum均采用無共享的結(jié)構(gòu)。在采用數(shù)據(jù)無共享結(jié)構(gòu)的數(shù)據(jù)庫(kù)集群中,數(shù)據(jù)可以分為兩類,一類是大表數(shù)據(jù),通常采用某種劃分策略分布到多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn);另一類是小表數(shù)據(jù),表示大表的一些定義和規(guī)則等信息,因經(jīng)常與大表進(jìn)行關(guān)聯(lián)查詢,因此采用全復(fù)制的方式,分布在所有相關(guān)的數(shù)據(jù)庫(kù)節(jié)點(diǎn)上。全復(fù)制的數(shù)據(jù)表,在進(jìn)行數(shù)據(jù)讀取時(shí),只需要選擇任何一個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)進(jìn)行即可,但是在進(jìn)行DML操作(insert,update和delete)時(shí),必須在所有的數(shù)據(jù)庫(kù)節(jié)點(diǎn)上進(jìn)行修改,以保證所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)據(jù)的一致性。目前,現(xiàn)有的數(shù)據(jù)庫(kù)事務(wù)處理機(jī)制在對(duì)這些全復(fù)制數(shù)據(jù)進(jìn)行修改時(shí),是分別在單個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)上進(jìn)行數(shù)據(jù)修改的,這種處理方式不僅控制機(jī)制比較復(fù)雜,而且還無法保證各個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)之間的同步性,從而無法保證所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)據(jù)的一致性。針對(duì)相關(guān)技術(shù)中無法保證所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)據(jù)的一致性問題,目前尚未提出有效的解決方案。技術(shù)實(shí)現(xiàn)要素:針對(duì)相關(guān)技術(shù)中無法保證所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)據(jù)的一致性問題,本發(fā)明提出一種分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法和系統(tǒng),其采用了數(shù)據(jù)庫(kù)鏈路的方式,保證了多副本數(shù)據(jù)的一致性控制,并且,在保證多副本數(shù)據(jù)的一致性的基礎(chǔ)上,很好的解決了事務(wù)處理性能和節(jié)點(diǎn)故障處理的問題。本發(fā)明的技術(shù)方案是這樣實(shí)現(xiàn)的:根據(jù)本發(fā)明的一個(gè)方面,提供了一種分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法。該分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法,包括:主數(shù)據(jù)庫(kù)接收根據(jù)配置請(qǐng)求生成的事務(wù);主數(shù)據(jù)庫(kù)執(zhí)行事務(wù)對(duì)應(yīng)的操作,并根據(jù)預(yù)先配置的主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)庫(kù)鏈路,將事務(wù)傳輸至從數(shù)據(jù)庫(kù)。此外,分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法進(jìn)一步包括:預(yù)先在主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)之間配置數(shù)據(jù)庫(kù)鏈路。另外,分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法還包括:從數(shù)據(jù)庫(kù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。其中,在從數(shù)據(jù)庫(kù)執(zhí)行完成后,判斷從數(shù)據(jù)庫(kù)的執(zhí)行結(jié)果與主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果是否一致;在判斷結(jié)果為否的情況下,刪除從數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果,并將主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果同步到從數(shù)據(jù)庫(kù)中。其中,在從數(shù)據(jù)庫(kù)執(zhí)行與事務(wù)對(duì)應(yīng)操作的過程中,對(duì)于出現(xiàn)異常而無法執(zhí)行該操作的從數(shù)據(jù)庫(kù)進(jìn)行標(biāo)識(shí),將標(biāo)識(shí)后的該從數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)鏈路剔除,并允許其他從數(shù)據(jù)庫(kù)繼續(xù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。其中,在該出現(xiàn)異常的從數(shù)據(jù)庫(kù)恢復(fù)正常后,將該從數(shù)據(jù)庫(kù)加入到數(shù)據(jù)庫(kù)鏈路中,并將主數(shù)據(jù)庫(kù)中執(zhí)行事務(wù)的操作的執(zhí)行結(jié)果同步到該從數(shù)據(jù)庫(kù)中。其中,配置請(qǐng)求至少包含一條對(duì)象修改請(qǐng)求。根據(jù)本發(fā)明的另一方面,提供了一種分布式數(shù)據(jù)庫(kù)的事務(wù)處理系統(tǒng)。該分布式數(shù)據(jù)庫(kù)的事務(wù)處理系統(tǒng)包括主數(shù)據(jù)庫(kù)和至少一個(gè)從數(shù)據(jù)庫(kù),其中,主數(shù)據(jù)庫(kù)包括:接收模塊,用于接收根據(jù)配置請(qǐng)求生成的事務(wù);執(zhí)行模塊,用于執(zhí)行事務(wù)對(duì)應(yīng)的操作;傳輸模塊,用于根據(jù)預(yù)先配置的主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)庫(kù)鏈路,將事務(wù)傳輸至從數(shù)據(jù)庫(kù),以便從數(shù)據(jù)庫(kù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。此外,分布式數(shù)據(jù)庫(kù)的事務(wù)處理系統(tǒng)還包括配置管理服務(wù)器;配置管理服務(wù)器,用于接收配置請(qǐng)求,生成事務(wù)并將生成的事務(wù)發(fā)送至主數(shù)據(jù)庫(kù)。其中,配置管理服務(wù)器包括判斷模塊和結(jié)果處理模塊,判斷模塊,用于在從數(shù)據(jù)庫(kù)執(zhí)行完成后,判斷從數(shù)據(jù)庫(kù)的執(zhí)行結(jié)果與主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果是否一致;結(jié)果處理模塊,用于在判斷結(jié)果為否的情況下,刪除從數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果,并將主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果同步到從數(shù)據(jù)庫(kù)中。此外,配置管理服務(wù)器還用于在從數(shù)據(jù)庫(kù)執(zhí)行與事務(wù)對(duì)應(yīng)操作的過程中,對(duì)于出現(xiàn)異常而無法執(zhí)行該操作的從數(shù)據(jù)庫(kù)進(jìn)行標(biāo)識(shí),將標(biāo)識(shí)后的該從數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)鏈路剔除,并允許其他從數(shù)據(jù)庫(kù)繼續(xù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。在該出現(xiàn)異常的從數(shù)據(jù)庫(kù)恢復(fù)正常后,將該從數(shù)據(jù)庫(kù)加入到數(shù)據(jù)庫(kù)鏈路中,并將主數(shù)據(jù)庫(kù)中執(zhí)行事務(wù)的操作的執(zhí)行結(jié)果同步到該從數(shù)據(jù)庫(kù)中。本發(fā)明通過在主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間配置數(shù)據(jù)庫(kù)鏈路,將原先對(duì)所有數(shù)據(jù)庫(kù)的處理轉(zhuǎn)換成對(duì)主數(shù)據(jù)庫(kù)進(jìn)行處理,然后再由主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間進(jìn)行通信處理,從而簡(jiǎn)化了對(duì)所有數(shù)據(jù)庫(kù)的一致性控制,保證了所有數(shù)據(jù)庫(kù)之間的同步性,而且,在進(jìn)行處理時(shí),還能夠?qū)⒁唤M操作同時(shí)作為一個(gè)事務(wù)進(jìn)行處理,從而大大的提高了處理時(shí)的靈活性和便捷性。附圖說明為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1是根據(jù)本發(fā)明實(shí)施例的分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法的流程圖;圖2是根據(jù)本發(fā)明實(shí)施例的分布式數(shù)據(jù)庫(kù)的事務(wù)處理系統(tǒng)的主數(shù)據(jù)庫(kù)的結(jié)構(gòu)示意圖;圖3是根據(jù)本發(fā)明實(shí)施例的分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法的實(shí)例的流程示意圖;圖4是根據(jù)本發(fā)明實(shí)施例的分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法中數(shù)據(jù)庫(kù)鏈路的連接示意圖。具體實(shí)施方式下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例?;诒景l(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。根據(jù)本發(fā)明的實(shí)施例,提供了一種分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法。如圖1所示,根據(jù)本發(fā)明實(shí)施例的分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法包括:步驟S101,主數(shù)據(jù)庫(kù)接收根據(jù)配置請(qǐng)求生成的事務(wù);步驟S103,主數(shù)據(jù)庫(kù)執(zhí)行事務(wù)對(duì)應(yīng)的操作,并根據(jù)預(yù)先配置的主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)庫(kù)鏈路,將事務(wù)傳輸至從數(shù)據(jù)庫(kù)。此外,分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法進(jìn)一步包括:預(yù)先在主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)之間配置數(shù)據(jù)庫(kù)鏈路。另外,分布式數(shù)據(jù)庫(kù)的事務(wù)處理方法還包括:從數(shù)據(jù)庫(kù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。其中,在從數(shù)據(jù)庫(kù)執(zhí)行完成后,判斷從數(shù)據(jù)庫(kù)的執(zhí)行結(jié)果與主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果是否一致;在判斷結(jié)果為否的情況下,刪除從數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果,并將主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果同步到從數(shù)據(jù)庫(kù)中。其中,在從數(shù)據(jù)庫(kù)執(zhí)行與事務(wù)對(duì)應(yīng)操作的過程中,對(duì)于出現(xiàn)異常而無法執(zhí)行該操作的從數(shù)據(jù)庫(kù)進(jìn)行標(biāo)識(shí),將標(biāo)識(shí)后的該從數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)鏈路剔除,并允許其他從數(shù)據(jù)庫(kù)繼續(xù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。其中,在該出現(xiàn)異常的從數(shù)據(jù)庫(kù)恢復(fù)正常后,將該從數(shù)據(jù)庫(kù)加入到數(shù)據(jù)庫(kù)鏈路中,并將主數(shù)據(jù)庫(kù)中執(zhí)行事務(wù)的操作的執(zhí)行結(jié)果同步到該從數(shù)據(jù)庫(kù)中。其中,配置請(qǐng)求至少包含一條對(duì)象修改請(qǐng)求。根據(jù)本發(fā)明的實(shí)施例,還提供了一種分布式數(shù)據(jù)庫(kù)的事務(wù)處理系統(tǒng)。如圖2所示,該分布式數(shù)據(jù)庫(kù)的事務(wù)處理系統(tǒng)包括主數(shù)據(jù)庫(kù)(未示出)和至少一個(gè)從數(shù)據(jù)庫(kù)(未示出),其中,主數(shù)據(jù)庫(kù)包括:接收模塊21,用于接收根據(jù)配置請(qǐng)求生成的事務(wù);執(zhí)行模塊22,用于執(zhí)行事務(wù)對(duì)應(yīng)的操作;傳輸模塊23,用于根據(jù)預(yù)先配置的主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間的數(shù)據(jù)庫(kù)鏈路,將事務(wù)傳輸至從數(shù)據(jù)庫(kù),以便從數(shù)據(jù)庫(kù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。此外,分布式數(shù)據(jù)庫(kù)的事務(wù)處理系統(tǒng)還包括配置管理服務(wù)器(未示出);配置管理服務(wù)器,用于接收配置請(qǐng)求,生成事務(wù)并將生成的事務(wù)發(fā)送至主數(shù)據(jù)庫(kù)。其中,配置管理服務(wù)器包括判斷模塊和結(jié)果處理模塊,判斷模塊,用于在從數(shù)據(jù)庫(kù)執(zhí)行完成后,判斷從數(shù)據(jù)庫(kù)的執(zhí)行結(jié)果與主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果是否一致;結(jié)果處理模塊,用于在判斷結(jié)果為否的情況下,刪除從數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果,并將主數(shù)據(jù)庫(kù)中的執(zhí)行結(jié)果同步到從數(shù)據(jù)庫(kù)中。此外,配置管理服務(wù)器還用于在從數(shù)據(jù)庫(kù)執(zhí)行與事務(wù)對(duì)應(yīng)操作的過程中,對(duì)于出現(xiàn)異常而無法執(zhí)行該操作的從數(shù)據(jù)庫(kù)進(jìn)行標(biāo)識(shí),將標(biāo)識(shí)后的該從數(shù)據(jù)庫(kù)對(duì)應(yīng)的數(shù)據(jù)庫(kù)鏈路剔除,并允許其他從數(shù)據(jù)庫(kù)繼續(xù)執(zhí)行事務(wù)對(duì)應(yīng)的操作。在該出現(xiàn)異常的從數(shù)據(jù)庫(kù)恢復(fù)正常后,將該從數(shù)據(jù)庫(kù)加入到數(shù)據(jù)庫(kù)鏈路中,并將主數(shù)據(jù)庫(kù)中執(zhí)行事務(wù)的操作的執(zhí)行結(jié)果同步到該從數(shù)據(jù)庫(kù)中。以下通過實(shí)例與原理對(duì)本發(fā)明的上述技術(shù)方案進(jìn)行說明。由于全復(fù)制數(shù)據(jù)表的特性,使得全復(fù)制數(shù)據(jù)表在進(jìn)行DML操作時(shí),必須在所有的數(shù)據(jù)庫(kù)節(jié)點(diǎn)上進(jìn)行修改,保證所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)數(shù)據(jù)的一致性。因此在對(duì)這些全復(fù)制數(shù)據(jù)進(jìn)行修改時(shí),需解決以下三個(gè)問題:(1)多個(gè)副本數(shù)據(jù)庫(kù)的一致性控制;(2)提供用戶自定義的事務(wù)處理,解決事務(wù)處理的性能,即將用戶的一組操作組合成一個(gè)事務(wù)的整體進(jìn)行處理;(3)可靠性問題,包括節(jié)點(diǎn)故障的處理和恢復(fù)。如圖3所示,關(guān)于多個(gè)副本數(shù)據(jù)庫(kù)的一致性控制的問題,本發(fā)明將采用事務(wù)和中間件服務(wù)管理相結(jié)合的方法來解決,具體步驟如下:步驟1、配置管理服務(wù)器在負(fù)載均衡服務(wù)器上注冊(cè);步驟2、負(fù)載均衡服務(wù)器接收配置請(qǐng)求;步驟3、負(fù)載均衡服務(wù)器將一個(gè)配置管理服務(wù)器綁定給配置請(qǐng)求方;步驟4、配置請(qǐng)求方將要修改的配置數(shù)據(jù)發(fā)送給配置管理服務(wù)器;步驟5、對(duì)配置請(qǐng)求進(jìn)行分類,如果是配置查詢請(qǐng)求,則直接發(fā)送給中間件服務(wù)管理節(jié)點(diǎn)上的主數(shù)據(jù)庫(kù)(SMDB),在主數(shù)據(jù)上進(jìn)行查詢,并將執(zhí)行的結(jié)果返回給配置管理服務(wù)器,由配置管理服務(wù)器將結(jié)果返回給用戶;如果是配置修改請(qǐng)求,則繼續(xù)下一步;步驟6、配置管理服務(wù)器根據(jù)配置請(qǐng)求以及中間件服務(wù)管理節(jié)點(diǎn)上發(fā)來的最新數(shù)據(jù)庫(kù)狀態(tài)信息構(gòu)造事務(wù),并將事務(wù)發(fā)送給主數(shù)據(jù)庫(kù),由主數(shù)據(jù)庫(kù)通過數(shù)據(jù)庫(kù)鏈路(DBlink)將事務(wù)發(fā)送給從數(shù)據(jù)庫(kù)節(jié)點(diǎn);步驟7、當(dāng)主數(shù)據(jù)庫(kù)和從數(shù)據(jù)庫(kù)接收的事務(wù)執(zhí)行完對(duì)應(yīng)操作后,將執(zhí)行的結(jié)果(成功或失敗)回饋給用戶。為了保證多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)復(fù)制數(shù)據(jù)的一致性,寫入操作時(shí)必須采用事務(wù)處理的方式,要么所有的節(jié)點(diǎn)都修改成功,否則必須恢復(fù)到寫入之前的狀態(tài),對(duì)于分布系統(tǒng)的數(shù)據(jù)一致性控制,目前已有了較多的研究成果,但是對(duì)于多個(gè)獨(dú)立的數(shù)據(jù)庫(kù)系統(tǒng),如果采用分布式事務(wù)處理的方式,不但控制機(jī)制比較復(fù)雜,而且通信效率和可靠性都難以得到保證。本發(fā)明通過數(shù)據(jù)庫(kù)鏈路,實(shí)現(xiàn)了本地?cái)?shù)據(jù)庫(kù)對(duì)遠(yuǎn)程數(shù)據(jù)庫(kù)的DML操作,并充分利用了數(shù)據(jù)庫(kù)內(nèi)部的一致性維護(hù)機(jī)制進(jìn)行事務(wù)處理,因而能夠很好的滿足全復(fù)制數(shù)據(jù)的一致性控制,采用數(shù)據(jù)庫(kù)鏈路的方式,將對(duì)多個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)的事務(wù)處理,轉(zhuǎn)化成對(duì)一個(gè)數(shù)據(jù)庫(kù)節(jié)點(diǎn)的事務(wù)處理,充分利用了數(shù)據(jù)庫(kù)事務(wù)處理的特點(diǎn),大大簡(jiǎn)化了對(duì)副本數(shù)據(jù)一致性控制的實(shí)現(xiàn),采用數(shù)據(jù)庫(kù)鏈路的多分布數(shù)據(jù)庫(kù)一致性處理結(jié)構(gòu)如圖4所示,這樣對(duì)多個(gè)數(shù)據(jù)庫(kù)的單條數(shù)據(jù)修改語句,就轉(zhuǎn)化為對(duì)主數(shù)據(jù)庫(kù)的一組數(shù)據(jù)修改的語句。采用數(shù)據(jù)庫(kù)鏈路進(jìn)行全復(fù)制數(shù)據(jù)的一致性控制,對(duì)全復(fù)制數(shù)據(jù)表進(jìn)行修改的DML語句如下:Q1:updatetest_tablesettest_column=’XXX’where....;通過數(shù)據(jù)庫(kù)鏈路改寫過的DML語句串的形式如下:updatetest_tablesettest_column=’XXX’where....;updatetest_table@link1settest_column=’XXX’where....;updatetest_table@link2settest_column=’XXX’where....;…updatetest_table@linkNsettest_column=’XXX’where....;本發(fā)明除了在DML操作的流程上保證數(shù)據(jù)處理的一致性外,還額外增加了一個(gè)一致性檢查流程,定期對(duì)多副本數(shù)據(jù)進(jìn)行一致性比較,用戶可以通過配置信息設(shè)定檢查周期和需要檢查的數(shù)據(jù)表。對(duì)于兩個(gè)分布在不同數(shù)據(jù)庫(kù)中的A表(全復(fù)制數(shù)據(jù)表)數(shù)據(jù)的一致性檢查,采用如下的集合運(yùn)算方式:Select*fromAminusselect*fromA@linkNunionallSelect*fromA@linkNminusselect*fromA;如果返回的結(jié)果集為空,則表示兩個(gè)節(jié)點(diǎn)的A表是完全一致的。即如果(A-B)U(B-A)為空集,則表示兩個(gè)集合中的數(shù)據(jù)都完全互相包含,因此兩個(gè)集合完全相等。檢查線程以主數(shù)據(jù)庫(kù)為模板,順序檢查其他所有的從數(shù)據(jù)庫(kù)節(jié)點(diǎn)的數(shù)據(jù),如果發(fā)現(xiàn)數(shù)據(jù)不一致,則刪除從數(shù)據(jù)庫(kù)中該表的數(shù)據(jù),從主數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)同步。本發(fā)明在解決多個(gè)副本數(shù)據(jù)庫(kù)的一致性控制問題的同時(shí),支持對(duì)全復(fù)制數(shù)據(jù)的自定義的事務(wù)處理,即把一組DML操作定義為整個(gè)事務(wù),只有所有的DML語句都執(zhí)行成功,才進(jìn)行提交,否則所有的語句都不執(zhí)行,系統(tǒng)回退到事務(wù)執(zhí)行之前的狀態(tài)。用戶執(zhí)行自定義的事務(wù)處理方法如下,即采用一個(gè)SQL語句向量記錄所有的DML語句,全部執(zhí)行沒有異常時(shí),才進(jìn)行提交,具體如下:在實(shí)際應(yīng)用時(shí),為了提高用戶自定義的事務(wù)處理性能,本發(fā)明可以采用客戶端緩存SQL語句的優(yōu)化策略,該優(yōu)化策略和無緩存策略以及服務(wù)器端緩存SQL語句的方式相比,客戶端緩存性能更好,而且能有效避免服務(wù)器端的資源死鎖。三種用戶自定義事務(wù)的SQL語句緩存策略的比較如表1所示。表1三種事務(wù)處理策略分析和比較采用客戶端緩存SQL語句的方式,能夠滿足在系統(tǒng)規(guī)模擴(kuò)展時(shí),得到線性的執(zhí)行時(shí)間比。在多副本一致性控制時(shí),較好的滿足性能要求。全復(fù)制數(shù)據(jù)的修改必須在所有的節(jié)點(diǎn)都執(zhí)行成功,才能正確提交。但是在大規(guī)模系統(tǒng)中,節(jié)點(diǎn)的故障是不可避免的,必須保證在一個(gè)節(jié)點(diǎn)發(fā)生故障的情況下,系統(tǒng)依然能夠提供正常的服務(wù)。本發(fā)明在實(shí)際應(yīng)用時(shí),可以通過配置域(ConfigurationDomain)來維護(hù)多副本數(shù)據(jù)的分布信息。配置域是一個(gè)記錄所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)信息和當(dāng)前狀態(tài)的結(jié)構(gòu),一致性控制程序通過這個(gè)結(jié)構(gòu)對(duì)配置域上所有的數(shù)據(jù)庫(kù)進(jìn)行數(shù)據(jù)更新的。在配置服務(wù)程序運(yùn)行中,當(dāng)一個(gè)數(shù)據(jù)庫(kù)發(fā)生故障時(shí),服務(wù)程序就會(huì)重新檢查該數(shù)據(jù)庫(kù)的狀態(tài),確認(rèn)不可用時(shí),則修改配置域中相應(yīng)數(shù)據(jù)庫(kù)的狀態(tài)標(biāo)志,剔除該節(jié)點(diǎn)后繼續(xù)進(jìn)行數(shù)據(jù)的修改。當(dāng)節(jié)點(diǎn)恢復(fù)時(shí),需要運(yùn)行數(shù)據(jù)庫(kù)同步恢復(fù)模塊,同步恢復(fù)模塊檢查故障數(shù)據(jù)庫(kù)節(jié)點(diǎn)的所有復(fù)制表數(shù)據(jù)和主數(shù)據(jù)庫(kù)節(jié)點(diǎn)的差別,發(fā)現(xiàn)不一致的情況則將主數(shù)據(jù)庫(kù)的數(shù)據(jù)同步到該數(shù)據(jù)庫(kù)中?;謴?fù)完成后,則修改配置域中的相應(yīng)內(nèi)容,將節(jié)點(diǎn)數(shù)據(jù)庫(kù)狀態(tài)置為正常。在對(duì)配置域中的數(shù)據(jù)庫(kù)狀態(tài)進(jìn)行修改時(shí),必須鎖住相應(yīng)的數(shù)據(jù)庫(kù)節(jié)點(diǎn),此時(shí)暫時(shí)停止對(duì)全復(fù)制數(shù)據(jù)的更新,由于全復(fù)制分布的數(shù)據(jù)表通常數(shù)據(jù)量不大,因此恢復(fù)過程時(shí)間也不長(zhǎng),可控制在分鐘級(jí)別,在大規(guī)模集群數(shù)據(jù)庫(kù)系統(tǒng)中是可以容忍的。綜上所述,借助于本發(fā)明的上述技術(shù)方案,通過在主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間配置數(shù)據(jù)庫(kù)鏈路,將原先對(duì)所有數(shù)據(jù)庫(kù)的處理轉(zhuǎn)換成對(duì)主數(shù)據(jù)庫(kù)進(jìn)行處理,然后再由主數(shù)據(jù)庫(kù)與從數(shù)據(jù)庫(kù)之間進(jìn)行通信處理,從而簡(jiǎn)化了對(duì)所有數(shù)據(jù)庫(kù)的一致性控制,保證了所有數(shù)據(jù)庫(kù)之間的同步性,而且,在進(jìn)行處理時(shí),還能夠?qū)⒁唤M操作同時(shí)作為一個(gè)事務(wù)進(jìn)行處理,從而大大的提高了處理時(shí)的靈活性和便捷性。另外,本發(fā)明在根據(jù)事務(wù)執(zhí)行對(duì)應(yīng)操作后,還對(duì)從數(shù)據(jù)庫(kù)與主數(shù)據(jù)庫(kù)的執(zhí)行結(jié)果進(jìn)行對(duì)比,以保證所有數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性,為所有數(shù)據(jù)庫(kù)中的數(shù)據(jù)的一致性提供了雙重保證,此外,本發(fā)明還能夠容忍從數(shù)據(jù)庫(kù)發(fā)生故障,并且,在發(fā)生故障的從數(shù)據(jù)庫(kù)恢復(fù)時(shí),能夠自動(dòng)的將主數(shù)據(jù)庫(kù)中執(zhí)行的結(jié)果同步到該從數(shù)據(jù)庫(kù)中,提高了數(shù)據(jù)處理時(shí)的可靠性。以上所述僅為本發(fā)明的較佳實(shí)施例而已,并不用以限制本發(fā)明,凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進(jìn)等,均應(yīng)包含在本發(fā)明的保護(hù)范圍之內(nèi)。當(dāng)前第1頁(yè)1 2 3