欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

數(shù)據(jù)同步方法、系統(tǒng)、存儲(chǔ)器及數(shù)據(jù)同步設(shè)備與流程

文檔序號(hào):12887206閱讀:319來源:國知局
本發(fā)明涉及互聯(lián)網(wǎng)領(lǐng)域,特別是涉及互聯(lián)網(wǎng)的數(shù)據(jù)庫領(lǐng)域,具體為一種數(shù)據(jù)同步方法、系統(tǒng)、存儲(chǔ)器及數(shù)據(jù)同步設(shè)備。版權(quán)申明本專利文件披露的內(nèi)容包含受版權(quán)保護(hù)的材料。該版權(quán)為版權(quán)所有人所有。版權(quán)所有人不反對(duì)任何人復(fù)制專利與商標(biāo)局的官方記錄和檔案中所存在的該專利文件或者該專利披露。
背景技術(shù)
::隨著互聯(lián)網(wǎng)的發(fā)展,現(xiàn)代社會(huì)已經(jīng)進(jìn)入信息社會(huì),人與人之間在互聯(lián)網(wǎng)上的交互越來越多,每家互聯(lián)網(wǎng)公司的數(shù)據(jù)都出現(xiàn)了爆炸性的增長,而不管是過去、現(xiàn)在還是未來,數(shù)據(jù)的處理和統(tǒng)計(jì)分析都是一直存在的。企業(yè)的業(yè)務(wù)系統(tǒng),為了能夠承載這些數(shù)據(jù),不可避免的采用了一定的策略,使得數(shù)據(jù)分布在不同的機(jī)器,不同的數(shù)據(jù)庫和表中。在以一定周期對(duì)企業(yè)的數(shù)據(jù)進(jìn)行分析時(shí),傳統(tǒng)的方案是用諸如sqoop、kettle等etl工具將關(guān)系型數(shù)據(jù)庫中的數(shù)據(jù)加載到hadoop平臺(tái)再進(jìn)行分析,這些數(shù)據(jù)有增量加載的,也有全量加載的,其中全量加載的數(shù)據(jù)往往都是頻繁發(fā)生更新的數(shù)據(jù),為了加載這些數(shù)據(jù),每天都需要花費(fèi)大量的時(shí)間和資源來進(jìn)行此項(xiàng)工作,而在加載這些數(shù)據(jù)的同時(shí),數(shù)據(jù)依然在不斷的發(fā)生變化,最終加載到hadoop的數(shù)據(jù)依然不確定是哪一個(gè)時(shí)刻的數(shù)據(jù)狀態(tài)。技術(shù)實(shí)現(xiàn)要素:為了解決上述的以及其他潛在的技術(shù)問題,本發(fā)明的實(shí)施例提供了一種數(shù)據(jù)同步方法,所述數(shù)據(jù)同步方法包括:將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫,所述目標(biāo)庫與所述源庫異構(gòu);對(duì)所述源庫的增量數(shù)據(jù)操作進(jìn)行同步處理并在進(jìn)行所述同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻;檢測所述操作時(shí)刻是否為預(yù)設(shè)時(shí)刻;響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照。于本發(fā)明的一實(shí)施例中,所述對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行同步處理包括:根據(jù)所述源庫的日志的屬性確定所述源庫的增量數(shù)據(jù)操作類型;根據(jù)所述源庫的增量數(shù)據(jù)操作類型將所述源庫的增量數(shù)據(jù)操作轉(zhuǎn)化為所述目標(biāo)庫中對(duì)應(yīng)類型的同等操作;將所述同等操作在所述目標(biāo)庫中的所述目標(biāo)表中執(zhí)行。于本發(fā)明的一實(shí)施例中,所述數(shù)據(jù)同步方法還包括:建立與所述目標(biāo)表的結(jié)構(gòu)相同的第一數(shù)據(jù)處理表,所述第一數(shù)據(jù)處理表從用于記錄所述目標(biāo)表中預(yù)設(shè)時(shí)刻的每條記錄的額外表中讀取數(shù)據(jù)。于本發(fā)明的一實(shí)施例中,在依次對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行同步處理之前,還包括:對(duì)所述源庫的日志進(jìn)行解析,以確定對(duì)所述源庫的增量數(shù)據(jù)操作。于本發(fā)明的一實(shí)施例中,所述數(shù)據(jù)同步方法還包括:建立與所述源庫中源表結(jié)構(gòu)相同的第二數(shù)據(jù)處理表,所述第二數(shù)據(jù)處理表從所述目標(biāo)庫的目標(biāo)表中讀取數(shù)據(jù)。本發(fā)明的實(shí)施例提供了一種數(shù)據(jù)同步系統(tǒng),所述數(shù)據(jù)同步系統(tǒng)包括:目標(biāo)庫初始化模塊,用于將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫,所述目標(biāo)庫與所述源庫異構(gòu);同步模塊,依次對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行同步處理;檢測模塊,用于在所述同步模塊進(jìn)行同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻并檢測所述操作時(shí)刻是否為預(yù)設(shè)時(shí)刻;快照模塊,用于響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照。于本發(fā)明的一實(shí)施例中,所述同步模塊包括:獲取單元,用于根據(jù)所述源庫的日志的屬性確定所述源庫的增量數(shù)據(jù)操作類型;轉(zhuǎn)化單元,用于根據(jù)所述源庫的增量數(shù)據(jù)操作類型將所述源庫的增量數(shù)據(jù)操作轉(zhuǎn)化為所述目標(biāo)庫中對(duì)應(yīng)類型的同等操作;同步執(zhí)行單元,用于將所述同等操作在所述目標(biāo)庫中的所述目標(biāo)表中執(zhí)行。于本發(fā)明的一實(shí)施例中,所述同步模塊還包括:第一處理表單元,用于建立與所述目標(biāo)表的結(jié)構(gòu)相同的第一數(shù)據(jù)處理表,所述第一數(shù)據(jù)處理表從用于記錄所述目標(biāo)表中預(yù)設(shè)時(shí)刻的每條記錄的額外表中讀取數(shù)據(jù)。于本發(fā)明的一實(shí)施例中,所述數(shù)據(jù)同步系統(tǒng)還包括:增量獲取模塊,用于對(duì)所述源庫的日志進(jìn)行解析,以確定對(duì)所述源庫的增量數(shù)據(jù)操作。于本發(fā)明的一實(shí)施例中,所述目標(biāo)庫初始化模塊還包括第二處理表單元,用于建立與所述源庫中源表結(jié)構(gòu)相同的第二數(shù)據(jù)處理表,所述第二數(shù)據(jù)處理表從所述目標(biāo)庫的目標(biāo)表中讀取數(shù)據(jù)。本發(fā)明的實(shí)施例提供了一種數(shù)據(jù)同步設(shè)備,包括處理器和存儲(chǔ)器,所述存儲(chǔ)器存儲(chǔ)有程序指令,所述處理器運(yùn)行所述程序指令以實(shí)現(xiàn)如上所述方法中的步驟。本發(fā)明的實(shí)施例提供了一種存儲(chǔ)器,其上存儲(chǔ)有機(jī)器可讀程序指令,該所述機(jī)器可讀程序指令運(yùn)行時(shí)執(zhí)行如上所述的方法。如上所述,本發(fā)明的數(shù)據(jù)同步方法、系統(tǒng)、存儲(chǔ)器及數(shù)據(jù)同步設(shè)備具有以下有益效果:本發(fā)明實(shí)施例可以實(shí)時(shí)或最大限度的保證目標(biāo)庫中目標(biāo)表的數(shù)據(jù)與源庫中源表的數(shù)據(jù)一致性,而且可以保存目標(biāo)庫中目標(biāo)表每條記錄在預(yù)設(shè)時(shí)刻的狀態(tài)。附圖說明為了更清楚地說明本發(fā)明實(shí)施例中的技術(shù)方案,下面將對(duì)實(shí)施例描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對(duì)于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動(dòng)的前提下,還可以根據(jù)這些附圖獲得其他的附圖。圖1顯示為本發(fā)明的數(shù)據(jù)同步方法的流程示意圖。圖2顯示為本發(fā)明的數(shù)據(jù)同步方法的流程架構(gòu)示意圖。圖3顯示為本發(fā)明的數(shù)據(jù)同步方法中同步過程的流程示意圖。圖4顯示為本發(fā)明的數(shù)據(jù)同步方法的流程實(shí)例示意圖。圖5顯示為本發(fā)明的數(shù)據(jù)同步系統(tǒng)的原理框圖。圖6顯示為本發(fā)明的數(shù)據(jù)同步系統(tǒng)中同步模塊的原理框圖。圖7~圖26顯示為本發(fā)明的數(shù)據(jù)同步方法和系統(tǒng)的同步效果檢測對(duì)比圖。元件標(biāo)號(hào)說明100數(shù)據(jù)同步系統(tǒng)110目標(biāo)庫初始化模塊120同步模塊121獲取單元122轉(zhuǎn)化單元123同步執(zhí)行單元130檢測模塊140快照模塊s110~s140步驟s121~s123步驟具體實(shí)施方式以下通過特定的具體實(shí)例說明本發(fā)明的實(shí)施方式,本領(lǐng)域技術(shù)人員可由本說明書所揭露的內(nèi)容輕易地了解本發(fā)明的其他優(yōu)點(diǎn)與功效。本發(fā)明還可以通過另外不同的具體實(shí)施方式加以實(shí)施或應(yīng)用,本說明書中的各項(xiàng)細(xì)節(jié)也可以基于不同觀點(diǎn)與應(yīng)用,在沒有背離本發(fā)明的精神下進(jìn)行各種修飾或改變。需說明的是,在不沖突的情況下,以下實(shí)施例及實(shí)施例中的特征可以相互組合。請(qǐng)參閱圖1至圖26。須知,本說明書所附圖式所繪示的結(jié)構(gòu)、比例、大小等,均僅用以配合說明書所揭示的內(nèi)容,以供熟悉此技術(shù)的人士了解與閱讀,并非用以限定本發(fā)明可實(shí)施的限定條件,故不具技術(shù)上的實(shí)質(zhì)意義,任何結(jié)構(gòu)的修飾、比例關(guān)系的改變或大小的調(diào)整,在不影響本發(fā)明所能產(chǎn)生的功效及所能達(dá)成的目的下,均應(yīng)仍落在本發(fā)明所揭示的技術(shù)內(nèi)容得能涵蓋的范圍內(nèi)。同時(shí),本說明書中所引用的如“上”、“下”、“左”、“右”、“中間”及“一”等的用語,亦僅為便于敘述的明了,而非用以限定本發(fā)明可實(shí)施的范圍,其相對(duì)關(guān)系的改變或調(diào)整,在無實(shí)質(zhì)變更技術(shù)內(nèi)容下,當(dāng)亦視為本發(fā)明可實(shí)施的范疇。本實(shí)施例的目的在于提供一種數(shù)據(jù)同步方法、系統(tǒng)、存儲(chǔ)器及數(shù)據(jù)同步設(shè)備,用于解決現(xiàn)有技術(shù)中在大數(shù)據(jù)領(lǐng)域做數(shù)據(jù)分析時(shí),對(duì)頻繁發(fā)生變動(dòng)的數(shù)據(jù)進(jìn)行全量抽取時(shí)的長耗時(shí)問題,以及數(shù)據(jù)狀態(tài)無法精確到00:00:00的問題,或需要進(jìn)行高頻率短周期的報(bào)表輸出無法實(shí)現(xiàn)的問題。以下將詳細(xì)闡述本發(fā)明的數(shù)據(jù)同步方法、系統(tǒng)、存儲(chǔ)器及數(shù)據(jù)同步設(shè)備的原理及實(shí)施方式,使本領(lǐng)域技術(shù)人員不需要?jiǎng)?chuàng)造性勞動(dòng)即可理解本發(fā)明的數(shù)據(jù)同步方法、系統(tǒng)、存儲(chǔ)器及數(shù)據(jù)同步設(shè)備。本實(shí)施例所提供的數(shù)據(jù)同步方法、系統(tǒng)、存儲(chǔ)器及數(shù)據(jù)同步設(shè)備應(yīng)用于異構(gòu)數(shù)據(jù)的兩個(gè)分布式數(shù)據(jù)庫的數(shù)據(jù)從源庫加載到目標(biāo)庫的傳輸過程中。本實(shí)施例中,所述源庫為但不限于mysql數(shù)據(jù)庫(database),其中所述源庫可以為分布式的多個(gè)mysql數(shù)據(jù)庫(database),所述目標(biāo)庫為但不限于hbase。于本實(shí)施例中,例如利用canal對(duì)源庫(mysql數(shù)據(jù)庫)的二進(jìn)制日志(binlog)進(jìn)行解析,利用himma將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫并依次對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行處理。canal可以布置于一個(gè)或多個(gè)分布式服務(wù)器(canal服務(wù)器)上,canal通過canalinstance(進(jìn)程實(shí)例)對(duì)源庫的日志進(jìn)行解析,獲取對(duì)源庫的增量數(shù)據(jù)操作。其中,canal是mysql數(shù)據(jù)庫binlog(二進(jìn)制日志)的日志增量訂閱和消費(fèi)組件,canal基于數(shù)據(jù)庫增量日志解析,提供增量數(shù)據(jù)訂閱和消費(fèi)。binlog(二進(jìn)制日志)記錄對(duì)數(shù)據(jù)發(fā)生或潛在發(fā)生更改的sql語句,并以二進(jìn)制的形式保存在磁盤中。canal模擬mysql從機(jī)的交互協(xié)議,偽裝自己為mysql從機(jī),向mysql主機(jī)發(fā)送請(qǐng)求,mysql主機(jī)收到請(qǐng)求,開始推送binlog給從機(jī)(也就是canal),canal解析binlog,獲取對(duì)源庫的增量數(shù)據(jù)操作。具體地,如圖1所示,本發(fā)明的實(shí)施例提供了一種數(shù)據(jù)同步方法,所述數(shù)據(jù)同步方法包括以下步驟:s110,將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫,所述目標(biāo)庫與所述源庫異構(gòu)。s120,對(duì)所述源庫的增量數(shù)據(jù)操作進(jìn)行同步處理并在進(jìn)行所述同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻。s130,檢測所述操作時(shí)刻是否為預(yù)設(shè)時(shí)刻,若是則執(zhí)行s140,響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照,若否,則返回繼續(xù)執(zhí)行s120。以下以源庫為mysql,目標(biāo)庫為hbase為例對(duì)所述數(shù)據(jù)同步方法中的步驟s110至步驟s140進(jìn)行詳細(xì)說明。s110,如圖2所示,將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫,所述目標(biāo)庫與所述源庫異構(gòu)。其中,源庫(mysql)中可以有分布式的多個(gè)數(shù)據(jù)庫,himma通過為每一個(gè)源庫的數(shù)據(jù)庫建立進(jìn)程,將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫(hbase)中,完成目標(biāo)庫(hbase)的初始化。于本實(shí)施例中,如圖2所示,在對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行同步處理之前,還包括:對(duì)所述源庫的日志進(jìn)行解析,以確定對(duì)所述源庫的增量數(shù)據(jù)操作。具體地,canal服務(wù)器通過多個(gè)canal實(shí)例(instance)對(duì)所述源庫的日志進(jìn)行解析,以確定對(duì)所述源庫的增量數(shù)據(jù)操作。多個(gè)canal實(shí)例建立對(duì)mysql的日志訂閱與消費(fèi)。mysql的日志訂閱與消費(fèi)同步到目標(biāo)庫(hbase)中。其中,采用對(duì)源庫的日志進(jìn)行解析,獲取對(duì)源庫的增量數(shù)據(jù)操作之前,需要檢查配置與環(huán)境是否合法,是否會(huì)因?yàn)槟硞€(gè)條件的缺失導(dǎo)致程序崩潰或無法正常行使功能。于本實(shí)施例中,具體地,所述將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫是將源庫(mysql數(shù)據(jù)庫)中當(dāng)前時(shí)刻的數(shù)據(jù)通過sparksql的方式進(jìn)行讀取并初始化到目標(biāo)庫(hbase)中,使用sparksql的并行讀取功能進(jìn)行源庫中源表的源數(shù)據(jù)到目標(biāo)表的初始化。其中,sparksql是spark(基于內(nèi)存的迭代計(jì)算框架)的一個(gè)組件,用于結(jié)構(gòu)化數(shù)據(jù)的計(jì)算。sparksql提供了一個(gè)稱為dataframes的編程抽象,dataframes可以充當(dāng)分布式sql查詢引擎。使用spark的分布式計(jì)算,隨機(jī)決定實(shí)施同步過程的數(shù)據(jù)同步設(shè)備。于本實(shí)施例中,在將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫時(shí)或之后,所述數(shù)據(jù)同步方法還包括:建立與所述源庫中源表結(jié)構(gòu)相同的第二數(shù)據(jù)處理表,所述第二數(shù)據(jù)處理表從所述目標(biāo)庫的目標(biāo)表中讀取數(shù)據(jù),進(jìn)行預(yù)設(shè)處理和輸出。例如:為hbase建立與mysql數(shù)據(jù)庫中源表的schema相同的hive表,所述hive表從hbase的hbase表中讀取數(shù)據(jù),進(jìn)行預(yù)設(shè)處理和輸出。schema為數(shù)據(jù)庫對(duì)象的集合,一個(gè)用戶一般對(duì)應(yīng)一個(gè)schema。對(duì)于新建的一張表,通過刷新映射關(guān)系的方式來獲得新建的表與目標(biāo)表的映射關(guān)系。s120,對(duì)所述源庫的增量數(shù)據(jù)操作進(jìn)行同步處理并在進(jìn)行所述同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻。所述步驟s120是通過設(shè)定的篩選器對(duì)canal解析到的日志進(jìn)行訂閱和消費(fèi),對(duì)mysql數(shù)據(jù)庫表或表中的記錄進(jìn)行的操作同步到hbase的過程。于本實(shí)施例中,如圖3所示,具體地,所述對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行同步處理包括以下步驟:s121,根據(jù)所述源庫的日志的屬性確定所述源庫的增量數(shù)據(jù)操作類型。s122,根據(jù)所述源庫的增量數(shù)據(jù)操作類型將所述源庫的增量數(shù)據(jù)操作轉(zhuǎn)化為所述目標(biāo)庫中對(duì)應(yīng)類型的同等操作。s123,將所述同等操作在所述目標(biāo)庫中的所述目標(biāo)表中執(zhí)行,以實(shí)現(xiàn)增量數(shù)據(jù)同步。于本實(shí)施例中,將所述同等操作在所述目標(biāo)庫中的所述目標(biāo)表中執(zhí)行具體包括:重命名表名操作處理、重命名字段操作處理、刪除字段操作處理、添加字段操作處理、刪除主鍵處理、添加主鍵處理以及修改字段屬性操作處理。其中,所述重命名表名操作處理時(shí),將所述目標(biāo)表中來自源庫中源表的所有數(shù)據(jù)緩存在內(nèi)存中,刪除目標(biāo)庫中的目標(biāo)表中來自源庫中源表的所有數(shù)據(jù),重命名內(nèi)存中緩存的數(shù)據(jù)的主鍵并將內(nèi)存中緩存的所述目標(biāo)表的所有數(shù)據(jù)寫入所述目標(biāo)庫中的目標(biāo)表。具體地,例如使用表達(dá)式altertable(?<before>.+?)rename(?<after>.+)可以匹配出一個(gè)alter事件的ddl是否是重命名表名操作,對(duì)于該事件的同步,是讀出目標(biāo)表中來自源表的所有數(shù)據(jù),緩存在內(nèi)存中,然后刪除目標(biāo)表中的數(shù)據(jù),最后將內(nèi)存中的數(shù)據(jù)修改rowkey(主鍵)后寫回目標(biāo)表。其中,刪除主鍵必須與添加主鍵成對(duì)出現(xiàn),可視為修改主鍵,僅刪除主鍵的情況下,將停止對(duì)操作表進(jìn)行同步。例如,使用正則表達(dá)式dropprimarykey匹配出是否與刪除主鍵的操作成對(duì)出現(xiàn),若是,則使用正則表達(dá)式add(?<irrelevant>.+?)primarykey((?<key>.+?))匹配出添加主鍵的操作。于本實(shí)施例中,所述數(shù)據(jù)同步方法還包括:建立與所述目標(biāo)表的結(jié)構(gòu)相同的第一數(shù)據(jù)處理表,所述第一數(shù)據(jù)處理表從用于記錄所述目標(biāo)表中預(yù)設(shè)時(shí)刻的每條記錄的額外表中讀取數(shù)據(jù)。具體地,例如:建立用于記錄目標(biāo)表中每天最后一秒狀態(tài)的每條記錄的額外表,建立與所述目標(biāo)表的schema相同的hive表,所述hive表從用于記錄所述目標(biāo)表中預(yù)設(shè)時(shí)刻的每條記錄的額外表中讀取數(shù)據(jù),進(jìn)行預(yù)設(shè)處理和輸出。其中,對(duì)于新建的一張表,通過刷新映射關(guān)系的方式來獲得新建的表與目標(biāo)表的映射關(guān)系。s130,檢測所述操作時(shí)刻是否為預(yù)設(shè)時(shí)刻,若是則執(zhí)行s140,響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照,若否,則返回繼續(xù)執(zhí)行s120。其中,所述預(yù)設(shè)時(shí)刻為以天、星期、月或年為周期的預(yù)設(shè)時(shí)刻。例如,檢測所述操作時(shí)刻是否為每天的零點(diǎn)時(shí)刻(00:00:00),并在檢測到所述操作時(shí)刻為零點(diǎn)時(shí)刻時(shí)建立所述目標(biāo)庫中的目標(biāo)表的快照。所述步驟s140中,響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照例如為:在消費(fèi)每一條日志時(shí),例如在00:00:00后第一時(shí)間建立hbase主表的快照,精確的保存每一個(gè)hbase主表新一天尚未發(fā)生任何變更時(shí)的狀態(tài)(在00:00:00時(shí)暫停同步的步驟,先快照,所以可以精確到具體的時(shí)刻)。所以本實(shí)施例的數(shù)據(jù)同步方法可以實(shí)時(shí)或最大限度的保證目標(biāo)表的數(shù)據(jù)與源表的數(shù)據(jù)一致性,而且可以保存目標(biāo)表每條記錄在每天最后時(shí)刻的狀態(tài)。如圖4所示,舉例說明所述數(shù)據(jù)同步方法的具體執(zhí)行過程如下:首先進(jìn)行配置檢查,讀取canal實(shí)例(instance)配置,檢查配置與環(huán)境是否合法,是否完善,是否會(huì)因?yàn)槟硞€(gè)條件的缺失導(dǎo)致程序崩潰或無法正常行使功能,若配置有問題,則打印缺失配置后退出當(dāng)前操作。然后進(jìn)行初始化,以一個(gè)mysql服務(wù)器為單位進(jìn)行初始化,可以同時(shí)并行執(zhí)行多個(gè)初始化進(jìn)程,圖中executor...表示省略的并行進(jìn)行的初始化進(jìn)程,僅以一個(gè)初始化進(jìn)程為例進(jìn)行說明。讀取mysql實(shí)例配置,以數(shù)據(jù)庫為單位并行初始化,讀取mysql數(shù)據(jù)庫配置,以目標(biāo)表為單位進(jìn)行初始化。檢查目標(biāo)表是否存在,不存在即創(chuàng)建hbase表,讀取數(shù)據(jù)寫入hbase表,保存映射關(guān)系。若目標(biāo)表存在,則檢查映射關(guān)系是否存在,若存在,判斷重新初始化映射關(guān)系是否存在,若是,則刪除已有數(shù)據(jù),讀取數(shù)據(jù)寫入hbase表,保存映射關(guān)系,若否,則返回創(chuàng)建hbase表的步驟。在讀取數(shù)據(jù)寫入hbase表,保存映射關(guān)系之后,創(chuàng)建快照,創(chuàng)建增量表。完成數(shù)據(jù)的初始化。最后進(jìn)行數(shù)據(jù)同步的過程:himma連接canal,讀取日志,然后根據(jù)日志的增量操作類型同步目標(biāo)庫的目標(biāo)表。然后跨天判斷,即檢測操作時(shí)刻為零點(diǎn)時(shí)刻的源庫的增量數(shù)據(jù)操作時(shí),下一刻即為下一天,此時(shí),即創(chuàng)建快照,創(chuàng)建增量表。為實(shí)現(xiàn)上述數(shù)據(jù)同步方法,本實(shí)施例還對(duì)應(yīng)提供了一種數(shù)據(jù)同步系統(tǒng)100,如圖5所示,所述數(shù)據(jù)同步系統(tǒng)100包括:目標(biāo)庫初始化模塊110,同步模塊120,檢測模塊130以及快照模塊140。以下以源庫為mysql,目標(biāo)庫為hbase為例對(duì)所述數(shù)據(jù)同步系統(tǒng)100進(jìn)行詳細(xì)說明。如圖2所示,所述目標(biāo)庫初始化模塊110用于將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫,所述目標(biāo)庫與所述源庫異構(gòu)。其中,源庫(mysql)中可以有分布式的多個(gè)數(shù)據(jù)庫,himma通過為每一個(gè)源庫的數(shù)據(jù)庫建立進(jìn)程,將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫(hbase)中,完成目標(biāo)庫(hbase)的初始化。于本實(shí)施例中,所述數(shù)據(jù)同步系統(tǒng)還包括:增量獲取模塊,用于在對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行同步處理之前,對(duì)所述源庫的日志進(jìn)行解析,以確定對(duì)所述源庫的增量數(shù)據(jù)操作。于本實(shí)施例中,還可以包括配置檢查模塊,在對(duì)源庫的日志進(jìn)行解析,獲取對(duì)源庫的增量數(shù)據(jù)操作之前,需要檢查配置與環(huán)境是否合法,是否會(huì)因?yàn)槟硞€(gè)條件的缺失導(dǎo)致程序崩潰或無法正常行使功能。于本實(shí)施例中,具體地,所述目標(biāo)庫初始化模塊110將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫是將源庫(mysql數(shù)據(jù)庫)中當(dāng)前時(shí)刻的數(shù)據(jù)通過sparksql的方式進(jìn)行讀取并初始化到目標(biāo)庫(hbase)中,使用sparksql的并行讀取功能進(jìn)行源數(shù)據(jù)到目標(biāo)表的初始化。使用spark的分布式計(jì)算,隨機(jī)決定實(shí)施同步過程的數(shù)據(jù)同步設(shè)備。于本實(shí)施例中,所述目標(biāo)庫初始化模塊110還包括第二處理表單元,建立與所述源庫中源表結(jié)構(gòu)相同的第二數(shù)據(jù)處理表,所述第二數(shù)據(jù)處理表從所述目標(biāo)庫的目標(biāo)表中讀取數(shù)據(jù),進(jìn)行預(yù)設(shè)處理和輸出。其中,所述第二處理表單元可以在將所述源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)剿瞿繕?biāo)庫時(shí)或之后,建立第二數(shù)據(jù)處理表。例如:在將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫時(shí),所述第二處理表單元為hbase建立與mysql數(shù)據(jù)庫中源表的schema相同的hive表,所述hive表從hbase的hbase表中讀取數(shù)據(jù),進(jìn)行預(yù)設(shè)處理和輸出。schema為數(shù)據(jù)庫對(duì)象的集合,一個(gè)用戶一般對(duì)應(yīng)一個(gè)schema。對(duì)于新建的一張表,通過刷新映射關(guān)系的方式來獲得新建的表與目標(biāo)表的映射關(guān)系。于本實(shí)施例中,所述同步模塊120依次對(duì)源庫的增量數(shù)據(jù)操作進(jìn)行處理,具體地,如圖6所示,所述同步模塊120包括:獲取單元121,轉(zhuǎn)化單元122以及同步執(zhí)行單元123。所述同步模塊120是通過設(shè)定的篩選器對(duì)canal解析到的日志進(jìn)行訂閱和消費(fèi),對(duì)mysql數(shù)據(jù)庫表或表中的記錄進(jìn)行的操作同步到hbase的過程。具體地,所述獲取單元121用于根據(jù)所述源庫的日志的屬性確定所述源庫的增量數(shù)據(jù)操作類型。所述轉(zhuǎn)化單元122用于根據(jù)所述源庫的增量數(shù)據(jù)操作類型將所述源庫的增量數(shù)據(jù)操作轉(zhuǎn)化為所述目標(biāo)庫中對(duì)應(yīng)類型的同等操作。所述同步執(zhí)行單元123用于將所述同等操作在所述目標(biāo)庫中的所述目標(biāo)表中執(zhí)行,以實(shí)現(xiàn)增量數(shù)據(jù)同步。于本實(shí)施例中,所述同步執(zhí)行單元123將所述同等操作在所述目標(biāo)庫中的所述目標(biāo)表中執(zhí)行具體包括:重命名表名操作處理、重命名字段操作處理、刪除字段操作處理、添加字段操作處理、刪除主鍵處理、添加主鍵處理以及修改字段屬性操作處理。其中,所述重命名表名操作處理時(shí),將所述目標(biāo)表中來自源庫中源表的所有數(shù)據(jù)緩存在內(nèi)存中,刪除目標(biāo)庫中的目標(biāo)表中來自源庫中源表的所有數(shù)據(jù),重命名內(nèi)存中緩存的數(shù)據(jù)的主鍵并將內(nèi)存中緩存的所述目標(biāo)表的所有數(shù)據(jù)寫入所述目標(biāo)庫中的目標(biāo)表。具體地,例如使用表達(dá)式altertable(?<before>.+?)rename(?<after>.+)可以匹配出一個(gè)alter事件的ddl是否是重命名表名操作,對(duì)于該事件的同步,是讀出目標(biāo)表中來自源表的所有數(shù)據(jù),緩存在內(nèi)存中,然后刪除目標(biāo)表中的數(shù)據(jù),最后將內(nèi)存中的數(shù)據(jù)修改rowkey(主鍵)后寫回目標(biāo)表。其中,刪除主鍵必須與添加主鍵成對(duì)出現(xiàn),可視為修改主鍵,僅刪除主鍵的情況下,將停止對(duì)操作表進(jìn)行同步。例如,使用正則表達(dá)式dropprimarykey匹配出是否與刪除主鍵的操作成對(duì)出現(xiàn),若是,則使用正則表達(dá)式add(?<irrelevant>.+?)primarykey((?<key>.+?))匹配出添加主鍵的操作。于本實(shí)施例中,所述同步模塊120還可以包括:第一處理表單元,用于建立與所述目標(biāo)表的結(jié)構(gòu)相同的第一數(shù)據(jù)處理表,所述第一數(shù)據(jù)處理表從用于記錄所述目標(biāo)表中預(yù)設(shè)時(shí)刻的每條記錄的額外表中讀取數(shù)據(jù)。具體地,例如:所述第一處理表單元建立用于記錄目標(biāo)表中每天最后一秒狀態(tài)的每條記錄的額外表,并建立與所述目標(biāo)表的schema相同的hive表,所述hive表從用于記錄所述目標(biāo)表中預(yù)設(shè)時(shí)刻的每條記錄的額外表中讀取數(shù)據(jù)。對(duì)于新建的一張表,通過刷新映射關(guān)系的方式來獲得新建的表與目標(biāo)表的映射關(guān)系。于本實(shí)施例中,所述檢測模塊130用于在所述同步模塊120進(jìn)行同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻并檢測所述操作時(shí)刻是否為預(yù)設(shè)時(shí)刻。所述快照模塊140用于響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照。例如,所述快照單元122在消費(fèi)每一條日志時(shí),在00:00:00后第一時(shí)間建立hbase主表的快照,精確的保存每一個(gè)hbase主表新一天尚未發(fā)生任何變更時(shí)的狀態(tài)(在00:00:00時(shí)暫停同步的步驟,先快照,所以可以精確到具體的時(shí)刻)。所以本實(shí)施例的數(shù)據(jù)同步系統(tǒng)100可以實(shí)時(shí)或最大限度的保證目標(biāo)表的數(shù)據(jù)與源表的數(shù)據(jù)一致性,而且可以保存目標(biāo)表每條記錄在每天最后時(shí)刻的狀態(tài)。本發(fā)明的實(shí)施例還提供了一種數(shù)據(jù)同步設(shè)備,包括處理器和存儲(chǔ)器,所述處理器為包括中央處理器、微處理器、數(shù)字信號(hào)處理器以及其他處理芯片的任一一種或幾種;所述存儲(chǔ)器可包括高速隨機(jī)存取存儲(chǔ)器,并且還可包括非易失性存儲(chǔ)器,例如一個(gè)或多個(gè)磁盤存儲(chǔ)設(shè)備、閃存設(shè)備或其他非易失性固態(tài)存儲(chǔ)設(shè)備。所述存儲(chǔ)器存儲(chǔ)有程序指令,所述處理器運(yùn)行各種存儲(chǔ)在存儲(chǔ)器中的軟件程序和/或指令集,所述處理器運(yùn)行程序指令,執(zhí)行:將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫,所述目標(biāo)庫與所述源庫異構(gòu)。對(duì)所述源庫的增量數(shù)據(jù)操作進(jìn)行同步處理并在進(jìn)行所述同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻。檢測所述操作時(shí)刻是否為預(yù)設(shè)時(shí)刻,若是則響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照,若否,則返回繼續(xù)執(zhí)行:對(duì)所述源庫的增量數(shù)據(jù)操作進(jìn)行同步處理并在進(jìn)行所述同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻。本發(fā)明的實(shí)施例提供了一種存儲(chǔ)器,其上存儲(chǔ)有機(jī)器可讀程序指令,該所述機(jī)器可讀程序指令運(yùn)行時(shí)執(zhí)行:將源庫中當(dāng)前時(shí)刻的數(shù)據(jù)傳輸?shù)侥繕?biāo)庫,所述目標(biāo)庫與所述源庫異構(gòu)。對(duì)所述源庫的增量數(shù)據(jù)操作進(jìn)行同步處理并在進(jìn)行所述同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻。檢測所述操作時(shí)刻是否為預(yù)設(shè)時(shí)刻,若是則響應(yīng)于檢測到所述操作時(shí)刻為所述預(yù)設(shè)時(shí)刻,建立所述目標(biāo)庫中的目標(biāo)表的快照,若否,則返回繼續(xù)執(zhí)行:對(duì)所述源庫的增量數(shù)據(jù)操作進(jìn)行同步處理并在進(jìn)行所述同步處理時(shí)檢測所述增量數(shù)據(jù)操作的操作時(shí)刻。以下以圖例說明本實(shí)施例的同步效果。如圖7至圖8所示,圖7顯示為初始化時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖8顯示為初始化時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖9和圖10所示,圖9顯示為插入兩條數(shù)據(jù)時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖10顯示為插入兩條數(shù)據(jù)時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖11和圖12所示,圖11顯示為更新第5條記錄的name和gender字段時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖12顯示為更新第5條記錄的name和gender字段時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖13和圖14所示,圖13顯示為刪除id為4的數(shù)據(jù)時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖14顯示為刪除id為4的數(shù)據(jù)時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖15和圖16所示,圖15顯示為將update_time字段重命名為modify_time時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖16顯示為將update_time字段重命名為modify_time時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖17和圖18所示,圖17顯示為刪除字段modify_time時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖18顯示為刪除字段modify_time時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖19和圖20所示,圖19顯示為添加字段p_id時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖20顯示為添加字段p_id時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖21和圖22所示,圖21顯示為修改字段主鍵id為多字段主鍵id和p_id時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖22顯示為修改字段主鍵id為多字段主鍵id和p_id時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖23和圖24所示,圖23顯示為修改多字段主鍵為單字段主鍵時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖24顯示為修改多字段主鍵為單字段主鍵時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。如圖25和圖26所示,圖25顯示為將student表重名為stu時(shí)mysql數(shù)據(jù)的狀態(tài)示意圖,圖26顯示為將student表重名為stu時(shí)hbase數(shù)據(jù)對(duì)應(yīng)的狀態(tài)示意圖。綜上所述,本發(fā)明實(shí)施例可以實(shí)時(shí)或最大限度的保證目標(biāo)庫中目標(biāo)表的數(shù)據(jù)與源庫中源表的數(shù)據(jù)一致性,而且可以保存目標(biāo)庫中目標(biāo)表每條記錄在預(yù)設(shè)時(shí)刻的狀態(tài)。所以,本發(fā)明有效克服了現(xiàn)有技術(shù)中的種種缺點(diǎn)而具高度產(chǎn)業(yè)利用價(jià)值。上述實(shí)施例僅例示性說明本發(fā)明的原理及其功效,而非用于限制本發(fā)明。任何熟悉此技術(shù)的人士皆可在不違背本發(fā)明的精神及范疇下,對(duì)上述實(shí)施例進(jìn)行修飾或改變。因此,舉凡所屬
技術(shù)領(lǐng)域
:中包括通常知識(shí)者在未脫離本發(fā)明所揭示的精神與技術(shù)思想下所完成的一切等效修飾或改變,仍應(yīng)由本發(fā)明的權(quán)利要求所涵蓋。當(dāng)前第1頁12當(dāng)前第1頁12
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評(píng)論。精彩留言會(huì)獲得點(diǎn)贊!
1
苍山县| 乐陵市| 固阳县| 宜兰县| 左贡县| 万宁市| 长宁区| 镇安县| 同仁县| 平阳县| 鹤峰县| 巴林左旗| 巴林右旗| 梨树县| 英德市| 安新县| 承德县| 通城县| 太白县| 县级市| 蓬安县| 西安市| 双牌县| 新沂市| 洪泽县| 中卫市| 鄂托克旗| 贵阳市| 鄂伦春自治旗| 泸西县| 秭归县| 珠海市| 石河子市| 麟游县| 连江县| 双江| 永新县| 永新县| 巴林左旗| 竹北市| 阳谷县|