一種數(shù)據(jù)同步的裝置及方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及數(shù)據(jù)處理技術(shù)領(lǐng)域,特別涉及一種數(shù)據(jù)同步的裝置及方法。
【背景技術(shù)】
[0002]Sqoop是一個(gè)數(shù)據(jù)相互轉(zhuǎn)移的工具,可以將一個(gè)關(guān)系型數(shù)據(jù)庫(kù)中的數(shù)據(jù)導(dǎo)進(jìn)到Hadoop的HDFS中,也可以將HDFS的數(shù)據(jù)導(dǎo)進(jìn)到關(guān)系型數(shù)據(jù)庫(kù)中。
[0003]針對(duì)大數(shù)據(jù)平臺(tái)中,利用sqoop針對(duì)關(guān)系型數(shù)據(jù)庫(kù)與非關(guān)系型數(shù)據(jù)庫(kù)間進(jìn)行數(shù)據(jù)同步過(guò)程中,當(dāng)源數(shù)據(jù)庫(kù)中的數(shù)據(jù)需要分別同步到多個(gè)目標(biāo)數(shù)據(jù)庫(kù)中時(shí),需要將sqoop分別與不同的目標(biāo)數(shù)據(jù)庫(kù)單獨(dú)相連,實(shí)現(xiàn)數(shù)據(jù)同步。舉例來(lái)說(shuō),當(dāng)源數(shù)據(jù)庫(kù)中的數(shù)據(jù)需要分別同步到兩個(gè)目標(biāo)數(shù)據(jù)庫(kù)中時(shí),將源數(shù)據(jù)庫(kù)與sqoop相連,再將sqoop與第一個(gè)目標(biāo)數(shù)據(jù)庫(kù)相連,然后,將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)通過(guò)sqoop同步到第一個(gè)目標(biāo)數(shù)據(jù)庫(kù)中,同步完成后,將sqoop與第一個(gè)目標(biāo)數(shù)據(jù)庫(kù)斷開(kāi),再將sqoop與第二個(gè)目標(biāo)數(shù)據(jù)庫(kù)相連,將源數(shù)據(jù)庫(kù)中的數(shù)據(jù)通過(guò)sqoop同步到第二個(gè)目標(biāo)數(shù)據(jù)庫(kù)中。
[0004]通過(guò)上述描述可見(jiàn),現(xiàn)有技術(shù)中,將數(shù)據(jù)源中的數(shù)據(jù)通過(guò)sqoop同步到多個(gè)目標(biāo)數(shù)據(jù)庫(kù)中時(shí),數(shù)據(jù)同步的效率較低。
【發(fā)明內(nèi)容】
[0005]有鑒于此,本發(fā)明提供了一種數(shù)據(jù)同步的裝置及方法,能夠提高數(shù)據(jù)同步的效率。
[0006]一方面,本發(fā)明提供了一種數(shù)據(jù)同步的裝置,包括:
[0007]數(shù)據(jù)源與sqoop相連,所述sqoop與消息隊(duì)列MQ相連,所述MQ與至少一個(gè)目標(biāo)數(shù)據(jù)庫(kù)相連;
[0008]所述sqoop,用于獲取所述數(shù)據(jù)源中的帶有預(yù)設(shè)標(biāo)簽的待同步的數(shù)據(jù),并對(duì)所述待同步的數(shù)據(jù)進(jìn)行同步處理,將處理后的數(shù)據(jù)發(fā)送給所述MQ ;
[0009]所述MQ,用于接受所述目標(biāo)數(shù)據(jù)庫(kù)對(duì)用于標(biāo)識(shí)數(shù)據(jù)的標(biāo)簽的訂閱,根據(jù)所述預(yù)設(shè)標(biāo)簽,將所述sqoop發(fā)來(lái)的數(shù)據(jù),發(fā)送給所述訂閱所述預(yù)設(shè)標(biāo)簽的目標(biāo)數(shù)據(jù)庫(kù)。
[0010]進(jìn)一步地,所述MQ,還用于接收所述目標(biāo)數(shù)據(jù)庫(kù)發(fā)來(lái)的接收數(shù)據(jù)失敗的失敗消息,并當(dāng)在發(fā)送所述sqoop發(fā)來(lái)的數(shù)據(jù)后的第一預(yù)設(shè)時(shí)間內(nèi)接收到所述失敗消息時(shí),向所述失敗消息對(duì)應(yīng)的目標(biāo)數(shù)據(jù)庫(kù)發(fā)送所述失敗消息對(duì)應(yīng)的數(shù)據(jù)。
[0011]進(jìn)一步地,所述sqoop,還用于獲取所述數(shù)據(jù)源的數(shù)據(jù)庫(kù)同步日志,將所述數(shù)據(jù)庫(kù)同步日志發(fā)送給所述MQ;
[0012]所述MQ,用于將所述數(shù)據(jù)庫(kù)同步日志發(fā)送給所述目標(biāo)數(shù)據(jù)庫(kù),并將所述數(shù)據(jù)庫(kù)同步日志保存第二預(yù)設(shè)時(shí)間。
[0013]進(jìn)一步地,所述MQ,用于接收所述至少一個(gè)目標(biāo)數(shù)據(jù)庫(kù)發(fā)來(lái)的訂閱的標(biāo)簽的信息,根據(jù)所述訂閱的標(biāo)簽的信息,建立標(biāo)簽與目標(biāo)數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系,根據(jù)所述預(yù)設(shè)標(biāo)簽,將所述sqoop發(fā)來(lái)的數(shù)據(jù),發(fā)送給所述預(yù)設(shè)標(biāo)簽對(duì)應(yīng)的目標(biāo)數(shù)據(jù)庫(kù)。
[0014]進(jìn)一步地,所述MQ,用于將所述sqoop發(fā)來(lái)的數(shù)據(jù)進(jìn)行數(shù)據(jù)分割得到分割后的子數(shù)據(jù),將得到的每個(gè)子數(shù)據(jù)進(jìn)行數(shù)據(jù)封裝,將封裝后的子數(shù)據(jù)寫(xiě)入到MQ的隊(duì)列中,讀取所述隊(duì)列,將讀取的隊(duì)列中的數(shù)據(jù)進(jìn)行包封裝得到數(shù)據(jù)包,將所述數(shù)據(jù)包發(fā)送給所述目標(biāo)數(shù)據(jù)庫(kù)。
[0015]另一方面,本發(fā)明提供了一種數(shù)據(jù)同步的方法,包括:
[0016]S1:sq00p獲取所述數(shù)據(jù)源中的帶有預(yù)設(shè)標(biāo)簽的待同步的數(shù)據(jù),并對(duì)所述待同步的數(shù)據(jù)進(jìn)行同步處理,將處理后的數(shù)據(jù)發(fā)送給消息隊(duì)列MQ ;
[0017]S2:所述MQ接受所述目標(biāo)數(shù)據(jù)庫(kù)對(duì)用于標(biāo)識(shí)數(shù)據(jù)的標(biāo)簽的訂閱,根據(jù)所述預(yù)設(shè)標(biāo)簽,將所述sqoop發(fā)來(lái)的數(shù)據(jù),發(fā)送給所述訂閱所述預(yù)設(shè)標(biāo)簽的目標(biāo)數(shù)據(jù)庫(kù)。
[0018]進(jìn)一步地,還包括:
[0019]所述MQ接收所述目標(biāo)數(shù)據(jù)庫(kù)發(fā)來(lái)的接收數(shù)據(jù)失敗的失敗消息,并當(dāng)在發(fā)送所述sqoop發(fā)來(lái)的數(shù)據(jù)后的第一預(yù)設(shè)時(shí)間內(nèi)接收到所述失敗消息時(shí),向所述失敗消息對(duì)應(yīng)的目標(biāo)數(shù)據(jù)庫(kù)發(fā)送所述失敗消息對(duì)應(yīng)的數(shù)據(jù)。
[0020]進(jìn)一步地,還包括:
[0021]所述sqoop獲取所述數(shù)據(jù)源的數(shù)據(jù)庫(kù)同步日志,將所述數(shù)據(jù)庫(kù)同步日志發(fā)送給所述MQ ;
[0022]所述MQ將所述數(shù)據(jù)庫(kù)同步日志發(fā)送給所述目標(biāo)數(shù)據(jù)庫(kù),并將所述數(shù)據(jù)庫(kù)同步日志保存第二預(yù)設(shè)時(shí)間。
[0023]進(jìn)一步地,在所述步驟SI之前還包括:
[0024]所述MQ接收所述至少一個(gè)目標(biāo)數(shù)據(jù)庫(kù)發(fā)來(lái)的訂閱的標(biāo)簽的信息;
[0025]所述MQ根據(jù)所述訂閱的標(biāo)簽的信息,建立所述標(biāo)簽與目標(biāo)數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系;
[0026]所述S2,包括:
[0027]所述MQ根據(jù)所述預(yù)設(shè)標(biāo)簽,將所述sqoop發(fā)來(lái)的數(shù)據(jù),發(fā)送給所述預(yù)設(shè)標(biāo)簽對(duì)應(yīng)的目標(biāo)數(shù)據(jù)庫(kù)。
[0028]進(jìn)一步地,所述S2包括:
[0029]所述MQ將所述sqoop發(fā)來(lái)的數(shù)據(jù)進(jìn)行數(shù)據(jù)分割得到分割后的子數(shù)據(jù),將得到的每個(gè)子數(shù)據(jù)進(jìn)行數(shù)據(jù)封裝,將封裝后的子數(shù)據(jù)寫(xiě)入到MQ的隊(duì)列中,讀取所述隊(duì)列,將讀取的隊(duì)列中的數(shù)據(jù)進(jìn)行包封裝得到數(shù)據(jù)包,將所述數(shù)據(jù)包發(fā)送給所述目標(biāo)數(shù)據(jù)庫(kù)。
[0030]本發(fā)明提供了一種數(shù)據(jù)同步的裝置及方法,sqoop與MQ相連,MQ可以與多個(gè)目標(biāo)數(shù)據(jù)庫(kù)相連,目標(biāo)數(shù)據(jù)庫(kù)可以在MQ上訂閱標(biāo)簽,當(dāng)MQ接收到帶有該標(biāo)簽的數(shù)據(jù)時(shí)就會(huì)發(fā)送給所有訂閱該標(biāo)簽的目標(biāo)數(shù)據(jù)庫(kù),這樣就實(shí)現(xiàn)了將數(shù)據(jù)源中的數(shù)據(jù)同時(shí)同步到多個(gè)目標(biāo)數(shù)據(jù)庫(kù)中,提高了數(shù)據(jù)同步的效率。
【附圖說(shuō)明】
[0031]為了更清楚地說(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ù)這些附圖獲得其他的附圖。
[0032]圖1是本發(fā)明一實(shí)施例提供的一種數(shù)據(jù)同步的裝置的示意圖;
[0033]圖2是本發(fā)明一實(shí)施例提供的一種數(shù)據(jù)同步的方法的流程圖;
[0034]圖3是本發(fā)明一實(shí)施例提供的另一種數(shù)據(jù)同步的方法的流程圖。
【具體實(shí)施方式】
[0035]為使本發(fā)明實(shí)施例的目的、技術(shù)方案和優(yōu)點(diǎn)更加清楚,下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對(duì)本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實(shí)施例是本發(fā)明一部分實(shí)施例,而不是全部的實(shí)施例,基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒(méi)有做出創(chuàng)造性勞動(dòng)的前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
[0036]如圖1所示,本發(fā)明實(shí)施例提供了一種數(shù)據(jù)同步的裝置,該裝置包括:
[0037]數(shù)據(jù)源與sqooplOl 相連,所述 sqooplOl 與 MQ (Message Queue,消息隊(duì)列)102 相連,所述MQ102與至少一個(gè)目標(biāo)數(shù)據(jù)庫(kù)相連;
[0038]所述sqooplOl,用于獲取所述數(shù)據(jù)源中的帶有預(yù)設(shè)標(biāo)簽的待同步的數(shù)據(jù),并對(duì)所述待同步的數(shù)據(jù)進(jìn)行同步處理,將處理后的數(shù)據(jù)發(fā)送給所述MQ102 ;
[0039]所述MQ102,用于接受所述目標(biāo)數(shù)據(jù)庫(kù)對(duì)用于標(biāo)識(shí)數(shù)據(jù)的標(biāo)簽的訂閱,根據(jù)所述預(yù)設(shè)標(biāo)簽,將所述sqooplOl發(fā)來(lái)的數(shù)據(jù),發(fā)送給所述訂閱所述預(yù)設(shè)標(biāo)簽的目標(biāo)數(shù)據(jù)庫(kù)。
[0040]本發(fā)明實(shí)施例提供了一種數(shù)據(jù)同步的裝置,sqoop與MQ相連,MQ可以與多個(gè)目標(biāo)數(shù)據(jù)庫(kù)相連,目標(biāo)數(shù)據(jù)庫(kù)可以在MQ上訂閱標(biāo)簽,當(dāng)MQ接收到帶有該標(biāo)簽的數(shù)據(jù)時(shí)就會(huì)發(fā)送給所有訂閱該標(biāo)簽的目標(biāo)數(shù)據(jù)庫(kù),這樣就實(shí)現(xiàn)了將數(shù)據(jù)源中的數(shù)據(jù)同時(shí)同步到多個(gè)目標(biāo)數(shù)據(jù)庫(kù)中,提高了數(shù)據(jù)同步的效率。
[0041]另外,通過(guò)本發(fā)明實(shí)施例提供的一種數(shù)據(jù)同步的裝置,通過(guò)目標(biāo)數(shù)據(jù)庫(kù)向MQ訂閱標(biāo)簽,將數(shù)據(jù)同步的數(shù)據(jù)源與目標(biāo)數(shù)據(jù)庫(kù)進(jìn)行有效解耦,動(dòng)態(tài)擴(kuò)展數(shù)據(jù)同步需求。
[0042]對(duì)于因網(wǎng)絡(luò)等原因造成的數(shù)據(jù)同步中斷,進(jìn)行數(shù)據(jù)重發(fā)處理,可以通過(guò)MQ進(jìn)行數(shù)據(jù)重發(fā),提高了容錯(cuò)處理,當(dāng)MQ連接目標(biāo)數(shù)據(jù)庫(kù)時(shí),對(duì)于消費(fèi)數(shù)據(jù)失敗時(shí),MQ可以針對(duì)未被消費(fèi)的數(shù)據(jù)進(jìn)行自動(dòng)重發(fā),直到消費(fèi)成功,可以有效保障數(shù)據(jù)最終實(shí)現(xiàn)成功同步,而且整個(gè)重試過(guò)程均由MQ自動(dòng)處理,無(wú)需人工控制,可以進(jìn)一步提高數(shù)據(jù)同步的自動(dòng)化效率和可靠性。
[0043]該裝置包括:所述MQ,還用于接收所述目標(biāo)數(shù)據(jù)庫(kù)發(fā)來(lái)的接收數(shù)據(jù)失敗的失敗消息,并當(dāng)在發(fā)送所述sqoop發(fā)來(lái)的數(shù)據(jù)后的第一預(yù)設(shè)時(shí)間內(nèi)接收到所述失敗消息時(shí),向所述失敗消息對(duì)應(yīng)的目標(biāo)數(shù)據(jù)庫(kù)發(fā)送所述失敗消息對(duì)應(yīng)的數(shù)據(jù)。另外,當(dāng)不在發(fā)送所述sqoop發(fā)來(lái)的數(shù)據(jù)后的第一預(yù)設(shè)時(shí)間內(nèi)接收到所述失敗消息時(shí),忽略該失敗消息。
[0044]舉例來(lái)說(shuō),MQ將數(shù)據(jù)A發(fā)送給目標(biāo)數(shù)據(jù)庫(kù)后,目標(biāo)數(shù)據(jù)庫(kù)接收失敗,向MQ發(fā)送了失敗消息,MQ在發(fā)送數(shù)據(jù)A后的第一預(yù)設(shè)時(shí)間內(nèi)接收到了該失敗消息,向目標(biāo)數(shù)據(jù)庫(kù)發(fā)送數(shù)據(jù)A。
[0045]在一種可能的實(shí)現(xiàn)方式中,該裝置包括:
[0046]所述sqoop,還用于獲取所述數(shù)據(jù)源的數(shù)據(jù)庫(kù)同步日志,將所述數(shù)據(jù)庫(kù)同步日志發(fā)送給所述MQ ;
[0047]所述MQ,用于將所述數(shù)據(jù)庫(kù)同步日志發(fā)送給所述目標(biāo)數(shù)據(jù)庫(kù),并將所述數(shù)據(jù)庫(kù)同步日志保存第二預(yù)設(shè)時(shí)間。
[0048]通過(guò)sqoop進(jìn)行數(shù)據(jù)同步時(shí),對(duì)于sqoop傳送的數(shù)據(jù)庫(kù)同步日志通過(guò)MQ進(jìn)行有效的持久化保存,方便數(shù)據(jù)追溯。在分布式系統(tǒng)中,消息從發(fā)送到接收,環(huán)節(jié)非常多,沒(méi)有任何一個(gè)環(huán)節(jié)是安全的,而任何環(huán)節(jié)出了問(wèn)題,都會(huì)導(dǎo)致丟消息。通過(guò)MQ實(shí)現(xiàn)消息持久化,保證在不是絕對(duì)安全的多環(huán)節(jié)里,完成消息安全的傳輸。sqoop將數(shù)據(jù)傳送給MQ,由MQ實(shí)現(xiàn)一段時(shí)間內(nèi)的持久化,可以是默認(rèn)保留48小時(shí),即第二預(yù)設(shè)時(shí)間為48小時(shí),有利于實(shí)現(xiàn)同步數(shù)據(jù)的回溯,提高數(shù)據(jù)同步的容錯(cuò)能力。
[0049]對(duì)MQ進(jìn)行標(biāo)簽的訂閱可以通過(guò)以下實(shí)現(xiàn)方式實(shí)現(xiàn),所述MQ,用于接收所述至少一個(gè)目標(biāo)數(shù)據(jù)庫(kù)發(fā)來(lái)的訂閱的標(biāo)簽的信息,根據(jù)所述訂閱的標(biāo)簽的信息,建立標(biāo)簽與目標(biāo)數(shù)據(jù)庫(kù)的對(duì)應(yīng)關(guān)系,根據(jù)所述預(yù)設(shè)標(biāo)簽,將所述sqoop發(fā)來(lái)的數(shù)據(jù),發(fā)送給所述預(yù)設(shè)標(biāo)簽對(duì)應(yīng)的目標(biāo)數(shù)據(jù)庫(kù)。
[0050]在一種可能的實(shí)現(xiàn)方式中,所述MQ,用于將所述sqoop發(fā)來(lái)的數(shù)據(jù)進(jìn)行數(shù)據(jù)分割得到分割后的子數(shù)據(jù),將得到的每個(gè)子數(shù)據(jù)進(jìn)行數(shù)據(jù)封裝,將封裝后的子數(shù)據(jù)寫(xiě)入到MQ的隊(duì)列中,讀取所述隊(duì)列,將讀取的隊(duì)列中的數(shù)據(jù)進(jìn)行包封裝得到數(shù)據(jù)包,將所述數(shù)據(jù)包發(fā)送給所述目標(biāo)數(shù)據(jù)庫(kù)。
[0051]上述裝置內(nèi)的各單元之間的信息交互、執(zhí)行過(guò)程等內(nèi)容,由于與本發(fā)明方法實(shí)施例基于同一構(gòu)思,具體內(nèi)容可參見(jiàn)本發(fā)明方法實(shí)施例中的敘述,此處不再贅述。
[0052]參見(jiàn)圖2,本發(fā)明實(shí)施例提供了一種