一種數(shù)據(jù)同步系統(tǒng)、方法及裝置制造方法
【專利摘要】本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步系統(tǒng)、方法及裝置,涉及數(shù)據(jù)庫系統(tǒng)【技術(shù)領(lǐng)域】,改變了原有主從服務(wù)器之間的數(shù)據(jù)同步架構(gòu),采用平行的同步架構(gòu)解決了高并發(fā)下數(shù)據(jù)同步不及時(shí)的問題。該方法包括:數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,數(shù)據(jù)同步指令為第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)第一數(shù)據(jù)庫生成的;數(shù)據(jù)同步裝置根據(jù)數(shù)據(jù)同步指令,讀取第一數(shù)據(jù)庫的修改日志;數(shù)據(jù)同步裝置根據(jù)修改日志,確定需采用的數(shù)據(jù)同步方式,需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式;數(shù)據(jù)同步裝置根據(jù)需采用的數(shù)據(jù)同步方式及修改日志,將第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至少兩個(gè)數(shù)據(jù)庫中除第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。
【專利說明】一種數(shù)據(jù)同步系統(tǒng)、方法及裝置
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)庫系統(tǒng)【技術(shù)領(lǐng)域】,尤其涉及一種數(shù)據(jù)同步系統(tǒng)、方法及裝置。
【背景技術(shù)】
[0002]在基于客戶端/服務(wù)器網(wǎng)絡(luò)結(jié)構(gòu)的交互系統(tǒng)中,服務(wù)器上存放有最新的交互數(shù)據(jù),其中服務(wù)器包括有主數(shù)據(jù)庫和若干從數(shù)據(jù)庫,而客戶端(如手機(jī)終端、郵件客戶端等)為了提高訪問速度或離線查找的需要,會(huì)在本地儲(chǔ)存器中保留一份緩存的數(shù)據(jù)副本,用戶在客戶端查找和訪問的聯(lián)系人信息都是從本地的數(shù)據(jù)副本中獲得的,這就需要服務(wù)器的主從數(shù)據(jù)庫能夠即時(shí)同步更新的數(shù)據(jù)內(nèi)容,使客戶端中數(shù)據(jù)副本信息與服務(wù)器上保持一致,保證用戶得到的信息是準(zhǔn)確和有效的,另外,在客戶端(如手機(jī)終端、郵件客戶端等)需要向服務(wù)器寫入新數(shù)據(jù)時(shí),為保證其他客戶端能夠及時(shí)獲取服務(wù)器的最新數(shù)據(jù),也需要服務(wù)器的主從數(shù)據(jù)庫能夠即時(shí)同步更新的數(shù)據(jù)內(nèi)容。
[0003]現(xiàn)有技術(shù)中數(shù)據(jù)同步的方式是:當(dāng)服務(wù)器上的數(shù)據(jù)被修改后,主數(shù)據(jù)庫將更新數(shù)據(jù)同步至其他從數(shù)據(jù)庫中,以使得客戶端到任意數(shù)據(jù)庫去獲取更新數(shù)據(jù)。這種集中同步的方式雖然能夠使客戶端的數(shù)據(jù)與數(shù)據(jù)庫保持一致,但也存在很大的問題:由于數(shù)據(jù)庫上的資源(如網(wǎng)絡(luò)帶寬、磁盤10、CPU處理能力等)是有限的,當(dāng)大量客戶端并發(fā)請(qǐng)求同步時(shí),會(huì)造成服務(wù)影響變慢甚至拒絕客戶端的請(qǐng)求,隨著客戶端數(shù)量的增加,服務(wù)器資源問題會(huì)變得越來越嚴(yán)重,主從數(shù)據(jù)庫之間需要很長時(shí)間才能完成同步,甚至同步失敗,需要等主數(shù)據(jù)庫空閑后才能重新同步,造成客戶端內(nèi)的數(shù)據(jù)副本信息在一段時(shí)間內(nèi)與服務(wù)期不一致,用戶無法查到最新信息,不僅嚴(yán)重影響用戶的使用,同時(shí)降低了服務(wù)器的工作效率。
【發(fā)明內(nèi)容】
[0004]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步系統(tǒng)、方法及裝置,通過利用數(shù)據(jù)同步裝置讀取第一數(shù)據(jù)庫的修改日志確定其他數(shù)據(jù)庫中需要同步數(shù)據(jù)的位置,進(jìn)而數(shù)據(jù)同步裝置將被修改的數(shù)據(jù)同步至其他數(shù)據(jù)庫,改變了原有主從服務(wù)器之間的數(shù)據(jù)同步架構(gòu),解決了高并發(fā)下數(shù)據(jù)同步不及時(shí)的問題。
[0005]為達(dá)到上述目的,本發(fā)明的實(shí)施例采用如下技術(shù)方案:
[0006]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步系統(tǒng),包括至少兩個(gè)數(shù)據(jù)庫,以及與所述至少兩個(gè)數(shù)據(jù)庫相連的數(shù)據(jù)同步裝置,其中,所述至少兩個(gè)數(shù)據(jù)庫中包含有第一數(shù)據(jù)庫;
[0007]所述數(shù)據(jù)同步裝置,用于接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,所述數(shù)據(jù)同步指令為所述第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)所述第一數(shù)據(jù)庫生成的;以及根據(jù)所述數(shù)據(jù)同步指令,讀取所述第一數(shù)據(jù)庫的修改日志;以及根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式;以及根據(jù)所述需采用的數(shù)據(jù)同步方式及所述修改日志,將所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中;
[0008]所述第一數(shù)據(jù)庫,用于發(fā)送所述數(shù)據(jù)同步指令至所述數(shù)據(jù)同步裝置,以及允許所述數(shù)據(jù)同步裝置讀取所述修改日志;
[0009]所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫,用于接收所述數(shù)據(jù)同步裝置發(fā)送的所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)。
[0010]所述修改日志包括有所述第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,所述全局ID用于指示所述第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置,其中,
[0011]所述數(shù)據(jù)同步裝置,具體用于根據(jù)所述修改日志,讀取所述修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID;以及判斷各個(gè)全局ID是否一致;若一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為單線程同步方式;若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程同步方式;以及計(jì)算所述各個(gè)全局ID中不一致的全局ID的個(gè)數(shù)N,N為大于I的整數(shù);以及分別向除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫開啟N條同步線程。
[0012]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步方法,包括至少兩個(gè)數(shù)據(jù)庫,所述方法包括:
[0013]數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,所述數(shù)據(jù)同步指令為所述第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)所述第一數(shù)據(jù)庫生成的;
[0014]所述數(shù)據(jù)同步裝置根據(jù)所述數(shù)據(jù)同步指令,讀取所述第一數(shù)據(jù)庫的修改日志;
[0015]所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式;
[0016]所述數(shù)據(jù)同步裝置根據(jù)所述需采用的數(shù)據(jù)同步方式及所述修改日志,將所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。
[0017]所述修改日志包括有所述第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,所述全局ID用于指示所述第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置。
[0018]所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式,包括:
[0019]所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,讀取所述修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID;
[0020]所述數(shù)據(jù)同步裝置判斷各個(gè)全局ID是否一致;
[0021]若一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為單線程同步方式;
[0022]若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程同步方式。
[0023]在所述若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程冋步方式之后,還包括:
[0024]所述數(shù)據(jù)同步裝置計(jì)算所述各個(gè)全局ID中不一致的全局ID的個(gè)數(shù)N,N為大于I的整數(shù);
[0025]所述數(shù)據(jù)同步裝置分別向除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫開啟N條同步線程。
[0026]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步裝置,包括:
[0027]接收單元,用于數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,所述數(shù)據(jù)同步指令為所述第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)所述第一數(shù)據(jù)庫生成的;
[0028]讀取單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述數(shù)據(jù)同步指令,讀取所述第一數(shù)據(jù)庫的修改日志;
[0029]處理單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式;
[0030]同步單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述需采用的數(shù)據(jù)同步方式及所述修改日志,將所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。
[0031]所述修改日志包括有所述第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,所述全局ID用于指示所述第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置。
[0032]所述處理單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,讀取所述修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID;所述數(shù)據(jù)同步裝置判斷各個(gè)全局ID是否一致;若一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為單線程同步方式;若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程同步方式。
[0033]所述處理單元,還用于所述數(shù)據(jù)同步裝置計(jì)算所述各個(gè)全局ID中不一致的全局ID的個(gè)數(shù)N,N為大于I的整數(shù);所述數(shù)據(jù)同步裝置分別向除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫開啟N條同步線程。
[0034]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步方法、裝置及系統(tǒng),通過利用數(shù)據(jù)同步裝置讀取第一數(shù)據(jù)庫的修改日志確定其他數(shù)據(jù)庫中需要同步數(shù)據(jù)的位置,進(jìn)而數(shù)據(jù)同步裝置將被修改的數(shù)據(jù)同步至其他數(shù)據(jù)庫,改變了原有的主從服務(wù)器之間的數(shù)據(jù)同步架構(gòu),解決了高并發(fā)下原有的主從服務(wù)器之間數(shù)據(jù)同步不及時(shí)的問題,重新構(gòu)建了服務(wù)器之間不分主從的新架構(gòu),不僅解決了數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)同步的延時(shí)問題,也解決了用戶終端與服務(wù)器進(jìn)行交互時(shí)的服務(wù)延時(shí)問題,大大提高了服務(wù)器的工作效率。
【專利附圖】
【附圖說明】
[0035]為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對(duì)實(shí)施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
[0036]圖1為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)同步方法的流程示意圖一;
[0037]圖2為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)同步方法的流程示意圖二 ;
[0038]圖3為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)同步方法的流程示意圖三;
[0039]圖4為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)同步系統(tǒng)的結(jié)構(gòu)示意圖;
[0040]圖5為本發(fā)明實(shí)施例提供的一種數(shù)據(jù)同步裝置的結(jié)構(gòu)示意圖。
【具體實(shí)施方式】
[0041]以下描述中,為了說明而不是為了限定,提出了諸如特定系統(tǒng)結(jié)構(gòu)、接口、技術(shù)之類的具體細(xì)節(jié),以便透徹理解本發(fā)明。然而,本領(lǐng)域的技術(shù)人員應(yīng)當(dāng)清楚,在沒有這些具體細(xì)節(jié)的其它實(shí)施例中也可以實(shí)現(xiàn)本發(fā)明。在其它情況中,省略對(duì)眾所周知的裝置、電路以及方法的詳細(xì)說明,以免不必要的細(xì)節(jié)妨礙本發(fā)明的描述。另外,本文中術(shù)語“系統(tǒng)”和“網(wǎng)絡(luò)”在本文中常被可互換使用。
[0042]實(shí)施例一
[0043]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步方法,如圖1所示,包括:
[0044]101、數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令。
[0045]其中,本實(shí)施例中的數(shù)據(jù)同步指令為第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)第一數(shù)據(jù)庫生成的。另外,本發(fā)明實(shí)施例中的數(shù)據(jù)同步裝置可以包括有加萊拉復(fù)制單元(GaleraReplication)以及寫集復(fù)制單元(WSREP)。
[0046]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步方法、數(shù)據(jù)同步裝置及數(shù)據(jù)同步系統(tǒng),通過利用數(shù)據(jù)同步裝置讀取第一數(shù)據(jù)庫的修改日志確定其他數(shù)據(jù)庫中需要同步數(shù)據(jù)的位置,進(jìn)而數(shù)據(jù)同步裝置將被修改的數(shù)據(jù)同步至其他數(shù)據(jù)庫,改變了原有主從服務(wù)器之間的數(shù)據(jù)同步架構(gòu),解決了高并發(fā)下原有的主從服務(wù)器之間數(shù)據(jù)同步不及時(shí)的問題,重新構(gòu)建了服務(wù)器之間不分主從的新架構(gòu),不僅解決了數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)同步的延時(shí)問題,也解決了用戶終端與服務(wù)器進(jìn)行交互時(shí)的服務(wù)延時(shí)問題,大大提高了服務(wù)器的工作效率。
[0047]示例性的,在基于客戶端/服務(wù)器網(wǎng)絡(luò)結(jié)構(gòu)的交互系統(tǒng)中,客戶端可以向服務(wù)器側(cè)寫入新數(shù)據(jù),以使得其他客戶端可以從服務(wù)器側(cè)獲得最新的信息,其中,服務(wù)器側(cè)可以包括多個(gè)至少兩個(gè)數(shù)據(jù)庫,以及與至少兩個(gè)數(shù)據(jù)庫相連的數(shù)據(jù)同步裝置,客戶端將更新的數(shù)據(jù)寫入某一數(shù)據(jù)庫中,則將該數(shù)據(jù)庫作為第一數(shù)據(jù)庫,該第一數(shù)據(jù)庫需要把更新的數(shù)據(jù)同步到其他數(shù)據(jù)庫中,以使得其他用戶端請(qǐng)求數(shù)據(jù)時(shí)能夠及時(shí)獲得最新的數(shù)據(jù)信息。當(dāng)?shù)谝粩?shù)據(jù)庫中的數(shù)據(jù)被修改時(shí),生成數(shù)據(jù)同步指令指示數(shù)據(jù)同步裝置對(duì)除第一數(shù)據(jù)庫外的其他數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步,以保證服務(wù)器側(cè)的數(shù)據(jù)的一致性和完整性。
[0048]102、數(shù)據(jù)同步裝置根據(jù)數(shù)據(jù)同步指令,讀取第一數(shù)據(jù)庫的修改日志。
[0049]其中,修改日志包括有第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,全局ID用于指示第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置。例如,第一數(shù)據(jù)庫中第一行數(shù)據(jù)的全局ID為101,第一數(shù)據(jù)庫中第二行數(shù)據(jù)的全局ID為102,該全局ID用于指示第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置,以便數(shù)據(jù)同步裝置對(duì)其他數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行同步操作。
[0050]具體的,在數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令之后,該指令指示數(shù)據(jù)同步裝置對(duì)除第一數(shù)據(jù)庫外的其他數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步,此時(shí)數(shù)據(jù)同步裝置讀取第一數(shù)據(jù)庫的修改日志,從而確定在第一數(shù)據(jù)庫中具體哪些地方的數(shù)據(jù)被改變。
[0051 ] 103、數(shù)據(jù)同步裝置根據(jù)修改日志,確定需采用的數(shù)據(jù)同步方式。
[0052]其中,上述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式。單線程同步方式即只使用一條線程通道完成數(shù)據(jù)的傳送,單線程同步在執(zhí)行程序時(shí)所走的程序路徑按照連續(xù)順序排下來,前面的必須處理好,后面的才會(huì)執(zhí)行。相應(yīng)的,多線程同步方式即使用多條線程通道同時(shí)完成數(shù)據(jù)的傳送。
[0053]具體的,數(shù)據(jù)同步裝置根據(jù)修改日志確定需采用的數(shù)據(jù)同步方式的方法可以包括:數(shù)據(jù)同步裝置根據(jù)修改日志,讀取修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID;數(shù)據(jù)同步裝置判斷各個(gè)全局ID是否一致;若一致,數(shù)據(jù)同步裝置則確定需采用的數(shù)據(jù)同步方式為單線程同步方式;若不一致,數(shù)據(jù)同步裝置則確定需采用的數(shù)據(jù)同步方式為多線程同步方式。
[0054]104、數(shù)據(jù)同步裝置根據(jù)需采用的數(shù)據(jù)同步方式及修改日志,將第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至上述至少兩個(gè)數(shù)據(jù)庫中除第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。
[0055]具體的,若數(shù)據(jù)同步裝置確定需采用的數(shù)據(jù)同步方式為單線程同步方式,那么數(shù)據(jù)同步裝置根據(jù)修改日志中所指示的唯一的全局ID,將第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至上述至少兩個(gè)數(shù)據(jù)庫中除第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。其中,若有多個(gè)相同全局ID,為了保證同一全局ID的操作能夠按照順序操作,所以該全局ID的操作只能順序進(jìn)行,在第一個(gè)一個(gè)操作發(fā)送出去后,當(dāng)數(shù)據(jù)同步裝置接收到同步成功標(biāo)志后,再發(fā)送該全局ID內(nèi)的下一個(gè)操作。
[0056]若數(shù)據(jù)同步裝置確定需采用的數(shù)據(jù)同步方式為多線程同步方式,那么數(shù)據(jù)同步裝置根據(jù)修改日志中所指示的不同的全局ID,分別將對(duì)應(yīng)于不同全局ID的被修改的數(shù)據(jù)同步至上述至少兩個(gè)數(shù)據(jù)庫中除第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。
[0057]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步方法,通過數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,數(shù)據(jù)同步指令為第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)第一數(shù)據(jù)庫生成的;數(shù)據(jù)同步裝置根據(jù)數(shù)據(jù)同步指令,讀取第一數(shù)據(jù)庫的修改日志;數(shù)據(jù)同步裝置根據(jù)修改日志,確定需采用的數(shù)據(jù)同步方式,需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式;數(shù)據(jù)同步裝置根據(jù)需采用的數(shù)據(jù)同步方式及修改日志,將第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至少兩個(gè)數(shù)據(jù)庫中除第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。該方案通過利用數(shù)據(jù)同步裝置讀取第一數(shù)據(jù)庫的修改日志確定其他數(shù)據(jù)庫中需要同步數(shù)據(jù)的位置,進(jìn)而數(shù)據(jù)同步裝置將被修改的數(shù)據(jù)同步至其他數(shù)據(jù)庫,改變了原有的主從服務(wù)器之間的數(shù)據(jù)同步架構(gòu),解決了高并發(fā)下原有的主從服務(wù)器之間數(shù)據(jù)同步不及時(shí)的問題,重新構(gòu)建了服務(wù)器之間不分主從的新架構(gòu),不僅解決了數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)同步的延時(shí)問題,也解決了用戶終端與服務(wù)器進(jìn)行交互時(shí)的服務(wù)延時(shí)問題,大大提高了服務(wù)器的工作效率。
[0058]實(shí)施例二
[0059]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步方法,如圖2所示,包括:
[0060]201、數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令。
[0061]其中,本實(shí)施例中的數(shù)據(jù)同步指令為第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)第一數(shù)據(jù)庫生成的。
[0062]本發(fā)明的實(shí)施例提供一種數(shù)據(jù)同步方法、數(shù)據(jù)同步裝置及數(shù)據(jù)同步系統(tǒng),通過利用數(shù)據(jù)同步裝置讀取第一數(shù)據(jù)庫的修改日志確定其他數(shù)據(jù)庫中需要同步數(shù)據(jù)的位置,進(jìn)而數(shù)據(jù)同步裝置將被修改的數(shù)據(jù)同步至其他數(shù)據(jù)庫,改變了原有主從服務(wù)器之間的數(shù)據(jù)同步架構(gòu),解決了高并發(fā)下原有的主從服務(wù)器之間數(shù)據(jù)同步不及時(shí)的問題,重新構(gòu)建了服務(wù)器之間不分主從的新架構(gòu),不僅解決了數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)同步的延時(shí)問題,也解決了用戶終端與服務(wù)器進(jìn)行交互時(shí)的服務(wù)延時(shí)問題,大大提高了服務(wù)器的工作效率。
[0063]示例性的,在基于客戶端/服務(wù)器網(wǎng)絡(luò)結(jié)構(gòu)的交互系統(tǒng)中,客戶端可以向服務(wù)器側(cè)寫入新數(shù)據(jù),以使得其他客戶端可以從服務(wù)器側(cè)獲得最新的信息,其中,服務(wù)器側(cè)可以包括多個(gè)至少兩個(gè)數(shù)據(jù)庫,以及與至少兩個(gè)數(shù)據(jù)庫相連的數(shù)據(jù)同步裝置,客戶端將更新的數(shù)據(jù)寫入某一數(shù)據(jù)庫中,則將該數(shù)據(jù)庫作為第一數(shù)據(jù)庫,該第一數(shù)據(jù)庫需要把更新的數(shù)據(jù)同步到其他數(shù)據(jù)庫中,以使得其他用戶端請(qǐng)求數(shù)據(jù)時(shí)能夠及時(shí)獲得最新的數(shù)據(jù)信息。當(dāng)?shù)谝粩?shù)據(jù)庫中的數(shù)據(jù)被修改時(shí),生成數(shù)據(jù)同步指令指示數(shù)據(jù)同步裝置對(duì)除第一數(shù)據(jù)庫外的其他數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步,以保證服務(wù)器側(cè)的數(shù)據(jù)的一致性和完整性。[0064]202、數(shù)據(jù)同步裝置根據(jù)數(shù)據(jù)同步指令,讀取第一數(shù)據(jù)庫的修改日志。
[0065]其中,修改日志包括有第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,全局ID用于指示第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置。例如,第一數(shù)據(jù)庫中第一行數(shù)據(jù)的全局ID為A,第一數(shù)據(jù)庫中第二行數(shù)據(jù)的全局ID為B,該全局ID用于指示第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置,以便數(shù)據(jù)同步裝置對(duì)其他數(shù)據(jù)庫的數(shù)據(jù)進(jìn)行同步操作。
[0066]具體的,在數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令之后,該指令指示數(shù)據(jù)同步裝置對(duì)除第一數(shù)據(jù)庫外的其他數(shù)據(jù)庫進(jìn)行數(shù)據(jù)同步,此時(shí)數(shù)據(jù)同步裝置讀取第一數(shù)據(jù)庫的修改日志,從而確定在第一數(shù)據(jù)庫中具體哪些地方的數(shù)據(jù)被改變。
[0067]203、數(shù)據(jù)同步裝置根據(jù)修改日志,讀取修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID。
[0068]示例性的,修改日志的部分內(nèi)容可以如表1所示。
[0069]表1
[0070]
【權(quán)利要求】
1.一種數(shù)據(jù)同步系統(tǒng),其特征在于,包括至少兩個(gè)數(shù)據(jù)庫,以及與所述至少兩個(gè)數(shù)據(jù)庫相連的數(shù)據(jù)同步裝置,其中,所述至少兩個(gè)數(shù)據(jù)庫中包含有第一數(shù)據(jù)庫; 所述數(shù)據(jù)同步裝置,用于接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,所述數(shù)據(jù)同步指令為所述第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)所述第一數(shù)據(jù)庫生成的;以及根據(jù)所述數(shù)據(jù)同步指令,讀取所述第一數(shù)據(jù)庫的修改日志;以及根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式;以及根據(jù)所述需采用的數(shù)據(jù)同步方式及所述修改日志,將所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中; 所述第一數(shù)據(jù)庫,用于發(fā)送所述數(shù)據(jù)同步指令至所述數(shù)據(jù)同步裝置,以及允許所述數(shù)據(jù)同步裝置讀取所述修改日志; 所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫,用于接收所述數(shù)據(jù)同步裝置發(fā)送的所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)同步系統(tǒng),其特征在于,所述修改日志包括有所述第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,所述全局ID用于指示所述第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置,其中, 所述數(shù)據(jù)同步裝置,具體用于根據(jù)所述修改日志,讀取所述修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID;以及判斷各個(gè)全局ID是否一致;若一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為單線程同步方式;若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程同步方式;以及計(jì)算所述各個(gè)全局ID中不一致的全局ID的個(gè)數(shù)N,N為大于I的整數(shù);以及分別向除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫開啟N條同步線程。
3.一種數(shù)據(jù)同步方法,其特征在于,包括至少兩個(gè)數(shù)據(jù)庫,所述方法包括: 數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,所述數(shù)據(jù)同步指令為所述第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)所述第一數(shù)據(jù)庫生成的; 所述數(shù)據(jù)同步裝置根據(jù)所述數(shù)據(jù)同步指令,讀取所述第一數(shù)據(jù)庫的修改日志; 所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式; 所述數(shù)據(jù)同步裝置根據(jù)所述需采用的數(shù)據(jù)同步方式及所述修改日志,將所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。
4.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述修改日志包括有所述第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,所述全局ID用于指示所述第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置。
5.根據(jù)權(quán)利要求3所述的方法,其特征在于,所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式,包括: 所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,讀取所述修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID; 所述數(shù)據(jù)同步裝置判斷各個(gè)全局ID是否一致; 若一致,所述數(shù)據(jù)同步裝 置則確定所述需采用的數(shù)據(jù)同步方式為單線程同步方式;若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程同步方式。
6.根據(jù)權(quán)利要求5所述的方法,其特征在于,在所述若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程同步方式之后,還包括: 所述數(shù)據(jù)同步裝置計(jì)算所述各個(gè)全局ID中不一致的全局ID的個(gè)數(shù)N,N為大于I的整數(shù); 所述數(shù)據(jù)同步裝置分別向除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫開啟N條同步線程。
7.一種數(shù)據(jù)同步裝置,其特征在于,包括: 接收單元,用于數(shù)據(jù)同步裝置接收來自第一數(shù)據(jù)庫的數(shù)據(jù)同步指令,所述數(shù)據(jù)同步指令為所述第一數(shù)據(jù)庫中的數(shù)據(jù)被修改時(shí)所述第一數(shù)據(jù)庫生成的; 讀取單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述數(shù)據(jù)同步指令,讀取所述第一數(shù)據(jù)庫的修改日志; 處理單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,確定需采用的數(shù)據(jù)同步方式,所述需采用的數(shù)據(jù)同步方式包括單線程同步方式或多線程同步方式; 同步單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述需采用的數(shù)據(jù)同步方式及所述修改日志,將所述第一數(shù)據(jù)庫中被修改的數(shù)據(jù)同步至所述至少兩個(gè)數(shù)據(jù)庫中除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫中。
8.根據(jù)權(quán)利要求7所述的數(shù)據(jù)同步裝置,其特征在于,所述修改日志包括有所述第一數(shù)據(jù)庫中被修改數(shù)據(jù)的內(nèi)容以及被修改數(shù)據(jù)對(duì)應(yīng)的全局ID,所述全局ID用于指示所述第一數(shù)據(jù)庫中每一行數(shù)據(jù)的位置。
9.根據(jù)權(quán)利要求7所述的數(shù)據(jù)同步裝置,其特征在于, 所述處理單元,用于所述數(shù)據(jù)同步裝置根據(jù)所述修改日志,讀取所述修改日志中記錄的被修改數(shù)據(jù)的信息,每條被修改數(shù)據(jù)的信息中均包含被修改數(shù)據(jù)對(duì)應(yīng)的全局ID;所述數(shù)據(jù)同步裝置判斷各個(gè)全局ID是否一致;若一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為單線程同步方式;若不一致,所述數(shù)據(jù)同步裝置則確定所述需采用的數(shù)據(jù)同步方式為多線程同步方式。
10.根據(jù)權(quán)利要求9所述的數(shù)據(jù)同步裝置,其特征在于, 所述處理單元,還用于所述數(shù)據(jù)同步裝置計(jì)算所述各個(gè)全局ID中不一致的全局ID的個(gè)數(shù)N,N為大于I的整數(shù);所述數(shù)據(jù)同步裝置分別向除所述第一數(shù)據(jù)庫以外的數(shù)據(jù)庫開啟N條同步線程。
【文檔編號(hào)】G06F17/30GK103744906SQ201310730796
【公開日】2014年4月23日 申請(qǐng)日期:2013年12月26日 優(yōu)先權(quán)日:2013年12月26日
【發(fā)明者】周秉政, 張文明, 廖生棟 申請(qǐng)人:樂視網(wǎng)信息技術(shù)(北京)股份有限公司