在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法及系統(tǒng)的制作方法
【專(zhuān)利摘要】本申請(qǐng)公開(kāi)了在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法及系統(tǒng),其中,所述方法包括:接收到第一數(shù)據(jù)庫(kù)向第二數(shù)據(jù)庫(kù)發(fā)送的同步變更信息時(shí),開(kāi)啟一事務(wù);通過(guò)結(jié)構(gòu)化查詢語(yǔ)言SQL規(guī)范,在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)以及所述同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便觸發(fā)第二數(shù)據(jù)庫(kù)在變更日志中記錄下第一數(shù)據(jù)庫(kù)的標(biāo)識(shí);將事務(wù)提交到所述第二數(shù)據(jù)庫(kù),以便第二數(shù)據(jù)庫(kù)根據(jù)所述業(yè)務(wù)數(shù)據(jù)執(zhí)行數(shù)據(jù)同步變更;在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。通過(guò)本申請(qǐng),可以實(shí)現(xiàn)在異構(gòu)數(shù)據(jù)庫(kù)之間避免死循環(huán)同步。
【專(zhuān)利說(shuō)明】在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法及系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本申請(qǐng)涉及數(shù)據(jù)庫(kù)雙向同步【技術(shù)領(lǐng)域】,特別是涉及在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法及系統(tǒng)。
【背景技術(shù)】
[0002]目前,在一些大型的業(yè)務(wù)處理系統(tǒng)中,為了提高業(yè)務(wù)處理速度,一般需要在多地部署機(jī)房,當(dāng)然,不同機(jī)房的數(shù)據(jù)庫(kù)之間需要保持?jǐn)?shù)據(jù)的同步。例如,某電子商務(wù)交易平臺(tái)的國(guó)際站,主要的業(yè)務(wù)是對(duì)外出口,其業(yè)務(wù)的特性為:賣(mài)家用戶在國(guó)內(nèi),買(mǎi)家用戶在國(guó)外,因此,需要在國(guó)外(例如,美國(guó))部署異地機(jī)房,最終形成了賣(mài)家在國(guó)內(nèi)機(jī)房上發(fā)布商品,通過(guò)數(shù)據(jù)庫(kù)同步技術(shù)同步到美國(guó)機(jī)房,國(guó)外的買(mǎi)家用戶通過(guò)美國(guó)機(jī)房訪問(wèn)商品數(shù)據(jù),并生成相應(yīng)產(chǎn)品訂單,再通過(guò)數(shù)據(jù)庫(kù)同步技術(shù)同步回國(guó)內(nèi)的機(jī)房(例如,設(shè)在杭州),和買(mǎi)家進(jìn)行交互,從而形成一個(gè)數(shù)據(jù)閉環(huán)。
[0003]異地機(jī)房之間需要采用雙向的數(shù)據(jù)同步技術(shù)。例如,在前述例子中,杭州的數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)變更時(shí),需要同步到美國(guó),同樣,美國(guó)的數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)變更時(shí),也要同步到杭州,但是,要避免出現(xiàn)死循環(huán)同步的情況。例如,杭州數(shù)據(jù)庫(kù)同步美國(guó)數(shù)據(jù)庫(kù)的數(shù)據(jù),不能再?gòu)拿绹?guó)數(shù)據(jù)庫(kù)回到杭州數(shù)據(jù)庫(kù),等等。
[0004]現(xiàn)有技術(shù)中,mysql為同為mysql類(lèi)型的數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步時(shí),提供了避免出現(xiàn)死循環(huán)同步的解決方案。也即,mysql為每個(gè)機(jī)房的數(shù)據(jù)庫(kù)設(shè)置一個(gè)serverld,用于標(biāo)識(shí)每條變更數(shù)據(jù)的原始產(chǎn)生于哪個(gè)數(shù)據(jù)庫(kù)。假如存在兩個(gè)mysql數(shù)據(jù)庫(kù),mysql-A和mysql-B,并且分別設(shè)置了 serverld-A和serverld-B。在mysql-A上產(chǎn)生的數(shù)據(jù)變更都會(huì)記錄該serverld-A,同時(shí)在發(fā)送每份數(shù)據(jù)變更記錄的時(shí)候,都會(huì)包含對(duì)應(yīng)的serverld-A。同步到目標(biāo)機(jī)房的mysql-B數(shù)據(jù)庫(kù)時(shí),會(huì)在日志中記錄發(fā)送過(guò)來(lái)變更數(shù)據(jù)對(duì)應(yīng)的serverld-A。mysql-A同步到mysql-B的數(shù)據(jù)變更也會(huì)觸發(fā)變更同步,從mysql-B發(fā)送給mysql-A時(shí),會(huì)帶上對(duì)應(yīng)的serverld-A,到達(dá)mysql-A時(shí),mysql-A發(fā)現(xiàn)數(shù)據(jù)的serverld-A和自己的serverld-A相同,這意味著數(shù)據(jù)的原始產(chǎn)生者為自己,因此忽略這數(shù)據(jù),從而避免產(chǎn)生死循環(huán)同步。
[0005]但是,上述現(xiàn)有技術(shù)只是mysql數(shù)據(jù)庫(kù)內(nèi)部的解決方案,這也就意味著只能在mysql數(shù)據(jù)庫(kù)之間才有效,無(wú)法支持異構(gòu)數(shù)據(jù)庫(kù),也就是說(shuō),如果不同的機(jī)房中使用了不同類(lèi)型的數(shù)據(jù)庫(kù),則上述方案將無(wú)法解決死循環(huán)同步問(wèn)題。例如,假設(shè)某數(shù)據(jù)庫(kù)為mysql-A,另一個(gè)數(shù)據(jù)庫(kù)為oracle-B,此時(shí),如果mysql-A上產(chǎn)生的數(shù)據(jù)變更同步到oracle_B,即使mysql-A的變更數(shù)據(jù)記錄了 serverld-A,也無(wú)法將其寫(xiě)入到oracle-B的變更日志進(jìn)行保留(因?yàn)閙ysql無(wú)法修改oracle的日志),進(jìn)而,當(dāng)同步到oracle-B的數(shù)據(jù)變更再次出發(fā)變更同步之后,oracle-B會(huì)作為普通的數(shù)據(jù)變更操作來(lái)處理,無(wú)法攜帶上serverld-A,因此,mysql-A收到之后,就不會(huì)忽略,而是再進(jìn)行更新,以此又進(jìn)入了死循環(huán)同步。
[0006]因此,迫切需要本領(lǐng)域技術(shù)人員解決的問(wèn)題就在于,在存在非mysql數(shù)據(jù)庫(kù)的情況下,如果避免死循環(huán)同步現(xiàn)象。
【發(fā)明內(nèi)容】
[0007]本申請(qǐng)?zhí)峁┝嗽跀?shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法及系統(tǒng),即使不同的機(jī)房之間存在異構(gòu)的數(shù)據(jù)庫(kù),也仍然可以保證在進(jìn)行雙向數(shù)據(jù)同步的過(guò)程中,避免發(fā)生死循環(huán)的現(xiàn)象,并且可以減少網(wǎng)絡(luò)傳輸量,提高實(shí)現(xiàn)的效率。
[0008]本申請(qǐng)?zhí)峁┝巳缦路桨?
[0009]一種在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法,包括:
[0010]接收到第一數(shù)據(jù)庫(kù)向第二數(shù)據(jù)庫(kù)發(fā)送的同步變更信息時(shí),開(kāi)啟一事務(wù);
[0011]通過(guò)結(jié)構(gòu)化查詢語(yǔ)言SQL規(guī)范,在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)以及所述同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便觸發(fā)第二數(shù)據(jù)庫(kù)在變更日志中記錄下第一數(shù)據(jù)庫(kù)的標(biāo)識(shí);
[0012]將所述事務(wù)提交到所述第二數(shù)據(jù)庫(kù),以便第二數(shù)據(jù)庫(kù)根據(jù)所述業(yè)務(wù)數(shù)據(jù)執(zhí)行數(shù)據(jù)同步變更;
[0013]在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0014]一種在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的系統(tǒng),包括:
[0015]事務(wù)開(kāi)啟單元,用于接收到第一數(shù)據(jù)庫(kù)向第二數(shù)據(jù)庫(kù)發(fā)送的同步變更信息時(shí),開(kāi)啟一事務(wù);
[0016]插入單元,用于通過(guò)結(jié)構(gòu)化查詢語(yǔ)言SQL規(guī)范,在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)以及所述同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便觸發(fā)第二數(shù)據(jù)庫(kù)在變更日志中記錄下第一數(shù)據(jù)庫(kù)的標(biāo)識(shí);
[0017]事務(wù)提交單元,用于將所述事務(wù)提交到所述第二數(shù)據(jù)庫(kù),以便第二數(shù)據(jù)庫(kù)根據(jù)所述業(yè)務(wù)數(shù)據(jù)執(zhí)行數(shù)據(jù)同步變更;
[0018]判斷單元,用于在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0019]根據(jù)本申請(qǐng)?zhí)峁┑木唧w實(shí)施例,本申請(qǐng)公開(kāi)了以下技術(shù)效果:
[0020]通過(guò)本申請(qǐng)實(shí)施例,由于是利用的SQL規(guī)范,向事務(wù)中插入變更同步發(fā)起方數(shù)據(jù)庫(kù)的標(biāo)識(shí),進(jìn)而觸發(fā)目標(biāo)數(shù)據(jù)庫(kù)將發(fā)起方數(shù)據(jù)庫(kù)的標(biāo)識(shí)寫(xiě)入到變更日志中,因此,只要是支持的SQL規(guī)范的數(shù)據(jù)庫(kù),就都可以支持,這樣,即使不同的機(jī)房之間存在異構(gòu)的數(shù)據(jù)庫(kù),也仍然可以保證在進(jìn)行雙向數(shù)據(jù)同步的過(guò)程中,避免發(fā)生死循環(huán)的現(xiàn)象。另外,在第二數(shù)據(jù)庫(kù)發(fā)生了一次數(shù)據(jù)變更時(shí)候,對(duì)于是否為從第一數(shù)據(jù)庫(kù)發(fā)送過(guò)來(lái)的同步變更信息引發(fā)的變更的判斷過(guò)程,是直接在第二數(shù)據(jù)庫(kù)一側(cè)進(jìn)行的,如果發(fā)現(xiàn)是,則可以不再向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。而在傳統(tǒng)的mysql內(nèi)部的數(shù)據(jù)同步方案中,即使第二數(shù)據(jù)庫(kù)是根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息而產(chǎn)生的數(shù)據(jù)變更,也需要再?gòu)牡诙?shù)據(jù)庫(kù)向第一數(shù)據(jù)庫(kù)發(fā)送同步變更消息,在第一數(shù)據(jù)庫(kù)一側(cè)進(jìn)行判斷是否需要忽略。因此,本申請(qǐng)實(shí)施例相對(duì)于現(xiàn)有技術(shù)而言,還可以減少網(wǎng)絡(luò)傳輸量,提高實(shí)現(xiàn)的效率。
[0021]另外,針對(duì)可能出現(xiàn)的不同的數(shù)據(jù)庫(kù)同時(shí)對(duì)同一記錄進(jìn)行修改的情況下導(dǎo)致的數(shù)據(jù)不一致的情況,還提供了相應(yīng)的一致性補(bǔ)救方案。
[0022]當(dāng)然,實(shí)施本申請(qǐng)的任一產(chǎn)品并不一定需要同時(shí)達(dá)到以上所述的所有優(yōu)點(diǎn)。
【專(zhuān)利附圖】
【附圖說(shuō)明】
[0023]為了更清楚地說(shuō)明本申請(qǐng)實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例中所需要使用的附圖作簡(jiǎn)單地介紹,顯而易見(jiàn)地,下面描述中的附圖僅僅是本申請(qǐng)的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來(lái)講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0024]圖1是本申請(qǐng)實(shí)施例提供的方法的流程圖;
[0025]圖2是本申請(qǐng)實(shí)施例提供的標(biāo)識(shí)插入方法的示意圖;
[0026]圖3是本申請(qǐng)實(shí)施例提供的數(shù)據(jù)同步過(guò)程的示意圖;
[0027]圖4是本申請(qǐng)實(shí)施例提供的另一數(shù)據(jù)同步過(guò)程的示意圖;
[0028]圖5是本申請(qǐng)實(shí)施例提供的時(shí)間交集判斷的示意圖;
[0029]圖6是本申請(qǐng)實(shí)施例提供的系統(tǒng)的示意圖。
【具體實(shí)施方式】
[0030]下面將結(jié)合本申請(qǐng)實(shí)施例中的附圖,對(duì)本申請(qǐng)實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本申請(qǐng)一部分實(shí)施例,而不是全部的實(shí)施例?;诒旧暾?qǐng)中的實(shí)施例,本領(lǐng)域普通技術(shù)人員所獲得的所有其他實(shí)施例,都屬于本申請(qǐng)保護(hù)的范圍。
[0031]在本申請(qǐng)實(shí)施例中,并不是對(duì)某一種具體類(lèi)型的數(shù)據(jù)庫(kù)內(nèi)部代碼進(jìn)行改進(jìn),而是在使用各種類(lèi)型的數(shù)據(jù)庫(kù)來(lái)部署異地機(jī)房的過(guò)程中,開(kāi)發(fā)了一套同步管理系統(tǒng)。這種同步管理系統(tǒng)使用的SQL (Structured Query Language,結(jié)構(gòu)化查詢)規(guī)范對(duì)各種數(shù)據(jù)庫(kù)進(jìn)行操作,因此,只要是支持SQL規(guī)范的數(shù)據(jù)庫(kù),就可以使用本申請(qǐng)實(shí)施例中的同步管理系統(tǒng)進(jìn)行數(shù)據(jù)庫(kù)間的雙向同步,例如,可以是mysql數(shù)據(jù)庫(kù),也可以是oracle數(shù)據(jù)庫(kù),還可以是兩種類(lèi)型的數(shù)據(jù)庫(kù)組成的異構(gòu)數(shù)據(jù)庫(kù),等等。下面從該同步管理系統(tǒng)的角度出發(fā),對(duì)本申請(qǐng)實(shí)施例提供的數(shù)據(jù)同步方法進(jìn)行詳細(xì)地介紹。
[0032]參見(jiàn)圖1,本申請(qǐng)實(shí)施例首先提供了一種數(shù)據(jù)同步方法,該方法各步驟的執(zhí)行主體即為前述同步管理系統(tǒng),該方法可以包括以下步驟:
[0033]SlOl:接收到第一數(shù)據(jù)庫(kù)向第二數(shù)據(jù)庫(kù)發(fā)送的同步變更信息時(shí),開(kāi)啟一事務(wù);
[0034]在各個(gè)機(jī)房中可以部署本申請(qǐng)實(shí)施例的同步管理系統(tǒng),這樣,關(guān)于各個(gè)數(shù)據(jù)庫(kù)之間的同步處理,就可以由該同步管理系統(tǒng)來(lái)處理。當(dāng)然,在一次數(shù)據(jù)同步的過(guò)程中,會(huì)有其中一個(gè)數(shù)據(jù)庫(kù)是最初發(fā)生數(shù)據(jù)變更的來(lái)源數(shù)據(jù)庫(kù),其他數(shù)據(jù)庫(kù)則是需要進(jìn)行同步變更的目標(biāo)數(shù)據(jù)庫(kù)。對(duì)于同步管理系統(tǒng)而言,在來(lái)源數(shù)據(jù)庫(kù)中以及在目標(biāo)數(shù)據(jù)庫(kù)中需要進(jìn)行的處理會(huì)有所不同。例如,假設(shè)某地的機(jī)房中,業(yè)務(wù)系統(tǒng)通過(guò)操作第一數(shù)據(jù)庫(kù),產(chǎn)生一些業(yè)務(wù)數(shù)據(jù),如,用戶發(fā)布一個(gè)產(chǎn)品數(shù)據(jù)、提交一個(gè)訂單等等,此時(shí),這些數(shù)據(jù)會(huì)被記錄在第一數(shù)據(jù)庫(kù)的變更日志中,因此,本申請(qǐng)實(shí)施例的同步管理系統(tǒng)就可以通過(guò)第一數(shù)據(jù)庫(kù)的日志協(xié)議,從變更日志中獲取到發(fā)生變更的業(yè)務(wù)數(shù)據(jù),例如,可能獲取到數(shù)據(jù)庫(kù)的DML/DDL事件等。進(jìn)而,就可以生成一條同步變更信息,并通過(guò)某種機(jī)制,將第一數(shù)據(jù)庫(kù)中獲取到的變更信息,向目標(biāo)數(shù)據(jù)庫(kù)發(fā)送。假設(shè)第二數(shù)據(jù)庫(kù)就是該目標(biāo)數(shù)據(jù)庫(kù)(當(dāng)然目標(biāo)數(shù)據(jù)庫(kù)可能有多個(gè))其中之一,則第二數(shù)據(jù)庫(kù)就可以接收到第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息。此時(shí),在第二數(shù)據(jù)庫(kù)執(zhí)行具體的數(shù)據(jù)變更的同時(shí),該同步管理系統(tǒng)可以首先進(jìn)行一些處理,來(lái)避免同步變更進(jìn)入死循環(huán)狀態(tài)。具體的,就可以首先開(kāi)啟一個(gè)事務(wù),然后在該事務(wù)中進(jìn)行一些處理,再提交到第二數(shù)據(jù)庫(kù)執(zhí)行具體的數(shù)據(jù)變更。需要說(shuō)明的是,本申請(qǐng)實(shí)施例中所謂的事務(wù),就是指數(shù)據(jù)庫(kù)事務(wù)(Database Transact1n),也就是作為單個(gè)邏輯工作單元執(zhí)行的一系列操作。事務(wù)處理可以確保除非事務(wù)性單元內(nèi)的所有操作都成功完成,否則不會(huì)永久更新面向數(shù)據(jù)的資源。通過(guò)將一組相關(guān)操作組合為一個(gè)要么全部成功要么全部失敗的單元,可以簡(jiǎn)化錯(cuò)誤恢復(fù)并使應(yīng)用程序更加可靠。下面通過(guò)步驟S102對(duì)本申請(qǐng)實(shí)施例對(duì)事務(wù)的處理進(jìn)行介紹。
[0035]S102:通過(guò)結(jié)構(gòu)化查詢語(yǔ)言SQL規(guī)范,在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)以及所述同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便觸發(fā)第二數(shù)據(jù)庫(kù)在變更日志中記錄下第一數(shù)據(jù)庫(kù)的標(biāo)識(shí);
[0036]在開(kāi)啟一個(gè)事務(wù)之后,首先可以在事務(wù)中插入一個(gè)預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)。也就是說(shuō),在同步管理系統(tǒng)中,可以預(yù)先為各個(gè)數(shù)據(jù)庫(kù)定義一個(gè)標(biāo)識(shí),例如可以是channel_id,每個(gè)數(shù)據(jù)庫(kù)在系統(tǒng)內(nèi)對(duì)應(yīng)一個(gè)唯一的channel_id。當(dāng)某個(gè)數(shù)據(jù)庫(kù)發(fā)起變更同步時(shí),在目標(biāo)數(shù)據(jù)庫(kù)側(cè),則會(huì)首先開(kāi)啟一個(gè)事務(wù),然后在事務(wù)中插入該變更同步發(fā)起方的channel_id。之后,還可以將同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),插入到事務(wù)中。
[0037]這里需要說(shuō)明的是,在本申請(qǐng)實(shí)施例中,通過(guò)向事務(wù)中插入channel_id的方式,可以觸發(fā)第二數(shù)據(jù)庫(kù)記錄變更日志,也即,可以將變更同步發(fā)起方的channel_id通過(guò)產(chǎn)生數(shù)據(jù)庫(kù)變更的方式,記錄到目標(biāo)數(shù)據(jù)庫(kù)的變更日志中。而向事務(wù)中插入channel_id的過(guò)程,可以按照SQL規(guī)范來(lái)進(jìn)行,因此,只要目標(biāo)數(shù)據(jù)庫(kù)符合SQL規(guī)范,就均可以通過(guò)這種方式,將來(lái)源數(shù)據(jù)庫(kù)的channel_id寫(xiě)入到變更日志中。
[0038]在插入了來(lái)源數(shù)據(jù)庫(kù)的channel_id之后,還需要在事務(wù)中插入同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便第二數(shù)據(jù)庫(kù)據(jù)此對(duì)具體的記錄進(jìn)行修改。當(dāng)然,在插入了業(yè)務(wù)數(shù)據(jù)之后,還可以執(zhí)行清理之前插入的channel_id標(biāo)識(shí)的操作,以保證下次再進(jìn)行變更同步時(shí),不會(huì)受到影響。
[0039]例如,參見(jiàn)圖2,假設(shè)其代表數(shù)據(jù)庫(kù)的一個(gè)事務(wù),則在事務(wù)的開(kāi)頭可以插入第一數(shù)據(jù)庫(kù)的channel_id標(biāo)識(shí),接著,在插入了具體的業(yè)務(wù)數(shù)據(jù)之后,再將插入的channel_id標(biāo)識(shí)清理掉,以代表此次變更結(jié)束。換言之,由于數(shù)據(jù)庫(kù)是當(dāng)數(shù)據(jù)庫(kù)中的某條記錄發(fā)生變化時(shí),才會(huì)記錄變更日志,因此,本申請(qǐng)實(shí)施例中就是通過(guò)update語(yǔ)句將數(shù)據(jù)庫(kù)中某條記錄的值改為channel_id,這樣數(shù)據(jù)庫(kù)就會(huì)將channel_id這一信息記錄在變更日志中,之后,為了避免對(duì)后續(xù)的同步變更過(guò)程造成影響,可以將之前更新過(guò)的值重新改回默認(rèn)值。
[0040]S103:將所述事務(wù)提交到所述第二數(shù)據(jù)庫(kù),以便第二數(shù)據(jù)庫(kù)根據(jù)所述業(yè)務(wù)數(shù)據(jù)執(zhí)行數(shù)據(jù)同步變更;
[0041]在事務(wù)中插入了來(lái)源數(shù)據(jù)庫(kù)的channel_id標(biāo)識(shí)以及具體的業(yè)務(wù)數(shù)據(jù)之后,就可以將事務(wù)提交到第二數(shù)據(jù)庫(kù),這樣,第二數(shù)據(jù)庫(kù)就可以執(zhí)行具體的數(shù)據(jù)更新操作,使得其具體的數(shù)據(jù)條目與來(lái)源數(shù)據(jù)庫(kù)中變更后的狀態(tài)一致。也就是說(shuō),在第二數(shù)據(jù)庫(kù)上進(jìn)行事務(wù)提交操作,然后第二數(shù)據(jù)庫(kù)會(huì)在事務(wù)提交之后確保能將事務(wù)對(duì)應(yīng)的變更操作記錄到變更日志中。其中,由于第一數(shù)據(jù)庫(kù)的channel_id標(biāo)識(shí)也是通過(guò)的SQL規(guī)范進(jìn)行數(shù)據(jù)庫(kù)變更操作,所以也可以和其他的業(yè)務(wù)變更一起,記錄到第二數(shù)據(jù)庫(kù)的變更日志中。
[0042]S104:在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0043]對(duì)于第二數(shù)據(jù)庫(kù)而言,在根據(jù)第一數(shù)據(jù)庫(kù)中的同步變更信息完成數(shù)據(jù)的變更之后,由于其具體的數(shù)據(jù)條目也發(fā)生了變化,因此,也相當(dāng)于產(chǎn)生了一條變更數(shù)據(jù),在其變更日志中也會(huì)出現(xiàn)具體的變更信息,原則上講,也需要向其他數(shù)據(jù)庫(kù)進(jìn)行同步。但此時(shí),同步管理系統(tǒng)在獲取到這種變更信息的同時(shí),還可以從第二數(shù)據(jù)庫(kù)的變更日志中讀取出之前記錄的來(lái)源數(shù)據(jù)庫(kù)的channel_id標(biāo)識(shí),發(fā)現(xiàn)該channel_id是第一數(shù)據(jù)庫(kù)的標(biāo)識(shí),因此,對(duì)于第一數(shù)據(jù)庫(kù)而言,該條變更數(shù)據(jù)就可以忽略,也就是說(shuō),相當(dāng)于第二數(shù)據(jù)庫(kù)識(shí)別出該條變更數(shù)據(jù)是根據(jù)來(lái)源于第一數(shù)據(jù)庫(kù)的同步變更信息產(chǎn)生的變化,因此,就可以不再向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。當(dāng)然,如果第二數(shù)據(jù)庫(kù)還需要向第一數(shù)據(jù)庫(kù)以外的其他數(shù)據(jù)庫(kù)進(jìn)行同步變更,而這些其他數(shù)據(jù)庫(kù)的標(biāo)識(shí)并沒(méi)有出現(xiàn)在第二數(shù)據(jù)庫(kù)的變更日志中,因此,仍然可以向這種其他數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0044]為了更好地理解本申請(qǐng)實(shí)施例提供的具體方法,下面通過(guò)一個(gè)具體的例子進(jìn)行詳細(xì)地介紹。
[0045]參見(jiàn)圖3,具體的數(shù)據(jù)同步過(guò)程可以包括:
[0046]S301:數(shù)據(jù)庫(kù)A的業(yè)務(wù)系統(tǒng)通過(guò)操作數(shù)據(jù)庫(kù),產(chǎn)生了一些業(yè)務(wù)數(shù)據(jù),例如用戶發(fā)布一個(gè)產(chǎn)品數(shù)據(jù)等;
[0047]S302:同步管理系統(tǒng)通過(guò)mysql/oracle的日志協(xié)議,獲取對(duì)應(yīng)的數(shù)據(jù)變更信息,例如,DML/DDL事件;
[0048]S303:通過(guò)某種機(jī)制,將數(shù)據(jù)庫(kù)A中獲取到的變更信息,發(fā)送到數(shù)據(jù)庫(kù)B上,通過(guò)SQL規(guī)范,將數(shù)據(jù)載入到數(shù)據(jù)庫(kù)B中,載入過(guò)程可以包括:
[0049]S3031:開(kāi)啟一個(gè)事務(wù) Txa ;
[0050]S3032:向事務(wù)中插入數(shù)據(jù)庫(kù)A的channel_id標(biāo)識(shí);
[0051]S3033:向事務(wù)中插入業(yè)務(wù)數(shù)據(jù);
[0052]S3034:清理掉數(shù)據(jù)庫(kù)A的channel_id標(biāo)識(shí);
[0053]S3035:將事務(wù)Txa提交到數(shù)據(jù)庫(kù)B ;
[0054]S304:數(shù)據(jù)庫(kù)B根據(jù)提交上來(lái)的事務(wù)執(zhí)行完數(shù)據(jù)同步之后,在數(shù)據(jù)庫(kù)B中也會(huì)產(chǎn)生關(guān)于這次變更的數(shù)據(jù)信息;
[0055]S3041:獲取數(shù)據(jù)庫(kù)B的變更日志中記錄的channel_id標(biāo)識(shí);
[0056]S3042:在向數(shù)據(jù)庫(kù)A發(fā)生同步變更信息之前,首先檢查變更日志中記錄的channel_id標(biāo)識(shí)與同步管理系統(tǒng)為數(shù)據(jù)庫(kù)A定義的channel_id是否相同,如果是,則這條新產(chǎn)生的變更數(shù)據(jù)屬于回環(huán)數(shù)據(jù),因此,對(duì)于數(shù)據(jù)庫(kù)A而言,忽略這條變更數(shù)據(jù),不再向數(shù)據(jù)庫(kù)A發(fā)送,從而避免發(fā)生死循環(huán)。
[0057]可見(jiàn),在本申請(qǐng)實(shí)施例中,由于是利用SQL規(guī)范,向事務(wù)中插入變更同步發(fā)起方數(shù)據(jù)庫(kù)的標(biāo)識(shí),進(jìn)而觸發(fā)目標(biāo)數(shù)據(jù)庫(kù)將發(fā)起方數(shù)據(jù)庫(kù)的標(biāo)識(shí)寫(xiě)入到變更日志中,因此,只要是支持SQL規(guī)范的數(shù)據(jù)庫(kù),就都可以支持,這樣,即使不同的機(jī)房之間存在異構(gòu)的數(shù)據(jù)庫(kù),也仍然可以保證在進(jìn)行雙向數(shù)據(jù)同步的過(guò)程中,避免發(fā)生死循環(huán)的現(xiàn)象。另外,在第二數(shù)據(jù)庫(kù)發(fā)生了一次數(shù)據(jù)變更時(shí)候,對(duì)于是否為從第一數(shù)據(jù)庫(kù)發(fā)送過(guò)來(lái)的同步變更信息引發(fā)的變更的判斷過(guò)程,是直接在第二數(shù)據(jù)庫(kù)一側(cè)進(jìn)行的,如果發(fā)現(xiàn)是,則可以不再向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。而在傳統(tǒng)的mysql內(nèi)部的數(shù)據(jù)同步方案中,即使第二數(shù)據(jù)庫(kù)是根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息而產(chǎn)生的數(shù)據(jù)變更,也需要再?gòu)牡诙?shù)據(jù)庫(kù)向第一數(shù)據(jù)庫(kù)發(fā)送同步變更消息,在第一數(shù)據(jù)庫(kù)一側(cè)進(jìn)行判斷是否需要忽略。因此,本申請(qǐng)實(shí)施例相對(duì)于現(xiàn)有技術(shù)而言,還可以減少網(wǎng)絡(luò)傳輸量,提高實(shí)現(xiàn)的效率。
[0058]以上所述的數(shù)據(jù)同步方法可以防止在雙向同步的過(guò)程中發(fā)生死循環(huán),而在實(shí)際應(yīng)用中,還可能存在以下現(xiàn)象:對(duì)于第一數(shù)據(jù)庫(kù)和第二數(shù)據(jù)庫(kù)而言,可能存在同時(shí)時(shí)間修改同一記錄的情況,其中,所謂的“同一記錄”可以具體到某張數(shù)據(jù)庫(kù)表上的一條記錄的一個(gè)字段,所謂的“同時(shí)”是指:第一數(shù)據(jù)庫(kù)的數(shù)據(jù)發(fā)生了更新,在第二數(shù)據(jù)庫(kù)中還尚未可見(jiàn)的時(shí)間范圍內(nèi),第二數(shù)據(jù)中的該數(shù)據(jù)也發(fā)生了更新。例如,在tl時(shí)刻,數(shù)據(jù)庫(kù)A的某條記錄中某字段的取值由LI變?yōu)長(zhǎng)2,隨后數(shù)據(jù)庫(kù)A中的同步管理系統(tǒng)就可以向數(shù)據(jù)庫(kù)B發(fā)送同步變更信息,通知數(shù)據(jù)庫(kù)B將對(duì)應(yīng)字段的值由LI變?yōu)長(zhǎng)2 ;但在數(shù)據(jù)庫(kù)B尚未變更完成時(shí),在t2時(shí)亥IJ,數(shù)據(jù)庫(kù)B中的該條記錄中同樣是該字段的值由LI變?yōu)長(zhǎng)3 (例如,可以是由于數(shù)據(jù)庫(kù)B的業(yè)務(wù)系統(tǒng)中用戶操作而引發(fā)的數(shù)據(jù)變化),此時(shí),數(shù)據(jù)庫(kù)B中的同步管理系統(tǒng)也會(huì)向數(shù)據(jù)庫(kù)A發(fā)送同步變更信息,要求數(shù)據(jù)庫(kù)A將對(duì)應(yīng)字段的值由LI修改為L(zhǎng)3 ;結(jié)果,在t3時(shí)刻,數(shù)據(jù)庫(kù)B中對(duì)應(yīng)字段的值變?yōu)長(zhǎng)2,而數(shù)據(jù)庫(kù)A中該字段的值卻變?yōu)長(zhǎng)3,使得兩個(gè)數(shù)據(jù)庫(kù)中同一記錄上的取值不一致。但實(shí)際上,在出現(xiàn)這種不同的數(shù)據(jù)庫(kù)同時(shí)對(duì)同一記錄發(fā)生修改的情況時(shí),應(yīng)該是以其中一個(gè)數(shù)據(jù)庫(kù)中的值為準(zhǔn),并保證兩個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)的一致性,否貝U,不同地域的用戶看到的具體頁(yè)面內(nèi)容可能會(huì)不一致。
[0059]為了解決數(shù)據(jù)的一致性問(wèn)題,在本申請(qǐng)實(shí)施例中,可以預(yù)先根據(jù)業(yè)務(wù)特點(diǎn)的需要,指定一個(gè)主站點(diǎn),在步驟S104中,在第二數(shù)據(jù)庫(kù)同步變更完成,并且檢查發(fā)現(xiàn)變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)相同后,還可以繼續(xù)判斷第二數(shù)據(jù)庫(kù)是否為主站點(diǎn)的數(shù)據(jù)庫(kù),如果不是,則略過(guò)這條數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。而如果是,則可以開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0060]為了更好地理解上述一致性補(bǔ)救方案,下面通過(guò)一個(gè)具體的例子進(jìn)行詳細(xì)介紹。
[0061]參見(jiàn)圖4,假設(shè)主站點(diǎn)的數(shù)據(jù)庫(kù)為數(shù)據(jù)庫(kù)A,則在完成一次從數(shù)據(jù)庫(kù)B到數(shù)據(jù)庫(kù)A的同步之后,數(shù)據(jù)庫(kù)A可以再向數(shù)據(jù)庫(kù)B繼續(xù)執(zhí)行一次同步。具體的步驟包括:
[0062]S401:業(yè)務(wù)系統(tǒng)在數(shù)據(jù)庫(kù)A中產(chǎn)生一些業(yè)務(wù)數(shù)據(jù);假設(shè)由LI變?yōu)長(zhǎng)2 ;
[0063]S402:業(yè)務(wù)系統(tǒng)在數(shù)據(jù)庫(kù)B中產(chǎn)生一些業(yè)務(wù)數(shù)據(jù);假設(shè)由LI變?yōu)長(zhǎng)3 ;
[0064]S403:通過(guò)mysql/oracle的日志協(xié)議,獲取數(shù)據(jù)庫(kù)A的業(yè)務(wù)數(shù)據(jù),生成同步變更信息;
[0065]S404:通過(guò)mysql/oracle的日志協(xié)議,獲取數(shù)據(jù)庫(kù)B的業(yè)務(wù)數(shù)據(jù),生成同步變更信息;
[0066]接下來(lái),對(duì)于數(shù)據(jù)庫(kù)B而言:
[0067]S405:通過(guò)某種機(jī)制,將數(shù)據(jù)庫(kù)A中獲取到的同步變更信息,發(fā)送到數(shù)據(jù)庫(kù)B上,通過(guò)SQL規(guī)范,將數(shù)據(jù)載入到數(shù)據(jù)庫(kù)B中,載入過(guò)程可以包括:
[0068]S4051:開(kāi)啟一個(gè)事務(wù) Txa ;
[0069]S4052:向事務(wù)中插入數(shù)據(jù)庫(kù)A的channel_id標(biāo)識(shí);
[0070]S4053:向事務(wù)中插入業(yè)務(wù)數(shù)據(jù);
[0071]S4054:清理掉數(shù)據(jù)庫(kù)A的channel_id標(biāo)識(shí);
[0072]S4055:將事務(wù)Txa提交到數(shù)據(jù)庫(kù)B ;
[0073]S406:數(shù)據(jù)庫(kù)B根據(jù)提交上來(lái)的事務(wù)執(zhí)行完數(shù)據(jù)同步之后,使得對(duì)應(yīng)字段的數(shù)據(jù)變?yōu)長(zhǎng)2,同時(shí),在數(shù)據(jù)庫(kù)B中也會(huì)產(chǎn)生關(guān)于這次變更的數(shù)據(jù)信息;
[0074]S4061:獲取數(shù)據(jù)庫(kù)B的變更日志中記錄的channel_id標(biāo)識(shí);
[0075]S4062:在向數(shù)據(jù)庫(kù)A發(fā)送同步變更信息之前,首先檢查變更日志中記錄的channel_id標(biāo)識(shí)與同步管理系統(tǒng)為數(shù)據(jù)庫(kù)A定義的channel_id是否相同,如果是,則對(duì)于數(shù)據(jù)庫(kù)A而言,忽略這條同步變更信息,不再向數(shù)據(jù)庫(kù)A發(fā)送,從而避免發(fā)生死循環(huán)。
[0076]可見(jiàn),對(duì)于數(shù)據(jù)庫(kù)B而言,與圖3中所示的過(guò)程基本相同,仍然是按照前文所提供的避免產(chǎn)生死循環(huán)的算法進(jìn)行數(shù)據(jù)同步。
[0077]但對(duì)于數(shù)據(jù)庫(kù)A,由于其所在的站點(diǎn)為主站點(diǎn),因此,處理的過(guò)程會(huì)有所不同:
[0078]S407:通過(guò)某種機(jī)制,將數(shù)據(jù)庫(kù)B中獲取到的同步變更信息,發(fā)送到數(shù)據(jù)庫(kù)A上,通過(guò)SQL規(guī)范,將數(shù)據(jù)載入到數(shù)據(jù)庫(kù)A中,載入過(guò)程可以包括:
[0079]S4071:開(kāi)啟一個(gè)事務(wù) Txa ;
[0080]S4072:向事務(wù)中插入數(shù)據(jù)庫(kù)B的channel_id標(biāo)識(shí);
[0081]S4073:向事務(wù)中插入業(yè)務(wù)數(shù)據(jù);
[0082]S4074:清理掉數(shù)據(jù)庫(kù)B的channel_id標(biāo)識(shí);
[0083]S4075:將事務(wù)Txa提交到數(shù)據(jù)庫(kù)A ;
[0084]S408:數(shù)據(jù)庫(kù)A根據(jù)提交上來(lái)的事務(wù)執(zhí)行完數(shù)據(jù)同步之后,使得對(duì)應(yīng)字段上的數(shù)據(jù)變?yōu)長(zhǎng)3,同時(shí),在數(shù)據(jù)庫(kù)A中也會(huì)產(chǎn)生關(guān)于這次變更的數(shù)據(jù)信息;
[0085]S4081:獲取數(shù)據(jù)庫(kù)A的變更日志中記錄的channel_id標(biāo)識(shí);
[0086]S4082:在向數(shù)據(jù)庫(kù)B發(fā)送同步變更信息之前,首先檢查變更日志中記錄的channel_id標(biāo)識(shí)與同步管理系統(tǒng)為數(shù)據(jù)庫(kù)A定義的channel_id是否相同,即使相同,也開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案;
[0087]S409:構(gòu)造變更事件,根據(jù)變更數(shù)據(jù),反查數(shù)據(jù)庫(kù)A獲取當(dāng)前數(shù)據(jù)庫(kù)A中最新的值,重新將這批數(shù)據(jù)發(fā)送到數(shù)據(jù)庫(kù)B中。也即重新向數(shù)據(jù)庫(kù)B發(fā)送同步變更信息,攜帶上變更后的數(shù)據(jù)L3 ;
[0088]S410:數(shù)據(jù)庫(kù)B側(cè),同樣通過(guò)SQL規(guī)范,將數(shù)據(jù)載入到數(shù)據(jù)庫(kù)B中,載入過(guò)程可以包括:
[0089]S4101:開(kāi)啟一個(gè)事務(wù) Txa ;
[0090]S4102:向事務(wù)中插入數(shù)據(jù)庫(kù)A的channel_id標(biāo)識(shí);
[0091]S4103:向事務(wù)中插入業(yè)務(wù)數(shù)據(jù);
[0092]S4104:清理掉數(shù)據(jù)庫(kù)A的channel_id標(biāo)識(shí);
[0093]S4105:將事務(wù)Txa提交到數(shù)據(jù)庫(kù)B ;
[0094]S411:數(shù)據(jù)庫(kù)B根據(jù)提交上來(lái)的事務(wù)執(zhí)行完數(shù)據(jù)同步之后,使得對(duì)應(yīng)字段的數(shù)據(jù)變?yōu)長(zhǎng)3,同時(shí),在數(shù)據(jù)庫(kù)B中也會(huì)產(chǎn)生關(guān)于這次變更的數(shù)據(jù)信息;
[0095]S4111:獲取數(shù)據(jù)庫(kù)B的變更日志中記錄的channel_id標(biāo)識(shí);
[0096]S4112:在向數(shù)據(jù)庫(kù)A發(fā)送同步變更信息之前,首先檢查變更日志中記錄的channel_id標(biāo)識(shí)與同步管理系統(tǒng)為數(shù)據(jù)庫(kù)A定義的channel_id是否相同,如果是,則對(duì)于數(shù)據(jù)庫(kù)A而言,忽略這條同步變更信息,不再向數(shù)據(jù)庫(kù)A發(fā)送。
[0097]至此,整個(gè)同步過(guò)程結(jié)束,最終使得數(shù)據(jù)庫(kù)A以及數(shù)據(jù)庫(kù)B中對(duì)應(yīng)字段上的數(shù)值都變?yōu)長(zhǎng)3,并且不會(huì)使得同步過(guò)程進(jìn)入死循環(huán)。
[0098]也就是說(shuō),在上述實(shí)現(xiàn)過(guò)程中,主站點(diǎn)的數(shù)據(jù)庫(kù),在完成一次數(shù)據(jù)更新之后,即使發(fā)現(xiàn)此次更新來(lái)自于另一數(shù)據(jù)庫(kù)同步過(guò)來(lái)的信息,也會(huì)重新向來(lái)源數(shù)據(jù)庫(kù)發(fā)送同步變更信息,以保證兩個(gè)數(shù)據(jù)庫(kù)中數(shù)據(jù)的一致性。當(dāng)然,作為非主站點(diǎn)的數(shù)據(jù)庫(kù)一側(cè),在發(fā)現(xiàn)一次更新是來(lái)自于另一數(shù)據(jù)庫(kù)同步過(guò)來(lái)的信息之后,就不會(huì)再向來(lái)源數(shù)據(jù)庫(kù)發(fā)送同步變更信息,以避免進(jìn)入死循環(huán)。
[0099]需要說(shuō)明的是,關(guān)于如何設(shè)置主站點(diǎn),可以是根據(jù)系統(tǒng)中的具體業(yè)務(wù)需求或者特點(diǎn)來(lái)確定。例如,假設(shè)某系統(tǒng)中包括杭州和美國(guó)兩個(gè)站點(diǎn),其中,賣(mài)家用戶一般是在杭州的機(jī)房發(fā)布商品對(duì)象信息,而美國(guó)的用戶一般是訪問(wèn)商品對(duì)象數(shù)據(jù),并生成相應(yīng)訂單,等等。此時(shí),如果發(fā)生變化的數(shù)據(jù)屬于商品對(duì)象信息,例如,用戶發(fā)布一個(gè)產(chǎn)品數(shù)據(jù),則可以將杭州機(jī)房作為主站點(diǎn),如果發(fā)生變化的數(shù)據(jù)屬于訂單數(shù)據(jù),例如,用戶生成某訂單,則可以將美國(guó)機(jī)房作為主站點(diǎn),等等。
[0100]另外需要說(shuō)明的是,在前述例子中,相當(dāng)于只要是主站點(diǎn)的數(shù)據(jù)庫(kù),就一定會(huì)執(zhí)行一致性補(bǔ)救方案,但在實(shí)際應(yīng)用中,如果在發(fā)生了從非主站點(diǎn)數(shù)據(jù)庫(kù)到主站點(diǎn)數(shù)據(jù)庫(kù)的同步更新的過(guò)程中,主站點(diǎn)數(shù)據(jù)庫(kù)并沒(méi)有就相同的記錄發(fā)生其他的變化,則其實(shí)是不必要進(jìn)行補(bǔ)救的,因?yàn)椴](méi)有發(fā)生兩個(gè)數(shù)據(jù)庫(kù)中的數(shù)據(jù)不一致的情況。因此,在具體實(shí)現(xiàn)時(shí),在圖4的步驟S4082中,還可以包括一個(gè)判斷的步驟,也即判斷在根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息進(jìn)行此次同步變更的過(guò)程中,第二數(shù)據(jù)庫(kù)中是否對(duì)同一記錄也產(chǎn)生了變更(例如,是否在數(shù)據(jù)庫(kù)A根據(jù)數(shù)據(jù)庫(kù)B發(fā)送的同步變更信息將LI變?yōu)長(zhǎng)3的過(guò)程中,數(shù)據(jù)庫(kù)A的業(yè)務(wù)系統(tǒng)將LI變?yōu)長(zhǎng)2,等等),如果是,再開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息,也即,使得數(shù)據(jù)庫(kù)B重新將取值修改為L(zhǎng)2,保證兩個(gè)數(shù)據(jù)庫(kù)中同一字段數(shù)據(jù)的一致性。這樣可以避免產(chǎn)生不必要的網(wǎng)絡(luò)傳輸量,提高系統(tǒng)性能。
[0101]其中,具體實(shí)現(xiàn)時(shí),為了能夠判斷出是否存在不同的數(shù)據(jù)庫(kù)同時(shí)對(duì)同一記錄發(fā)生變更,可以記錄各個(gè)數(shù)據(jù)庫(kù)發(fā)起的各次數(shù)據(jù)同步過(guò)程中,來(lái)源數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)變更的數(shù)據(jù)變更時(shí)間,以及目標(biāo)數(shù)據(jù)庫(kù)中完成數(shù)據(jù)同步變更的數(shù)據(jù)同步時(shí)間,然后,判斷第一數(shù)據(jù)庫(kù)的此次同步變更過(guò)程的數(shù)據(jù)變更時(shí)間與數(shù)據(jù)同步時(shí)間構(gòu)成的時(shí)段,與第二數(shù)據(jù)庫(kù)中發(fā)起的同步變更過(guò)程的數(shù)據(jù)變更時(shí)間與數(shù)據(jù)同步時(shí)間構(gòu)成的時(shí)段是否存在交集,如果存在交集,且是針對(duì)同一記錄發(fā)生的變更,則判定在根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息進(jìn)行此次同步變更的過(guò)程中,第二數(shù)據(jù)庫(kù)中對(duì)同一記錄也產(chǎn)生了變更。也就是說(shuō),為了完成上述判斷,可以定義兩個(gè)時(shí)間概念,參見(jiàn)圖5:
[0102]數(shù)據(jù)變更時(shí)間S:代表業(yè)務(wù)數(shù)據(jù)在原數(shù)據(jù)庫(kù)中產(chǎn)生的時(shí)間,即圖中的時(shí)間S ;
[0103]數(shù)據(jù)同步時(shí)間E:代表數(shù)據(jù)變更載入到目標(biāo)數(shù)據(jù)庫(kù)的時(shí)間,即圖中的時(shí)間E。
[0104]針對(duì)每條或者一批數(shù)據(jù),記錄變更時(shí)間S和同步時(shí)間E,同時(shí)保留歷史同步過(guò)的數(shù)據(jù)記錄。圖5中縱軸為時(shí)間軸,Aas代表從數(shù)據(jù)庫(kù)A同步到數(shù)據(jù)庫(kù)B的一個(gè)同步過(guò)程的變更時(shí)間,AaE代表從數(shù)據(jù)庫(kù)A同步到數(shù)據(jù)庫(kù)B的一個(gè)同步過(guò)程的同步時(shí)間;BaS代表從數(shù)據(jù)庫(kù)B到同步到的數(shù)據(jù)庫(kù)A的一個(gè)同步過(guò)程的變更時(shí)間,BaE代表從數(shù)據(jù)庫(kù)B同步到數(shù)據(jù)庫(kù)A的一個(gè)同步過(guò)程的同步時(shí)間,以此類(lèi)推。可見(jiàn),每個(gè)同步過(guò)程在縱軸上會(huì)有兩個(gè)點(diǎn),分別代表變更時(shí)間A和同步時(shí)間B。首先,根據(jù)同一時(shí)間的定義,在兩邊數(shù)據(jù)庫(kù)的各自同步過(guò)程中,以數(shù)據(jù)庫(kù)A為例,在向數(shù)據(jù)庫(kù)B同步變更的過(guò)程中,找到與(AaS,AaE)這一時(shí)間段有交集的同步過(guò)程,比如,在圖5中,與(AaS,AaE)有交集的就包括(BaS,BaE)、(Bbs,BbE)、(BcS,BcE)。針對(duì)有時(shí)間交集的同步過(guò)程,根據(jù)同一數(shù)據(jù)的定義,判斷是否存在針對(duì)同一記錄進(jìn)行操作的同步過(guò)程。比如,首先判斷(AaS,AaE)和(BaS,BaE)這兩個(gè)同步過(guò)程對(duì)應(yīng)的歷史同步數(shù)據(jù)記錄是否相同,例如是否都是對(duì)某數(shù)據(jù)庫(kù)表中的同一條記錄的同一字段進(jìn)行的操作,如果是,則這兩個(gè)同步過(guò)程確定為針對(duì)同一記錄同時(shí)產(chǎn)生的數(shù)據(jù)同步。之后,還可以判斷(AaS,AaE)和(Bbs,BbE)這兩個(gè)同步過(guò)程對(duì)應(yīng)的歷史同步數(shù)據(jù)記錄是否相同,依次類(lèi)推。最終可以確定出需要按照一致性補(bǔ)救算法重新進(jìn)行同步的數(shù)據(jù)。
[0105]與本申請(qǐng)實(shí)施例提供的在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法相對(duì)應(yīng),本申請(qǐng)實(shí)施例還提供了一種在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的系統(tǒng),參見(jiàn)圖6,該系統(tǒng)可以包括:
[0106]事務(wù)開(kāi)啟單元601,用于接收到第一數(shù)據(jù)庫(kù)向第二數(shù)據(jù)庫(kù)發(fā)送的同步變更信息時(shí),開(kāi)啟一事務(wù);
[0107]插入單元602,用于通過(guò)結(jié)構(gòu)化查詢語(yǔ)言SQL規(guī)范,在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)以及所述同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便觸發(fā)第二數(shù)據(jù)庫(kù)在變更日志中記錄下第一數(shù)據(jù)庫(kù)的標(biāo)識(shí);
[0108]事務(wù)提交單元603,用于將所述事務(wù)提交到所述第二數(shù)據(jù)庫(kù),以便第二數(shù)據(jù)庫(kù)根據(jù)所述業(yè)務(wù)數(shù)據(jù)執(zhí)行數(shù)據(jù)同步變更;
[0109]判斷單元604,用于在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0110]其中,可以在事務(wù)的開(kāi)頭,通過(guò)SQL規(guī)范,插入所述預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí),以便將所述預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)通過(guò)產(chǎn)生數(shù)據(jù)庫(kù)變更的方式,記錄到第二數(shù)據(jù)庫(kù)的變更日志中。
[0111]為了不會(huì)對(duì)后續(xù)的同步變更過(guò)程造成影響,還可以包括:
[0112]標(biāo)識(shí)清理單元,用于在事務(wù)提交之前,清理對(duì)應(yīng)的第一數(shù)據(jù)庫(kù)的標(biāo)識(shí)。
[0113]具體實(shí)現(xiàn)時(shí),為了在出現(xiàn)不同的數(shù)據(jù)庫(kù)同時(shí)對(duì)同一記錄進(jìn)行修改的情況下導(dǎo)致的數(shù)據(jù)不一致,所述判斷單元604具體可以用于:
[0114]在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,檢查所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則判斷所述第二數(shù)據(jù)庫(kù)是否為主站點(diǎn)的數(shù)據(jù)庫(kù),如果不是,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0115]另外,系統(tǒng)中還可以包括:
[0116]一致性補(bǔ)救單元,用于如果所述第二數(shù)據(jù)庫(kù)是主站點(diǎn)的數(shù)據(jù)庫(kù),則開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
[0117]其中,如果所述第二數(shù)據(jù)庫(kù)是主站點(diǎn)的數(shù)據(jù)庫(kù),則判斷在根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息進(jìn)行此次同步變更的過(guò)程中,第二數(shù)據(jù)庫(kù)中是否對(duì)同一記錄產(chǎn)生了變更;
[0118]如果是,則開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息
[0119]具體實(shí)現(xiàn)時(shí),還可以包括:
[0120]記錄單元,用于記錄各個(gè)數(shù)據(jù)庫(kù)發(fā)起的各次同步變更過(guò)程中,來(lái)源數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)變更的數(shù)據(jù)變更時(shí)間,以及目標(biāo)數(shù)據(jù)庫(kù)中完成數(shù)據(jù)同步變更的數(shù)據(jù)同步時(shí)間;
[0121]所述判斷單元604具體可以用于:
[0122]判斷第一數(shù)據(jù)庫(kù)的此次同步變更過(guò)程的數(shù)據(jù)變更時(shí)間與數(shù)據(jù)同步時(shí)間構(gòu)成的時(shí)段,與第二數(shù)據(jù)庫(kù)中發(fā)起的同步變更過(guò)程的數(shù)據(jù)變更時(shí)間與數(shù)據(jù)同步時(shí)間構(gòu)成的時(shí)段是否存在交集;
[0123]如果存在交集,且是針對(duì)同一記錄發(fā)生的變更,則判定在根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息進(jìn)行此次同步變更的過(guò)程中,第二數(shù)據(jù)庫(kù)中對(duì)同一記錄也產(chǎn)生了變更。
[0124]總之,通過(guò)本申請(qǐng)實(shí)施例提供的上述在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的系統(tǒng),由于是利用的SQL規(guī)范,向事務(wù)中插入變更同步發(fā)起方數(shù)據(jù)庫(kù)的標(biāo)識(shí),進(jìn)而觸發(fā)目標(biāo)數(shù)據(jù)庫(kù)將發(fā)起方數(shù)據(jù)庫(kù)的標(biāo)識(shí)寫(xiě)入到變更日志中,因此,只要是支持的SQL規(guī)范的數(shù)據(jù)庫(kù),就都可以支持,這樣,即使不同的機(jī)房之間存在異構(gòu)的數(shù)據(jù)庫(kù),也仍然可以保證在進(jìn)行雙向數(shù)據(jù)同步的過(guò)程中,避免發(fā)生死循環(huán)的現(xiàn)象。另外,在第二數(shù)據(jù)庫(kù)發(fā)生了一次數(shù)據(jù)變更時(shí)候,對(duì)于是否為從第一數(shù)據(jù)庫(kù)發(fā)送過(guò)來(lái)的同步變更信息引發(fā)的變更的判斷過(guò)程,是直接在第二數(shù)據(jù)庫(kù)一側(cè)進(jìn)行的,如果發(fā)現(xiàn)是,則可以不再向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。而在傳統(tǒng)的mysql內(nèi)部的數(shù)據(jù)同步方案中,即使第二數(shù)據(jù)庫(kù)是根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息而產(chǎn)生的數(shù)據(jù)變更,也需要再?gòu)牡诙?shù)據(jù)庫(kù)向第一數(shù)據(jù)庫(kù)發(fā)送同步變更消息,在第一數(shù)據(jù)庫(kù)一側(cè)進(jìn)行判斷是否需要忽略。因此,本申請(qǐng)實(shí)施例相對(duì)于現(xiàn)有技術(shù)而言,還可以減少網(wǎng)絡(luò)傳輸量,提聞實(shí)現(xiàn)的效率。
[0125]通過(guò)以上的實(shí)施方式的描述可知,本領(lǐng)域的技術(shù)人員可以清楚地了解到本申請(qǐng)可借助軟件加必需的通用硬件平臺(tái)的方式來(lái)實(shí)現(xiàn)。基于這樣的理解,本申請(qǐng)的技術(shù)方案本質(zhì)上或者說(shuō)對(duì)現(xiàn)有技術(shù)做出貢獻(xiàn)的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來(lái),該計(jì)算機(jī)軟件產(chǎn)品可以存儲(chǔ)在存儲(chǔ)介質(zhì)中,如R0M/RAM、磁碟、光盤(pán)等,包括若干指令用以使得一臺(tái)計(jì)算機(jī)設(shè)備(可以是個(gè)人計(jì)算機(jī),服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本申請(qǐng)各個(gè)實(shí)施例或者實(shí)施例的某些部分所述的方法。
[0126]本說(shuō)明書(shū)中的各個(gè)實(shí)施例均采用遞進(jìn)的方式描述,各個(gè)實(shí)施例之間相同相似的部分互相參見(jiàn)即可,每個(gè)實(shí)施例重點(diǎn)說(shuō)明的都是與其他實(shí)施例的不同之處。尤其,對(duì)于系統(tǒng)或系統(tǒng)實(shí)施例而言,由于其基本相似于方法實(shí)施例,所以描述得比較簡(jiǎn)單,相關(guān)之處參見(jiàn)方法實(shí)施例的部分說(shuō)明即可。以上所描述的系統(tǒng)及系統(tǒng)實(shí)施例僅僅是示意性的,其中所述作為分離部件說(shuō)明的單元可以是或者也可以不是物理上分開(kāi)的,作為單元顯示的部件可以是或者也可以不是物理單元,即可以位于一個(gè)地方,或者也可以分布到多個(gè)網(wǎng)絡(luò)單元上??梢愿鶕?jù)實(shí)際的需要選擇其中的部分或者全部模塊來(lái)實(shí)現(xiàn)本實(shí)施例方案的目的。本領(lǐng)域普通技術(shù)人員在不付出創(chuàng)造性勞動(dòng)的情況下,即可以理解并實(shí)施。
[0127]以上對(duì)本申請(qǐng)所提供的在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法及系統(tǒng),進(jìn)行了詳細(xì)介紹,本文中應(yīng)用了具體個(gè)例對(duì)本申請(qǐng)的原理及實(shí)施方式進(jìn)行了闡述,以上實(shí)施例的說(shuō)明只是用于幫助理解本申請(qǐng)的方法及其核心思想;同時(shí),對(duì)于本領(lǐng)域的一般技術(shù)人員,依據(jù)本申請(qǐng)的思想,在【具體實(shí)施方式】及應(yīng)用范圍上均會(huì)有改變之處。綜上所述,本說(shuō)明書(shū)內(nèi)容不應(yīng)理解為對(duì)本申請(qǐng)的限制。
【權(quán)利要求】
1.一種在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的方法,其特征在于,包括: 接收到第一數(shù)據(jù)庫(kù)向第二數(shù)據(jù)庫(kù)發(fā)送的同步變更信息時(shí),開(kāi)啟一事務(wù); 通過(guò)結(jié)構(gòu)化查詢語(yǔ)言SQL規(guī)范,在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)以及所述同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便觸發(fā)第二數(shù)據(jù)庫(kù)在變更日志中記錄下第一數(shù)據(jù)庫(kù)的標(biāo)識(shí); 將所述事務(wù)提交到所述第二數(shù)據(jù)庫(kù),以便第二數(shù)據(jù)庫(kù)根據(jù)所述業(yè)務(wù)數(shù)據(jù)執(zhí)行數(shù)據(jù)同步變更; 在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
2.根據(jù)權(quán)利要求1所述的方法,其特征在于,通過(guò)以下方式在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí): 在事務(wù)的開(kāi)頭,通過(guò)SQL規(guī)范,插入所述預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí),以便將所述預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)通過(guò)產(chǎn)生數(shù)據(jù)庫(kù)變更的方式,記錄到第二數(shù)據(jù)庫(kù)的變更日志中。
3.根據(jù)權(quán)利要求1所述的方法,其特征在于,還包括: 在事務(wù)提交之前,清理對(duì)應(yīng)的第一數(shù)據(jù)庫(kù)的標(biāo)識(shí)。
4.根據(jù)權(quán)利要求1所述的方法,其特征在于,所述在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息,包括: 在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則判斷所述第二數(shù)據(jù)庫(kù)是否為主站點(diǎn)的數(shù)據(jù)庫(kù),如果不是,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信肩、O
5.根據(jù)權(quán)利要求4所述的方法,其特征在于,還包括: 如果所述第二數(shù)據(jù)庫(kù)是主站點(diǎn)的數(shù)據(jù)庫(kù),則開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,所述如果所述第二數(shù)據(jù)庫(kù)是主站點(diǎn)的數(shù)據(jù)庫(kù),則開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息,包括: 如果所述第二數(shù)據(jù)庫(kù)是主站點(diǎn)的數(shù)據(jù)庫(kù),則判斷在根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息進(jìn)行此次同步變更的過(guò)程中,第二數(shù)據(jù)庫(kù)中是否對(duì)同一記錄產(chǎn)生了變更; 如果是,則開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
7.根據(jù)權(quán)利要求6所述的方法,其特征在于,還包括: 記錄各個(gè)數(shù)據(jù)庫(kù)發(fā)起的各次同步變更過(guò)程中,來(lái)源數(shù)據(jù)庫(kù)中發(fā)生數(shù)據(jù)變更的數(shù)據(jù)變更時(shí)間,以及目標(biāo)數(shù)據(jù)庫(kù)中完成數(shù)據(jù)同步變更的數(shù)據(jù)同步時(shí)間; 所述判斷在根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息進(jìn)行此次同步變更的過(guò)程中,第二數(shù)據(jù)庫(kù)中是否對(duì)同一記錄產(chǎn)生了變更,包括: 判斷第一數(shù)據(jù)庫(kù)的此次同步變更過(guò)程的數(shù)據(jù)變更時(shí)間與數(shù)據(jù)同步時(shí)間構(gòu)成的時(shí)段,與第二數(shù)據(jù)庫(kù)中發(fā)起的同步變更過(guò)程的數(shù)據(jù)變更時(shí)間與數(shù)據(jù)同步時(shí)間構(gòu)成的時(shí)段是否存在交集; 如果存在交集,且是針對(duì)同一記錄發(fā)生的變更,則判定在根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息進(jìn)行此次同步變更的過(guò)程中,第二數(shù)據(jù)庫(kù)中對(duì)同一記錄也產(chǎn)生了變更。
8.一種在數(shù)據(jù)庫(kù)之間進(jìn)行數(shù)據(jù)同步的系統(tǒng),其特征在于,包括: 事務(wù)開(kāi)啟單元,用于接收到第一數(shù)據(jù)庫(kù)向第二數(shù)據(jù)庫(kù)發(fā)送的同步變更信息時(shí),開(kāi)啟一事務(wù); 插入單元,用于通過(guò)結(jié)構(gòu)化查詢語(yǔ)言SQL規(guī)范,在所述事務(wù)中插入預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)以及所述同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),以便觸發(fā)第二數(shù)據(jù)庫(kù)在變更日志中記錄下第一數(shù)據(jù)庫(kù)的標(biāo)識(shí); 事務(wù)提交單元,用于將所述事務(wù)提交到所述第二數(shù)據(jù)庫(kù),以便第二數(shù)據(jù)庫(kù)根據(jù)所述業(yè)務(wù)數(shù)據(jù)執(zhí)行數(shù)據(jù)同步變更; 判斷單元,用于在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,判斷所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
9.根據(jù)權(quán)利要求8所述的系統(tǒng),其特征在于,所述判斷單元具體用于: 在第二數(shù)據(jù)庫(kù)同步變更完成產(chǎn)生新的變更數(shù)據(jù)后,檢查所述變更日志中記錄的標(biāo)識(shí)與預(yù)先為第一數(shù)據(jù)庫(kù)定義的標(biāo)識(shí)是否相同,如果相同,則判斷所述第二數(shù)據(jù)庫(kù)是否為主站點(diǎn)的數(shù)據(jù)庫(kù),如果不是,則略過(guò)這條變更數(shù)據(jù),以便不再向所述第一數(shù)據(jù)庫(kù)發(fā)送同步變更信肩、O
10.根據(jù)權(quán)利要求9所述的系統(tǒng),其特征在于,還包括: 一致性補(bǔ)救單元,用于如果所述第二數(shù)據(jù)庫(kù)是主站點(diǎn)的數(shù)據(jù)庫(kù),則開(kāi)啟數(shù)據(jù)一致性補(bǔ)救方案,根據(jù)第一數(shù)據(jù)庫(kù)發(fā)送的同步變更信息中攜帶的業(yè)務(wù)數(shù)據(jù),重新向第一數(shù)據(jù)庫(kù)發(fā)送同步變更信息。
【文檔編號(hào)】G06F17/30GK104376017SQ201310356601
【公開(kāi)日】2015年2月25日 申請(qǐng)日期:2013年8月15日 優(yōu)先權(quán)日:2013年8月15日
【發(fā)明者】樓江航 申請(qǐng)人:阿里巴巴集團(tuán)控股有限公司