一般的業(yè)務開發(fā),不會涉及到多種數(shù)據(jù)庫類型的操作。因為,無論是對于開發(fā),還是運維,成本都是非常高的。如果是ORACLE數(shù)據(jù)庫到MYSQL的數(shù)據(jù)備份,目前我所了解的開源解決方案有2種:
A:基于linkedin的databus方案(低延時變化數(shù)據(jù)捕獲系統(tǒng))https://github.com/linkedin/databus
B:使用阿里的yugong項目(數(shù)據(jù)庫遷移 (目前主要支持oracle -> mysql/DRDS))https://github.com/alibaba/yugong
由于時間關(guān)系,databus的我沒有花時間研究(道聽途說是目前性能最強的),主要學習了yuyong,總體來說,簡單易懂。
架構(gòu)如下

說明:
1 一個Jvm Container對應多個instance,每個instance對應于一張表的遷移任務
2 instance分為三部分
a. extractor (從源數(shù)據(jù)庫上提取數(shù)據(jù),可分為全量/增量實現(xiàn))
b. translator (將源庫上的數(shù)據(jù)按照目標庫的需求進行自定義轉(zhuǎn)化)
c. applier (將數(shù)據(jù)更新到目標庫,可分為全量/增量/對比的實現(xiàn))
以上,是它官網(wǎng)的說明。如果你還不明白,我來簡單用另外一個圖來解釋一下。

其實,你仔細看的話,實際上就是對我們真正要如何做數(shù)據(jù)遷移進行了抽象,所以,有了這個認識之后,你再去理解這個東西,就會上手快一些。實際上,真正需要寫代碼的地方就在translator這一塊。有且僅在你的源表與目標表字段,名稱,類型不一致的時候。比如像這樣。
1 字段名稱不一樣

2 類型不一樣

3 新增字段

小提示:
1 表名與類的映射定義
yugong.table.white=t_sync_ee_122jq
類名就是這樣:TSyncEe122jqDataTranslator
2 數(shù)據(jù)轉(zhuǎn)換的類得放在com.taobao.yugong.translator下面,源碼里面會讀這個包下面的類文件。
我的微信公眾號,歡迎溝通學習。
