DataX:實現不同數據庫數據同步

jopen 10年前發布 | 36K 次閱讀 DataX

目前成熟的數據導入導出工具比較多,但是一般都只能用于數據導入或者導出,并且只能支持一個或者幾個特定類型的數據庫。這樣帶來的一個問題是,如果 擁有很多不同類型的數據庫/文件系統(Mysql/Oracle/Rac/Hive/Other…),并且經常需要在它們之間導入導出數據,那么我們可能 需要開發/維護/學習使用一批這樣的工具(jdbcdump/dbloader/multithread/getmerge+sqlloader /mysqldumper…)。而且以后每增加一種庫類型,需要的工具數目將線性增長。這些工具有些使用文件中轉數據,有些使用管道,不同程度的為數據中 轉帶來額外開銷,效率差別很非常大。很多工具也無法滿足ETL任務中常見的需求,比如日期格式轉化,特性字符的轉化,編碼轉換。另外,有些時候,我們希望 在一個很短的時間窗口內,將一份數據從一個數據庫同時導出到多個不同類型的數據庫。 DataX正是為了解決這些問題而生。DataX是一個在異構的數據庫/文件系統之間高速交換數據的工具,實現了在任意的數據處理系統(RDBMS /Hdfs/Local filesystem)之間的數據交換,由淘寶數據平臺部門完成。

 DataX:實現不同數據庫數據同步

DataX特點

  • 在異構的數據庫/文件系統之間高速交換數據
  • 采用Framework + plugin架構構建,Framework處理了緩沖,流控,并發,上下文加載等高速數據交換的大部分技術問題,提供了簡單的接口與插件交互,插件僅需實現對數據處理系統的訪問
  • 運行模式:stand-alone
  • 數據傳輸過程在單進程內完成,全內存操作,不讀寫磁盤,也沒有IPC
  • 開放式的框架,開發者可以在極短的時間開發一個新插件以快速支持新的數據庫/文件系統。
  • </ul>

    DataX結構模式(框架+插件)

     DataX:實現不同數據庫數據同步

    • Job: 一道數據同步作業
    • Splitter: 作業切分模塊,將一個大任務與分解成多個可以并發的小任務.
    • Sub-job: 數據同步作業切分后的小任務
    • Reader(Loader): 數據讀入模塊,負責運行切分后的小任務,將數據從源頭裝載入DataX
    • Storage: Reader和Writer通過Storage交換數據
    • Writer(Dumper): 數據寫出模塊,負責將數據從DataX導入至目的數據地
    • </ul>

      DataX框架內部通過雙緩沖隊列、線程池封裝等技術,集中處理了高速數據交換遇到的問題,提供簡單的接口與插件交互,插件分為Reader和 Writer兩類,基于框架提供的插件接口,可以十分便捷的開發出需要的插件。比如想要從oracle導出數據到mysql,那么需要做的就是開發出 OracleReader和MysqlWriter插件,裝配到框架上即可。并且這樣的插件一般情況下在其他數據交換場合是可以通用的。更大的驚喜是我們 已經開發了如下插件:

      Reader插件

      • hdfsreader : 支持從hdfs文件系統獲取數據。
      • mysqlreader: 支持從mysql數據庫獲取數據。
      • sqlserverreader: 支持從sqlserver數據庫獲取數據。
      • oraclereader : 支持從oracle數據庫獲取數據。
      • streamreader: 支持從stream流獲取數據(常用于測試)
      • httpreader : 支持從http URL獲取數據。
      • </ul>

        Writer插件

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!