日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

datax 持续数据同步_采用DataX实现多表增量数据同步

發布時間:2023/12/3 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 datax 持续数据同步_采用DataX实现多表增量数据同步 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

這兩天驗證了一下阿里的DataX數據同步工具,覺得DataX可以用來做管理數據的多級數據同步。DataX用來做批量數據遷移很適合,能夠保證數據的一致性,性能也很好,結合時間戳字段,用來實現數據定時增量同步也是可以的,如每分鐘或每5分鐘增量同步一次數據。用DataX這個方案做增量同步要求每個表帶一個時間戳字段,刪除數據采用邏輯刪除,這個要求也比較容易做到。

增量同步實現

實現增量同步需要在表中增加一個時間戳字段,如update_time,在同步配置文件中,通過where條件,根據時間戳字段篩選當前時間向前一段時間內的增量數據。{

"job":?{

"content":?[

{

"reader":?{

"name":?"mysqlreader",

"parameter":?{

"column":?[

"doc_id","title","file_path","approval_id","page_count","version"

],

"connection":?[

{

"jdbcUrl":?["jdbc:mysql://192.168.81.1:3306/bootdo?useUnicode=true&characterEncoding=utf8"],

"table":?["es_approval_doc"]

}

],

"password":?"123456",

"username":?"root",

"where":?"version?>?FROM_UNIXTIME(${start_time})?and?version?

}

},

"writer":?{

"name":?"mysqlwriter",

"parameter":?{

"column":?[

"doc_id","title","file_path","approval_id","page_count","version"

],

"writeMode":"update",

"connection":?[

{

"jdbcUrl":?"jdbc:mysql://192.168.81.1:3306/bootdo?useUnicode=true&characterEncoding=utf8",

"table":?["es_approval_doc_copy"]

}

],

"password":?"123456",

"username":?"root"

}

}

}

],

"setting":?{

"speed":?{

"channel":?"1"

}

}

}

}

json文件中,${start_time}和${end_time}為調用datax.py時傳入的參數。

如datax/bin/datax.py?../../mysql2mysql.json?-p?"-Dstart_time=1546337137?-Dend_time=1546337237"

定時同步實現

定時同步可以采用操作系統的定時任務+shell腳本實現。以下為在linux系統中的方案:

1、編寫shell腳本,命名為syntask.sh:#!/bin/bash

#?source?/etc/profile

#?截至時間設置為當前時間戳

end_time=$(date?+%s)

#?開始時間設置為120s前時間戳

start_time=$(($end_time?-?120))

#?datax/bin/datax.py?../../mysql2mysql.json?-p?"-Dstart_time=$start_time?-Dend_time=$end_time"

這里通過腳本獲取用于篩選條件中的開始時間start_time和結束時間end_time,將兩個時間作為參數傳給datax.py。

2、在crontab中,添加任務計劃:

$crontab -e*?*/1?*?*?*?/syntask.sh

DataX不適合實時數據同步或太頻繁的定時同步,因為同步都需要去讀取源表,頻率過大對源表會造成壓力。

此外,最好每次增量同步的時間段比定時任務時間間隔大一些,以保證所有時間產生的數據都被覆蓋到。

異常情況下的補救措施:

如果某段時間內由于服務器、操作系統、網絡等原因造成某個時間段內數據沒有正常同步,那么可以通過手動執行同步的方式進行補救,執行同步時,將篩選的時間段加大大覆蓋異常發生的整個時間段。

多表同步實現

通常我們的業務系統存在有多個表,表之間有外鍵關系。為實現多表的數據同步,我們需要理清外鍵依賴關系,為每個表分別編寫json同步配置文件,并按外鍵依賴關系逐個調用datax.py。

如對于主表es_approval和子表es_approval_doc,可以對應寫兩個json配置文件:mysql2mysql-approval.json和mysql2mysql-approval-doc.json,在syntask.sh中先調用主表配置文件,再調用子表配置文件。#!/bin/bash

source?/etc/profile

#?截至時間設置為當前時間戳

end_time=$(date?+%s)

#?開始時間設置為120s前時間戳

start_time=$(($end_time?-?3600))

/datax/bin/datax.py?/mysql2mysql-approval.json?-p?"-Dstart_time=$start_time?-Dend_time=$end_time"

/datax/bin/datax.py?/mysql2mysql-approval-doc.json?-p?"-Dstart_time=$start_time?-Dend_time=$end_time"

多級多路同步

要實現多級同步,可以在每兩級之間搭建一個datax實例實現這兩級之間的數據同步。

要實現多路同步,可以為同一個表編寫多個配置文件,向多個目標庫同步。

總結

以上是生活随笔為你收集整理的datax 持续数据同步_采用DataX实现多表增量数据同步的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。