跨域同步數據2.0方案思路分享
背景: 不同網段(比如源數據庫在外網,目標數據庫在內網),不能直接通訊,但需要做到數據同步;
- 跨域增量同步數據方案2.0
- 增量數據同步解決方案:(不同網段(內網和外網不能直接通訊))
- 通過獲取增量數據,並生成目標庫寫入表的insert語句;
- 目標庫需提前生成目標庫寫入表表信息;
- 目標庫通過sftp下載商城的insert語句,在目標庫批量執行寫入;
- 注意:跨域增量同步數據方案2.0,採取的是通過子作業(子job)來控制的循環生成sql文件,而不是通過js來判斷循環。通過js來控制循環沒有通過子作業來控制循環效率高;
注意點:
1. 如何獲取增量的數據,我是採取的通過源數據裏視圖的寫入方式,視圖通過條件來判斷只取增量的數據;
注意:1. 如何確保獲取的增量數據,定時獲取增量的數據?
CREATE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `demo1view` AS
select `phhdemo1`.`orderId` AS `orderId`,`phhdemo1`.`createOpeTime` AS `createOpeTime`,`phhdemo1`.`flag` AS `flag` from `phhdemo1`
where ((`phhdemo1`.`flag` = 1)
and (`phhdemo1`.`createOpeTime` > '2019-10-05 19:21:18'));
select date_sub(SYSDATE(),interval 1 day);
可以根據實際情況,讓增量視圖取前一天滿足條件的數據;
2. 期初數據做一次全量更新,可以採取直接導出導入的方式,先在目標庫裏生成一遍;
3. 如果做到生成目標庫相應表的insert語句?我是採取源數據庫和目標數據庫需存在相同表結構,表名稱的表,來確保生成的insert語句,可以在目標數據庫服務器下載insert語句後,可以直接執行;
注意:1. 目標庫需要提前做什麼?只需提前在目標庫裏新增需要寫入的表,需確保和源庫裏生成的insert文件的表結構保持一致的表
後續demo會考慮分享出來,大家感興趣的,可以持續關注我。
demo小樣效果圖:
截圖1:
截圖2:
截圖3:
截圖4:
此方案解決了跨域同步數據的問題!
後續會分享關於kettle集羣相關解決方案!和感興趣的同學共勉!