點擊藍字 關注我們
一
前言
數據同步平臺是在ABAP中開發的一個數據同步工具,類似于LTRC,通過配置實現任意兩個數據庫的數據同步(ABAP需要配置相關的外部數據庫連接).
數據同步平臺的底層通過調用ADBC類實現遠程數據庫的讀取,寫入.
本文主要介紹數據平臺的并發執行改進
二
關于并發執行
并發執行指把要處理的數據分成多份,調用系統多個進程同時執行.
并發執行原理
詳見連接無峰,公眾號:ABAP 技巧與實戰ABAP基礎知識 并發執行(一 概念及相關知識)
三
數據同步平臺的并發執行改進
基于并發執行的原理, 需要對數據同步平臺執行如下改造
分解數據
封裝RFC函數
繼承并發類
改造主程序
01
分解數據
數據同步同步平臺按照配置條目分解數據, ZTSYNC_C1中的每個配置條目就是一個最小執行單元.
針對大表處理的特例: 可以通過分組字段(圖一)把一個配置行虛擬拆解成多個配置行. 這些虛擬的配置行也是一個最小執行單元
數據同步平臺的大表處理
詳見鏈接無峰,公眾號:ABAP 技巧與實戰SAP工具箱 數據同步平臺(四 大表處理改進)
圖一
分組字段
分組字段用于大數據量同步時,對源表數據通過指定的字段分組(請不要使用數量字段)
分組字段允許維護多個字段,通過逗號分隔. 示例: BUKRS,WERKS 表示通過字段 BUKRS 和 WERKS分組
處理方式
10. 使用實例字段.先構造統計查詢 SELECT BUKRS,WERKS,COUNT( * ) FROM <表> GROUP BY BUKRS,WERKS
? 比如獲取了
BUKRS WERKS COUNT
1000 1001 10
1000? 1002? 11
1001 2001 20
20. 把獲取的每條記錄構造成一個主表過濾條件 BUKRS = '1000' AND WERKS = '1001'? . 通過不同的過濾條件把配置拆分成3個部分.
30. 這樣每個部分的配置是這個表的子集合.
40. 這些虛擬的配置不會保存下來. 每次執行時自動劃分.
每次執行時,如果存在分組字段, 則自動動態的構造這些配置,把一份數據傳輸拆分成多份.
如果參與分組的字段是日期字段,可以通過補充
-Y? 表示使用年份
-YM 表示使用年加月分組
-M? 表示使用月份分組
-D? 按天參與分組
實例: DATUM-Y,BUKRS 表示使用DATUM 字段獲取年份與公司代碼分組
? ? ? DATUM-YM 表示使用年+月份分組
? ? ? DATUM-M? 表示使用月份分組
02
封裝RFC函數
把同步數據的主要功能封裝在函數 Z_BC_SYNC_ARFC 中. 以便主程序調用的并發類通過ARFC的方式調用.
圖二
03
繼承并發類
繼承并發類ZCL_PARA_ARFC_CALL 創建新的類?
ZCL_PARA_ARFC_CALL_SYNC
重定義方法
CALL_FUNC? 調用函數(子類需要重寫該方法中的函數調用部分,復制父類代碼調整部分內容)
CALLBACK? ? 回調方法(子類需要重寫該方法中的函數返回部分,復制父類代碼調整部分內容)
04
改造主程序
基于并發類ZCL_PARA_ARFC_CALL改造.
詳細過程詳見鏈接無峰,公眾號:ABAP 技巧與實戰SAP工具箱 并發執行(二 封裝類)
四
通過并發快速完成大表同步
對于數據量較大的表的同步,可以按照如下步驟處理
01
配置大表分組
為大表同步配置分組字段,啟用的分組字段盡量能夠均勻的把數據拆分成若干等分.
圖三
02
并發執行
如圖四. 啟用20個進程并發處理大表. 大概10秒鐘后, 可以處理完成. 如圖五 可以看出總共處理了 210萬條記錄. 加總的耗時? 206秒 因為這個總計時間是 20個進程的執行時間匯總. 理論實際執行時間= 206/20 = 10 秒 大致等同于實際耗時.
圖四
圖五
五
總結
對數據同步平臺的并發執行改進使用了之前封裝的并發執行類 ZCL_PARA_ARFC_CALL. 簡單改造程序后,測試直接通過. 進一步驗證了并發執行類的完整性. 后續對耗時比較長的程序都可以使用這個類進行并發改造.
感興趣的讀者可以在鏈接文章的末尾找到并發類及測試程序的獲取方式
鏈接文章無峰,公眾號:ABAP 技巧與實戰SAP工具箱 并發執行(二 封裝類)
THE
END