TWI728641B - 兩層式多執行緒之資料庫移轉及比對系統及方法 - Google Patents
兩層式多執行緒之資料庫移轉及比對系統及方法 Download PDFInfo
- Publication number
- TWI728641B TWI728641B TW109100334A TW109100334A TWI728641B TW I728641 B TWI728641 B TW I728641B TW 109100334 A TW109100334 A TW 109100334A TW 109100334 A TW109100334 A TW 109100334A TW I728641 B TWI728641 B TW I728641B
- Authority
- TW
- Taiwan
- Prior art keywords
- data
- execution
- threaded
- script
- comparison
- Prior art date
Links
Images
Landscapes
- Stored Programmes (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本發明提供一種兩層式多執行緒之資料庫移轉及比對系統及方法。由於標的系統(例如:帳務及訂單)資料量龐大且隨時會有新增異動的情形,因此服務暫停時間不能太久。而本發明實施例的兩層式多執行緒執行模組可將工作任務依輸入參數分配給多隻執行緒並同時執行資料讀取,再依據輸入參數啟動這些執行緒以同時進行資料轉換及寫入或比對作業。此外,處理結果可進一步提供給相關人員或執行資料修補。藉此,可即時完成資料庫移轉作業。
Description
本發明是關於資料庫相關技術,且特別是有關於一種多執行緒之資料庫移轉及比對系統及方法。
在現有技術中,特定資料庫本身或許有提供匯出匯入功能,但與資料庫耦合度極高(僅限於處理特定資料庫),且無法單獨運作,更遑論平台可攜。市面上常見資料庫工具的匯出匯入功能,只能處理少量的資料且效能不佳。在現今使用的資料庫移轉比對方法中,每增加一種資料表格移轉,都必須修改程式。不僅無法快速開發且不易維護。此外,每當批次處理發生錯誤,作業即需要全部重新開始。若欲將作業加快處理,則需要多啟動幾隻作業。然而,這樣的處理方式在作業完成後仍需要人工彙總執行數據,啟動越多則彙總工程浩大,且過程中無法清楚掌握執行狀況。
由此可見,上述習用方式仍有諸多缺失,實非一良善之設計,而亟待加以改良。
本發明實施例之目的之一即在於提供一種快速處理及開發之資料庫移轉及比對系統。由於標的系統(例如:帳務及訂單)資料量龐大且隨時會有新增異動,服務暫停時間不能太久,故設計出兩層式多執行緒之方法及系統。其執行模組:在第一層將工作任務依輸入參數分配至多隻執行緒以同時執行資料讀取;在第二層再依輸入參數啟動這些執行緒以同時進行資料轉換及寫入或比對。本發明實施例易於視來源端和標的端的資源狀況分別設定適當的執行緒數目,資源即可充分利用且所有作業可快速處理。採用Java語言(但不僅限於此語言)設計具備平台可攜性,且以撰寫設定取代程式開發,不僅適用於固網訂單和帳務資料庫或系統移轉及比對,其他系統移轉均可適用。例如,應用於雲端服務,亦能發揮其功效。
本發明實施例之另一目的在於提供一種能掌握系統即時運作狀況之資料庫移轉及比對系統及方法。由於本發明實施例是採用多執行緒,物件共用後可較省記憶體並可彙整資訊。執行過程中,本系統可隨時彙集結果寫入執行紀錄,失敗會將資料寫成修補用資料及錯誤紀錄(可供快速修補資料)。使用者可隨時由系統提供的統計查詢網頁了解執行狀況。此外,當作業執行結束,系統可自動將相關紀錄及統計數字彙總並發送電子郵件(E-mail)或其他訊息給啟動者。當轉檔結果是有失敗發生時,可不用全部資料砍掉重新轉入,且失敗的原始資料有保留下來可直接拿來修補,本發明實施例是利用修補用資料來針對失敗資料重新轉入即可。在作業執行中,如使用者有需要,作業可隨時暫停,且系統會保留執行狀態,並可隨時中斷續行。
為讓本發明的上述特徵和優點能更明顯易懂,下文特舉實施例,並配合所附圖式作詳細說明如下。
本發明實施例提出兩層式多執行緒之資料庫移轉及比對系統,主要是利用兩次多執行緒之分工彙整等方法以達成快速且正確處理完畢之目的。系統可採用Java語言設計,以具備平台可攜性,且以撰寫設定取代程式開發,可增加軟、硬體靈活度。本發明實施例不僅適用於固網訂單和帳務資料庫或系統移轉及比對,其他系統移轉均可適用。
請參閱第1圖,圖1為依據本發明一實施例的兩層式多執行緒之資料庫移轉及比對系統100之架構圖。為了增加系統彈性,系統100中各模組所使用之參數可依據系統參數設定52之設定來產生。本系統100僅載入記憶體一份共用,以節省資源及提昇效能;如有修改,各模組提供有記憶體立即重載入之功能。系統100的主要設定包括有:各Java 命名與目錄介面(Java Naming and Directory Interface,JNDI)代號和資料來源(DataSource)對應集合、環境代號、造字區間集合、目的端編碼、中文的JNDI代號集合、文字編碼轉換(例如:UnicodeToBig5)對映集合、IgnoreDiff對照集合、需預先取序號表格集合、轉換規則集合、各網頁參數預設值(例如:分工隻數、每隻啟動等候間隔時間、每隻執行緒數...)、統計查詢選單及其展開項目與擷取結構化查詢語言(Structure Query Language,SQL)集合、郵件伺服器(MailServer)…等。
本系統100包括但限於兩層式多執行緒執行模組1、資料切割模組2、資料修補模組3、轉換規則設定4、一個或更多個底層共用元件5、及結果統計查詢模組6。這些模組1、2、3、5、及6可能藉由諸如桌上型電腦、筆記型電腦、伺服器、智慧型手機、平板電腦等電子裝置實現,也可能是軟體模組/應用程式形式。而轉換規則設定4可能是任何類型的文件、或特定語言檔案。
為了方便理解本發明的操作流程,以下將舉諸多實施例詳細說明。下文中,將搭配圖1中系統100中各模組或元件說明本發明實施例所述之方法。本方法的各個流程可依照實施情形而隨之調整,且並不僅限於此。
圖2是依據本發明一實施例的兩層式多執行緒資料庫移轉及比對方法的流程圖。請參照圖2,兩層式多執行緒執行模組1可將工作任務依輸入參數分配給一隻或多隻執行緒(步驟S210),透過底層共用元件5的某一執行功能而使用資料切割模組2所切割好的執行區間的執行腳本檔11,以在各執行緒中同時讀取不同之來源端資料(步驟S220)。接著,兩層式多執行緒執行模組1再依輸入參數啟動那些執行緒(步驟S230),在各執行緒中利用轉換規則設定4並透過底層共用元件5的另一執行功能對讀取的那筆資料(下稱讀取資料)同時進行資料轉換作業且寫入標的相關資料表51或比對(步驟S240)。兩層式多執行緒執行模組1可即時記錄並收集作業對應的處理結果(步驟S250),並反應於處理結果失敗而依據資料產生修補用資料(例如:xml檔形式)12及相關資料表51中的錯誤紀錄。使用者可隨時由結果統計查詢模組6提供的網頁了解執行狀況。若作業中發生失敗,即可利用資料修補模組3產製修補用的執行腳本檔11以供修補用資料12先進行錯誤修補作業。視需求,作業可隨時暫停。反應於作業暫停,兩層式多執行緒執行模組1可透過底層共用元件5的又一執行功能產生剩餘待處理之新的執行腳本檔11保留狀態,可以供後續自暫停處續行(即隨時可續跑)。待執行結束後,系統100可自動透過底層共用元件5的再一執行功能而將相關紀錄及統計數字彙整並發送通知(例如:e-mail、簡訊、推播通知等)給啟動者及/或相關人員。
此外,帳務資料表(可作為前述讀取的資料)動則幾千萬筆、甚至幾億筆,無法一次全部載入記憶體,且必須切割區間處理。資料切割模組2可輸入:設定樣板、切割項目起迄、每一分割區間數量、輸出執行腳本檔名等資訊,即可透過底層共用元件5的一執行功能產製兩層式多執行緒執行模組1執行用之切割區間執行腳本檔11。而針對整個資料庫(可作為前述讀取的資料)都要轉檔者更可產製腳本用之表格檔21 (例如:Excel等形式),且此表格檔記錄須轉入的表格及其唯一鍵之組成欄位等資訊。資料切割模組2即可透過底層共用元件5的一執行功能自動查出資料表相關資訊,從而產製兩層式多執行緒執行模組1所需要執行腳本檔11的機制。
轉換作業執行時難免會遭遇不可控制因素(例如:連線時間Time Out等),以造成少許資料異常。帳務資料表動則幾千萬筆、甚至幾億筆,資料修補模組3和兩層式多執行緒執行模組1可基於失敗發生時所寫出之相關資料表51中的錯誤紀錄,並透過底層共用元件5產製修補資料用的執行腳本檔11給兩層式多執行緒執行模組1執行,利用修補用資料檔12完成資料修補,即可無須重新進行完整的轉換作業(即,無須轉換作業全部重跑)。
轉換規則設定4 是利用既有的泛用式異質資料轉換比對物件(即,轉換規則設定4相關於異質資料之間的轉換規則)。兩層式多執行緒執行模組1經載入轉換規則設定4後,即可將讀取的來源資料轉換成標的資料表所需的內容,或將兩個以上資料來源轉換再進行比對。針對有轉換規則的案件,非常適合使用此機制來進行轉檔(比對)。不僅可簡化作業,更能加速開發且易維護。例如:帳務系統屬此類作業。
然而,既有物件未有資料表寫入功能,更須另外撰寫泛用式資料表(單筆模式、整批模式)寫入函數。Oracle9i BIG5中文造字欄位查詢和寫入均需加工處理,無法使用其既有比對功能,亦須另外撰寫函數才能適用。此外,既有物件有設定的欄位才會進行轉換,對整個資料庫移轉且不用轉換的案件並不適用,除非改寫此既有物件。對於不須轉換之轉檔比對,將轉換設定為關鍵字(例如:bypass),兩層式多執行緒執行模組1針對此種bypass轉換設定可直接呼叫底層共用元件5提供之泛用式資料表(加工模式)寫入和比對函數。例如:訂單系統MySQL(UTF-8)轉Oracle9i(BIG5)屬此類。
本系統100可提供各模組所需功能,並產製成底層共用元件5來給這些模組共用。藉此,開發者可輕鬆維護執行功能並可加速開發速度。底層共用元件5的執行功能例如是標的資料表寫入、來源資料表之擷取、檔案存取、XML存取、系統表格存取、通知發送、排程等。更值得注意的是,標的資料表寫入可採泛用式設計,並提供下列三種模式函數,即可涵蓋所有標的資料表寫入需求:單筆模式、整批模式、加工模式。加工模式:例如:訂單系統MySQL(UTF-8)轉Oracle9i(BIG5)適用此類;增加對照表轉換、中文造字等判斷寫入標的資料庫前加工處理(且儲存造字欄位資訊,以提供比對前查詢標的資料庫資料表時加工處理使用)。
另,針對全資料庫移轉無轉換規則之比對,例如:訂單系統MySQL(UTF-8)轉Oracle9i(BIG5),則提供有泛用式之資料準備及比對函數。
結果統計查詢模組6可利用系統參數設定52以產生查詢輸入及結果畫面(可以網頁、或其他使用者介面)且可連接不同的資料來源(源自相關資料表51)。結果統計查詢模組6可快速產製兩層式多執行緒執行模組1各次轉檔比對結果查詢功能、以及轉檔比對之來源端與輸出端各資料表查詢功能,並透過網頁或其他使用者介面以供使用者查詢。
以下再分別就本系統100中各主要模組之細部功能說明:
兩層式多執行緒執行模組1可經配置用以執行,其主要步驟如下:
1、假設輸入參數為預約排程(依輸入參數排定排程,並透過底層共用元件5寫入相關資料表51的系統表格中預約時間/人員/作業/執行緒等資訊,以利查詢);
2、啟動執行時,透過底層共用元件5先取執行相關資料表51中的旗標;若無法取得旗標,則代表此工作任務已在執行中,則透過底層共用元件5寫入紀錄檔物件及相關資料表51中的錯誤紀錄後結束;
3、將資料切割模組2所切割好資料區間的執行腳本檔11,先透過底層共用元件5依據關鍵字(例如:執行腳本檔11的名稱)寫入腳本池(例如:相關資料表51的資料庫表格),如有異常,則透過底層共用元件5寫紀錄檔物件及錯誤紀錄;
4、若無異常,可依輸入的分工參數啟動多隻分工執行緒來平行處理;每隻分工執行緒迴圈執行如下:
(1)透過底層共用元件5檢查有無設定停止旗標;若有,則寫入紀錄檔物件及相關資料表51中的錯誤紀錄後跳出;
(2)透過底層共用元件5使用關鍵字(例如:執行腳本檔11的名稱)至相關資料表51中的腳本池找尋待處理腳本並改狀態為處理中;若已無資料結束跳出;
(3)檢查此筆腳本物件是否有註解關鍵字(例如:第一欄註記#),透過底層共用元件將腳本池中相關資料表51中的此筆腳本狀態修改為已處理後,跳下一筆繼續;
(4)轉檔工作任務有些資料表有順序性,分工也必須一起,因此腳本寫成一筆,中間用字串例如以\N區隔;將此筆腳本物件,先依據區隔符號分開;
接著,步驟(4)再逐筆執行以下步驟:
I、檢查如空行,跳下一筆繼續;
II、取出腳本參數內容,以一般比對設定為例,說明如下:
-s fB1,fB1 -t trdb_err@TRDB -m map -c compErrtype -d select code pk,e.* from blmtrdb:code_errtype e;select code pk,e.* from blmtrdb_qc:code_errtype e
包括有:
甲、-s 來源(檔案路徑或資料來源(DataSource)):可多筆,區隔如逗號,如範例之fB1,fB1;
乙、-t 標的(檔案路徑或資料表及DataSource) 如範例之trdb_err@TRDB;
丙、-m 資料格式參數:例如: list、map、Xml (nonAttribute)等,系統會依據所設定參數,進行對應的處理,將資料表或XML內容載入對應格式的內部物件,來源為dataSource之比對需設定為map,來源為dataSource之轉檔需設定為list;
丁、-c 轉換設定檔名:例如:compErrtype、trCmAccount等,比對慣用comp開頭(如範例中之compErrtype),轉檔慣用tr開頭,不用轉換需設定為bypass;及
戊、-d 來源資料擷取指令:可多筆,區隔字符如分號,如範例之select code pk,e.* from blmtrdb:code_errtype e;select code pk,e.* from blmtrdb_qc:code_errtype e;
III、檢查且若缺少必要參數,則透過底層共用元件5寫入紀錄檔物件及相關資料表51中的錯誤紀錄51,並跳下一筆繼續;
IV、依每筆設定之來源設定、資料格式、來源資料擷取指令,並透過底層共用元件5先取得所有來源資料;當資料格式、及來源資料擷取指令比來源個數少時,使用第一個內容補齊;來源資料會依據此筆腳本設定資料格式存成不同形式的物件,若設定成list、map、或xml,則每筆來源資料存成Map,每筆切割區間資料存成List;其中,當設定成map,還會依照其來源資料擷取指令所設定的欄位別名為pk_之資料內容對齊做成Map,故為兩層Map的List;
V、當來源資料擷取指令查詢沒有符合條件資料,將此筆腳本物件第一欄前加關鍵字註記(例如:#X),並跳出;
VI、否則,透過底層共用元件5先寫入相關資料表中51此筆的執行紀錄(例如:包括序號、轉換規則設定或(不用轉換者)資料表、總筆數、起時、執行腳本檔的名稱、啟動者、執行緒資訊、若有擷取來源資料指令也填入至執行紀錄);
VII、若檢查到資料格式設定為list(排除修補和比對)且此標的資料表檢查系統參數設定52需預先取序號表格集合中有設定者,透過底層共用元件5預先取出切割間筆數整批的序號;如此,(後續啟動多執行緒平行)寫入時則依List位置對應直接帶入序號,可節省多次從資料庫取序號之執行時間;
VIII、依輸入執行緒參數啟動多執行緒平行處理;由於來源資料僅讀取,故多執行緒會共用一份,以節省記憶體;
各執行緒依照啟動順序編號和來源資料筆數,兩層式多執行緒執行模組1計算出負責處理的資料物件起迄位置(id),並逐筆處理以下步驟:
i、透過底層共用元件5檢查到若有設定立即中斷旗標,則中斷執行;
ii、資料格式設定為list且此標的相關資料表51檢查系統參數52有設定需取序號者,則第id筆資料,帶入第id筆序號;
iii、轉換設定非bypass者,依據所撰寫之轉換規則設定4進行轉換和比對後,透過所設定的底層共用元件5中的泛用式資料表(單筆或整批模式)寫入函數寫入相關資料表51的標的資料庫;
iv、轉換設定bypass者,透過底層共用元件5中的泛用式資料表(加工模式)寫入函數寫入相關資料表51的標的資料庫,並透過泛用式比對函數進行比對;以訂單系統MySQL(UTF-8)轉Oracle9i(BIG5)為例,其步驟如下:
甲、轉檔(例如:腳本檔名非comp開頭)透過底層共用元件5 泛用式資料表(加工模式)寫入函數寫入標的資料庫51;
乙、比對(例如:腳本檔名comp開頭)透過底層共用元件5泛用式之準備資料函數群準備比對資料;
丙、非只轉檔不比對(例如:腳本檔名結尾非NoComp),因資料表有些沒有唯一鍵,用取得資料筆數作迴圈:透過底層共用元件5泛用式之比對函數進行比對,找到一筆相同則跳出迴圈(全部都不相同才算不一致);
v、更新區域變數包括有:執行/成功/失敗筆數、記錄檔資訊、輸出資訊、修補資訊等物件,失敗則立即透過底層共用元件5寫入相關資料表51的錯誤紀錄51;
各(第二層)執行緒結束前,將其區域變數寫入輸出物件回傳;
IX、(第一層分工執行緒)收集平行處理結果,彙集各執行緒輸出物件之資訊,更新紀錄檔等物件,透過底層共用元件5更新相關資料表51中執行紀錄之迄時、成功/失敗筆數,有輸出資料檔寫輸出檔,有修補用資料寫修補資料檔12;
X、如成功0筆且失敗筆數大於標準值時,設定失敗率超標停止旗標,停止執行跳出;
XI、將此筆執行過腳本物件第一欄前,加關鍵字註記(例如:#);
(5)透過底層共用元件5更新此筆相關資料表51的腳本內容,並將狀態修改為已處理,若修改狀態失敗則寫紀錄檔物件後跳出;
(6)若失敗率超標旗標有被設定為真,則停止執行且跳出分工執行緒之迴圈;
各(第一層)分工執行緒結束前,將其區域變數(包括有:紀錄檔和執行紀錄序號等物件)寫入輸出物件後返回;
5. 如正常分工執行,兩層式多執行緒執行模組1透過底層共用元件5彙集各分工執行緒之執行紀錄檔物件輸出紀錄檔、彙集各分工執行緒之執行紀錄序號查詢相關執行紀錄和錯誤紀錄、產製更新後剩餘執行腳本檔11;
6、兩層式多執行緒執行模組1透過底層共用元件5將相關紀錄檔、更新後剩餘腳本、統計數字彙總、錯誤分類及明細一併發送通知(例如:mail、簡訊或推播)給啟動者及相關人員並清除相關資料表51中腳本池的資料;
7、全部工作任務執行結束前,兩層式多執行緒執行模組1透過底層共用元件5先釋放相關資料表51中的執行旗標再結束。
使用者可隨時經由結果統計查詢模組6所提供的網頁而透過底層共用元件5查詢所寫入的相關資料表51(例如:執行紀錄、錯誤紀錄、執行旗標、腳本池及標的資料表...),以了解目前本模組之執行狀況。
作業仍在執行中,失敗資料即可利用資料修補模組4透過底層共用元件5產製執行腳本檔11,再使用兩層式多執行緒執行模組1踢錯時產生修補用資料12以執行兩層式多執行緒執行模組1前述步驟且同時進行修補。
如有需要,只須設定停止旗標(例如:腳本設定名.stop或AllJobStop...檔案),即可暫停兩層式多執行緒執行模組1之執行中作業。作業結束前會產生執行後剩餘新的執行腳本檔11以保留狀態;後續如要繼續執行,透過兩層式多執行緒執行模組1所產生之新執行腳本檔11,可隨時接續執行該作業。
兩層式多執行緒執行模組1使用執行腳本檔11的檔名關鍵字區分作業。若執行轉檔,則檔名用關鍵字(例如:tr)開頭。若執行比對,則檔名用關鍵字(例如:comp)開頭。轉檔後,如有少數資料失敗(不確定是否已轉入),執行前需多檢查有無資料及處理者:欲執行資料修補,則檔名用關鍵字(例如:repair)開頭。
另,針對資料無轉換處理設定bypass者,檔名用關鍵字(例如:tr)開頭,除了執行轉檔之外,轉入後會馬上查出比對。如只轉檔而不比對,檔名可用關鍵字(例如:NoComp)結尾。此外,由於來源和標的資料表欄位都相同,其所設定的SQL只設定來源DB(目的端擷取指令由系統自動產生),此為特例(範例示意如下):
-s fO -t main.accounts@fO_O -m list -c bypass -d select concat(ifnull(Accountno,'')) pk_,'accountno' pkfield_,c.* from main.accounts c LIMIT 0,50000
資料切割模組2的詳細執行步驟如下:由於帳務資料表動則幾千萬筆、甚至幾億筆,無法一次全部載入記憶體,必須切割區間處理;資料切割模組2的執行步驟方式大致分兩類(以下兩段分別說明這兩類)。
輸入設定樣板、切割項目起迄、每一區間數量、輸出執行腳本檔名等資訊,即可依據所輸入檔名參數產製執行腳本;其處理方法扼要說明如下:輸入之設定樣板SQL的起迄區間條件先用符號替代(例如:&1和&2),資料切割模組2依據輸入之切割項目起迄計算出之數量除以每區間數量迴圈處理:置換SQL中的&1和&2,加上換行符號寫入寫檔物件;迴圈結束後,透過底層共用元件5依據輸入檔名產製執行腳本檔11於系統設定參數52所設定的兩層式多執行緒執行模組1腳本路徑下。
針對整個資料庫都要轉檔者,更要產製腳本用表格檔21(表列須轉入的表格及其PK等資訊);系統讀取表格檔21所記載資訊後,透過底層共用元件5查出資料表筆數,並透過底層共用元件5產製兩層式多執行緒執行模組1所需要之切割區間執行腳本檔11的機制。
資料修補模組3的詳細執行步驟如下:執行時難免不可控制因素(例如:連線時間逾時(Time Out)),從而發生少許資料異常。由於帳務資料表動則幾千萬筆、甚至幾億筆,因此利用兩層式多執行緒執行模組1失敗發生時所寫出之錯誤紀錄,資料修補模組3可透過底層共用元件5產製修補資料用的執行腳本檔11給兩層式多執行緒執行模組1。藉此,可利用修補用資料12完成資料修補,即無須全部流程重新開始。
當系統異常時發生大量失敗,資料重轉後可利用資料修補模組3之資料刪除機制進行錯誤紀錄及執行紀錄清除,其處理方法扼要說明如下:輸入要砍的id(例如:107946、102374、102367、102364、102362…);依輸入id筆數逐一迴圈處理:透過底層共用元件5刪除每個id之錯誤紀錄及執行紀錄;迴圈結束後,即可完成資料清理。
轉換規則設定4的詳細執行步驟如下:利用既有的泛用式異質資料轉換比對物件,撰寫設定即可進行比對;對於有轉換規則的案件,非常適合使用此機制來進行轉檔(比對),可簡化並加速開發且易維護,例如:帳務系統屬此類。本發明另提供快速的撰寫設定及檢查方法,扼要說明如下:從轉換規則的分析文件Word拷貝來源欄名、標的欄名、和轉換規則等資料到電子試算表軟體(例如:Excel);利用電子試算表軟體(例如:Excel)調整成所要用的順序及格式;拷貝到文書編輯軟體(例如:notepat++)去空白(用途大致如下:將分析文件所列所有來源欄名撰寫成查詢指令,並執行確認避免分析筆誤;組成設定所需內容;標的欄位限制不得空白(null)做成物件來檢查;標的資料表寫入整批處理模式時,撰寫腳本(script)函式來產製SQL(例如:setSqls物件));將相關內容貼到xml樣板,即可完成轉檔比對。藉此,一個最複雜的案件不到一天即可開發完成。
圖3是依據本發明一實施例的轉換規則設定產製方法的流程圖。請參照圖3,系統100分析文件(步驟S310),利用Excel調整成所要用的順序及格式(步驟S320),對內容去空白(步驟S330),將去空白的內容貼在Xml樣板(步驟S340),且進行轉檔比對(步驟S350)。
底層共用元件5的詳細執行步驟如下:本系統100中各模組所需共同執行功能都透過此底層共用元件5提供。例如:標的資料表寫入、來源資料表之擷取、系統表格存取、檔案及Xml存取、通知機制、排程等。
各模組所使用之函數(即,執行功能)舉例說明如下。
資料表寫入函數:採取泛用式設計,故可涵蓋所有標的資料表寫入需求,且大致可區分三種模式(單筆模式、整批模式、加工模式)。
單筆模式:傳入兩物件(代號report(報告)和data(資料));
從data物件中讀出PK(唯一鍵)的內容 (例如:資料結構為Map時其Key值(關鍵)為pk_者)分配(assign)給report物件的當前識別碼(currentId)項目;檢查標的項目是否有@,若無,寫入錯誤紀錄,並回傳錯誤結束;自標的項分離出表格名稱和Java 命名與目錄介面(Java Naming and Directory Interface,JNDI)代號;讀取data物件中所有的key迴圈處理:非特定符號結尾(例如:_)則將key 和value(值)加到產生新增SQL的相關變數中;迴圈結束後將相關變數組出新增指令並透過泛用式SQL寫入函數執行SQL;如新增失敗用關鍵字(例如:delsql_)讀取data物件中產生刪除指令需要的資訊,產生刪除指令並透過泛用式SQL寫入函數執行刪除後,再執行新增一次;如有失敗發生擷取錯誤原因、分析錯誤種類,透過錯誤紀錄新增函數寫錯誤紀錄;將成功或失敗資訊更新至report物件後,回傳結果結束。
整批模式:傳入兩物件(代號report和data);從data物件中讀出PK(例如:Map中Key為pk_者)assign(分配)給report物件的currentId;檢查標的項目是否有@,若無,寫錯誤紀錄,回傳錯誤結束;從標的項分離出表格名稱和JNDI代號;如果data物件中有關鍵字(例如:subdel_),取出value置換成查詢指令,透過泛用式SQL查詢函數執行,如有資料將其value加入執行指令物件;如果data物件中有關鍵字(例如:delsql_),取出value置換成查詢指令,透過泛用式SQL查詢函數執行,如有資料將其value加入執行指令物件;從data物件中讀出序號(例如:Map中Key為seq_者),其value用區隔符號(例如:\t)拆解成多筆;讀取data物件中所有的key迴圈處理:非特定符號結尾(例如:_)則將key 和value加到產生新增SQL的相關變數中;迴圈結束後將相關變數組出新增指令;從data物件中讀出筆數(例如:Map中Key為amt_者)迴圈執行{例如:data物件有序號關鍵字(例如:seq_)新增指令需先用拆解後的序號置換後,再用區隔符號(例如:;)拆解後再加入執行指令物件;如果data物件中有關鍵字(例如:subset[n]_),如有序號關鍵字(例如:seq_)其value需先用拆解後的序號置換後,再用區隔符號(例如:;)拆解後再加入執行指令物件}透過泛用式整批SQL寫入函數執行所產生執行指令物件中所有SQL;如有失敗發生擷取錯誤原因、分析錯誤種類,透過錯誤紀錄新增函數寫錯誤紀錄;將成功或失敗資訊更新至report物件回傳後結束。
加工模式:例如:訂單系統MySQL(UTF-8)轉Oracle9i(BIG5)適用此類增加對照表轉換、中文造字等判斷寫入標的資料庫前加工處理(並存含造字欄位資訊提供比對前查詢標的資料庫資料表時加工處理使用)。其流程如下:傳入兩物件(代號report和data);從data物件中讀出PK(唯一鍵)的內容(例如:Map中Key值為pk_者)assign給report物件的currentId;檢查標的項目是否有@,若無,寫錯誤紀錄,回傳錯誤結束;從標的項分離出表格名稱和JNDI代號;檢查是否為修補(例如:檔名repair開頭),用data物件中關鍵字(pkfield_唯一鍵組成欄位資訊)組出刪除指令:先用區隔符號(例如:,)拆解後,用此物件當作key迴圈處理:取出data物件中相關項目的value加以組合成刪除指令;完成後,比照慣例使用關鍵字(例如:delsql_)加入data物件;讀取data物件中所有的key迴圈處理:特定符號結尾(例如:_)不需處理;判斷是日期欄位且value非空值,value加上日期轉換函數;非日期欄位且value非空值,檢查如包含有列在UnicodeToBig5對照表中字元,須置換這些字元;如果value有包含造字,將key加入至含造字欄位物件中,value需轉成十六進為(Hex)再包進轉換函數(例如稱為UTL_RAW.cast_to_varchar2(hextoraw()))中;將key和value加到產生新增SQL的相關變數中;迴圈結束後將相關變數組出新增指令並透過泛用式SQL寫入函數執行SQL;如新增失敗用關鍵字(例如:delsql_)讀取data物件中產生刪除指令需要的資訊,產生刪除指令並透過泛用式SQL寫入函數執行刪除後,再執行新增一次;如有失敗發生擷取錯誤原因、分析錯誤種類,透過錯誤紀錄新增函數寫錯誤紀錄;將成功或失敗資訊更新至report物件後,回傳結果結束。
泛用式SQL存取之共用函數,舉例說明如下。
SQL寫入函數:傳入設定代號、JNDI代號、SQL;
用設定代號、JNDI代號取出系統設定參數52之JNDI建立連線;如有異常回傳失敗結果;否則執行SQL;回傳更新筆數和處理結果。
整批SQL寫入函數:傳入設定代號、DB(資料庫)代號、SQL集合;用設定代號、DB代號取出系統設定參數52之JNDI建立連線;
如有異常回傳失敗結果;否則,迴圈逐筆執行SQL;結束回傳更新筆數和處理結果。
整批SQL交易寫入函數(適用於腳本整批新增):傳入設定代號、DB代號、SQL集合;用設定代號、DB代號取出系統參數52之JNDI建立連線;如有異常回傳失敗結果;否則,啟動交易,整批執行SQL集合;如無異常則提交(commit),更新筆數給1;異常則回滾(rollback);結束回傳更新筆數和處理結果。
SQL查詢函數:因應各種使用情境提供以下多種查詢,包括有:回傳List>Map>String(字串), Object(物件)>>、回傳List>String[]>且List第一筆為所有資料項目名稱(適用於網頁查詢)、回傳List>Map>String, Object>> Object轉成String及依據系統設定參數52轉碼(適用於新系統中文碼8859-1比對)、回傳字串(取一筆)(適用於轉換規則設定>一般案例>使用)、回傳字串(可輸入是否全取及指令是否轉碼)(適用於轉換規則設定>複雜案例>使用)。
另,針對轉換規則之比對,第二筆以上的資料先依pk(唯一鍵)項目的內容做成map,再和第一筆資料對齊;例如:帳務系統比對資料用PK(唯一鍵)項目的內容對齊。
而針對全資料庫移轉無轉換規則之比對,例如:訂單系統MySQL(UTF-8)轉Oracle9i(BIG5),則提供有資料準備及比對函數。這些函數例如有泛用式之資料準備函數(造字欄位取得、函數轉入標的資料取得函數)、泛用式之比對函數等。
系統表格存取之共用函數,例如:執行旗標(旗標取得函數、旗標釋放函數)、執行紀錄(執行紀錄新增函數、執行紀錄更新函數)、錯誤紀錄(錯誤紀錄新增函數、錯誤紀錄(不轉碼)新增函數、錯誤原因處理函數)、腳本池(腳本整批新增函數、取出待處理腳本函數、腳本更新函數、產製更新後剩餘腳本)。
檔案及Xml存取之共用函數,例如有(檔案讀取函數、檔案寫入函數、Xml讀取函數。
訊息通知機制之共用函數:將轉檔跑的數據統計/錯誤類型及明細/還沒跑完的腳本/詳細日誌(LOG)當成附檔,並一同寄送給執行者和相關人員。其方法扼要說明如下:Mail Server可取自系統設定參數52;正本人員用使用者編號,透過底層共用元件5查詢相關資料表51中的系統表格以取得郵件地址來設定;副本人員設定直屬主管及系統管理者;如果有錯誤發生將訊息前面加上『請注意:』,最後面補充新腳本檔名,把新腳本和紀錄檔加到附件;由於執行紀錄和錯誤紀錄在訂單系統是用Mysql帳務系統資料庫管理系統是用 Informix,所使用的語法有差異將其作成系統參數設定52,取出後把執行序號最小的和腳本檔名變數替換後;依區隔號(例如:;)切開迴圈處理:透過底層共用元件5擷取資料和寫成逗號分隔值(csv);全部csv加到附檔;本文最前面加上環境資訊、腳本檔名、執行緒,最後面再加上『 (本信件為系統發送, 請勿直接回覆) 』;發送電子郵件。
結果統計查詢模組6的詳細執行步驟如下:利用系統參數設定52即可產生查詢輸入及結果畫面且可連接不同的資料來源(相關資料表51)。利用此結果統計查詢模組6可快速產製兩層式多執行緒執行模組1各次轉檔比對結果查詢功能,以及轉檔比對之來源端與輸出端各資料表查詢功能(可透過網頁形式呈現)。圖4A及圖4B是一範例說明查詢功能及其結果。圖5A及圖5B是另一範例說明查詢功能及其結果。圖6是再一範例說明查詢功能及其結果。圖4A~6中各查詢結果圖的是查詢指令擷取出來的內容,表格第一列英文是查詢指令的所查之資料表欄名或欄位別名(例如,CUSTNO、CUSTNAME、CERTIFID、EMPLOYEEID、MAJACCTNUM、CUSTOMERPPID、CREDIT、REGISTERZIPCODE、REGISTERADDRESS、DEFAULTBILLCYC、pid、id、run_time、total、error、success、range、start_time、end_time)。
特點及功效
本發明實施例所提供之兩層式多執行緒之資料庫移轉及比對系統及方法,與其他習用技術相互比較時,更具備下列優點:
1.本發明實施例可大幅提高資料庫移轉速度,提供較佳的系統移轉品質。
2.本發明實施例可降低人事成本,更可確保資料移轉之正確性及迅速性而提高系統移轉效率,其經濟效益非常明顯。
雖然本發明已以實施例揭露如上,然其並非用以限定本發明,任何所屬技術領域中具有通常知識者,在不脫離本發明的精神和範圍內,當可作些許的更動與潤飾,故本發明的保護範圍當視後附的申請專利範圍所界定者為準。
100:兩層式多執行緒之資料庫移轉及比對系統
1:兩層式多執行緒執行模組
11:執行腳本檔
12:修補用資料
2:資料切割模組
21:表格檔
3:資料修補模組
4:轉換規則設定
5:底層共用元件
51:相關資料表
52:系統參數設定
6:結果統計查詢模組
S210~S250、S310~S350:步驟
CUSTNO、CUSTNAME、CERTIFID、EMPLOYEEID、MAJACCTNUM、CUSTOMERPPID、CREDIT、REGISTERZIPCODE、REGISTERADDRESS、DEFAULTBILLCYC、pid、id、run_time、total、error、success、range、start_time、end_time:欄名或欄位別名
圖1為依據本發明一實施例的兩層式多執行緒資料庫移轉及比對系統之架構圖。
圖2是依據本發明一實施例的兩層式多執行緒資料庫移轉及比對方法的流程圖。
圖3是依據本發明一實施例的轉換規則設定產製方法的流程圖。
圖4A及圖4B是一範例說明查詢功能及其結果。
圖5A及圖5B是另一範例說明查詢功能及其結果。
圖6是再一範例說明查詢功能及其結果。
S210~S250:步驟
Claims (8)
- 一種兩層式多執行緒之資料庫移轉及比對系統,其中包括:至少一底層共用元件,提供多個模組共用至少一執行功能;以及一兩層式多執行緒執行模組,將一工作任務依據輸入參數分配給至少一執行緒,在各該執行緒中透過該至少一底層共用元件的一該執行功能讀取不同之來源端資料,再依據輸入參數啟動該至少一執行緒,在各該執行緒中利用一轉換規則設定並透過該至少一底層共用元件的另一該執行功能對讀取資料進行資料轉換作業且寫入標的資料表或比對,並記錄該資料轉換作業對應的一處理結果,反應於作業暫停,該兩層式多執行緒執行模組透過該至少一底層共用元件的又一該執行功能產生剩餘待處理之新腳本保留狀態,以供後續自暫停處續行。
- 如申請專利範圍第1項所述的兩層式多執行緒之資料庫移轉及比對系統,其中該轉換規則設定相關於異質資料之間的轉換規則,該兩層式多執行緒執行模組並經載入該轉換規則設定後,將該讀取資料轉換成該標的資料表所需的內容,或將至少二資料來源轉換再進行比對。
- 如申請專利範圍第1項所述的兩層式多執行緒之資料庫移轉及比對系統,更包括: 一資料修補模組,其中反應於該處理結果為失敗,兩層式多執行緒執行模組依據該資料產生一修補用資料及一錯誤紀錄,且該資料修補模組產製一修補腳本以供對該修補用資料進行錯誤修補作業。
- 如申請專利範圍第1項所述的兩層式多執行緒之資料庫移轉及比對系統,更包括:一資料切割模組,透過該至少一底層共用元件的再一執行功能產製該兩層式多執行緒執行模組執行所用的一切割區間腳本,其中該切割區間腳本相關於將該筆資料分配至多個切割區間的規則。
- 一種兩層式多執行緒之資料庫移轉及比對方法,包括:將一工作任務依據輸入參數分配給至少一執行緒;在各該執行緒中透過至少一底層共用元件的一執行功能讀取不同之來源端資料;依據輸入參數啟動該少一執行緒;在各該執行緒中利用一轉換規則設定並透過該至少一底層共用元件的另一該執行功能對讀取資料進行資料轉換作業且寫入標的資料表或比對;記錄該資料轉換作業對應的一處理結果;以及反應於作業暫停,透過該至少一底層共用元件的又一該執行功能產生剩餘待處理之新腳本保留狀態,以供後續自暫停處續行。
- 如申請專利範圍第5項所述的兩層式多執行緒之資料庫移轉及比對方法,其中該轉換規則設定相關於異質資料之間的轉換規則,且進行資料轉換作業的步驟包括:經載入該轉換規則設定後,將該讀取資料轉換成該標的資料表所需的內容,或將至少二資料來源轉換再進行比對。
- 如申請專利範圍第5項所述的兩層式多執行緒之資料庫移轉及比對方法,其中記錄該資料轉換作業對應的該處理結果的步驟之後,更包括:反應於該處理結果為失敗,依據該資料產生一修補用資料及一錯誤紀錄;以及產製一修補腳本以供對該修補用資料進行錯誤修補作業。
- 如申請專利範圍第5項所述的兩層式多執行緒之資料庫移轉及比對方法,更包括:透過該至少一底層共用元件的再一執行功能產製一切割區間腳本,其中該切割區間腳本相關於將該筆資料分配至多個切割區間的規則。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW109100334A TWI728641B (zh) | 2020-01-06 | 2020-01-06 | 兩層式多執行緒之資料庫移轉及比對系統及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
TW109100334A TWI728641B (zh) | 2020-01-06 | 2020-01-06 | 兩層式多執行緒之資料庫移轉及比對系統及方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
TWI728641B true TWI728641B (zh) | 2021-05-21 |
TW202127273A TW202127273A (zh) | 2021-07-16 |
Family
ID=77036694
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
TW109100334A TWI728641B (zh) | 2020-01-06 | 2020-01-06 | 兩層式多執行緒之資料庫移轉及比對系統及方法 |
Country Status (1)
Country | Link |
---|---|
TW (1) | TWI728641B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030055890A1 (en) * | 2001-08-27 | 2003-03-20 | Shigeya Senda | Information processing system |
CN102591725A (zh) * | 2011-12-20 | 2012-07-18 | 浙江鸿程计算机系统有限公司 | 一种异构数据库之间多线程数据交换的方法 |
TW201337605A (zh) * | 2012-03-15 | 2013-09-16 | Long-Hwa Teng | 多用途網路編輯頁面自動轉檔技術 |
CN107133327A (zh) * | 2017-05-05 | 2017-09-05 | 合肥智圣系统集成有限公司 | 一种支持多数据类型的数据交换方法及系统 |
-
2020
- 2020-01-06 TW TW109100334A patent/TWI728641B/zh active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20030055890A1 (en) * | 2001-08-27 | 2003-03-20 | Shigeya Senda | Information processing system |
CN102591725A (zh) * | 2011-12-20 | 2012-07-18 | 浙江鸿程计算机系统有限公司 | 一种异构数据库之间多线程数据交换的方法 |
TW201337605A (zh) * | 2012-03-15 | 2013-09-16 | Long-Hwa Teng | 多用途網路編輯頁面自動轉檔技術 |
CN107133327A (zh) * | 2017-05-05 | 2017-09-05 | 合肥智圣系统集成有限公司 | 一种支持多数据类型的数据交换方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
TW202127273A (zh) | 2021-07-16 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7007275B1 (en) | Method and apparatus for automatic execution of concatenated methods across multiple heterogeneous data sources | |
US6697835B1 (en) | Method and apparatus for high speed parallel execution of multiple points of logic across heterogeneous data sources | |
Casati et al. | Deriving active rules for workflow enactment | |
US10101991B2 (en) | Managing a software-patch submission queue | |
CN105243528A (zh) | 大数据环境下金融it系统中图形化集中对账系统与方法 | |
CN110908641B (zh) | 基于可视化的流计算平台、方法、设备和存储介质 | |
WO2020238130A1 (zh) | 一种大数据日志监控方法及装置、存储介质和计算机设备 | |
JP2017515180A (ja) | ビッグ・データ・リポジトリにおけるデータ・セットの処理 | |
KR20060045622A (ko) | 컴퓨터화된 재무 시스템의 추출, 변환 및 로딩 설계자 모듈 | |
CN103514223A (zh) | 一种数据仓库数据同步方法和系统 | |
CN111324610A (zh) | 一种数据同步的方法及装置 | |
US20060129609A1 (en) | Database synchronization using change log | |
WO2019109854A1 (zh) | 分布式数据库数据处理方法、装置、存储介质及电子装置 | |
CN115374102A (zh) | 数据处理方法及系统 | |
CN111367681A (zh) | 面向云计算集群的高负载状态下的桥梁设计系统 | |
CN112379884A (zh) | 基于Spark和并行内存计算的流程引擎实现方法及系统 | |
Vershinin et al. | Performance analysis of PostgreSQL, MySQL, microsoft SQL server systems based on TPC-H tests | |
CN111782671A (zh) | 一种基于分布式数据库实现cdc的优化方法 | |
US20070033178A1 (en) | Quality of service feedback for technology-neutral data reporting | |
TWI728641B (zh) | 兩層式多執行緒之資料庫移轉及比對系統及方法 | |
Azez et al. | JOUM: an indexing methodology for improving join in hive star schema | |
CN116450246A (zh) | 一种基于状态机的事件流转可配置方法 | |
Zhao et al. | MapReduce model-based optimization of range queries | |
CN113032385B (zh) | 一种易扩展可配置化的数据备份系统及方法 | |
CN113779215A (zh) | 数据处理平台 |