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