周啟凡,郭迎清,趙萬里,王 昆,孫 浩,陶欣昕
(1.西北工業(yè)大學(xué) 動(dòng)力與能源學(xué)院,陜西 西安 710129; 2.西安現(xiàn)代控制技術(shù)研究所,陜西 西安 710065)
高空臺(tái)是國(guó)家戰(zhàn)略性資源,高空模擬是自主研制先進(jìn)航空發(fā)動(dòng)機(jī)必不可少的重要手段和工具,一個(gè)國(guó)家的高空模擬能力和技術(shù)水平已成為該國(guó)自主研制先進(jìn)航空發(fā)動(dòng)機(jī)能力和水平的一個(gè)重要標(biāo)志[1]。高空模擬試驗(yàn)過程中,會(huì)利用各類傳感器測(cè)量試驗(yàn)設(shè)備參數(shù)數(shù)據(jù)信息,這些參數(shù)信息最終會(huì)存儲(chǔ)于歷史數(shù)據(jù)庫中(Oracle數(shù)據(jù)庫)[2]。為了供試驗(yàn)人員查看分析數(shù)據(jù)所蘊(yùn)含的內(nèi)在聯(lián)系和價(jià)值,需要將存儲(chǔ)于底層數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行數(shù)據(jù)挖掘與可視化展示,將各類傳感器測(cè)量參數(shù)直觀地呈現(xiàn)于前端界面中,供試驗(yàn)人員進(jìn)行對(duì)應(yīng)的技術(shù)操作;且為了不破壞歷史數(shù)據(jù)庫的封裝性和完整性,需要將后續(xù)用于各類算法的數(shù)據(jù)源從歷史數(shù)據(jù)庫中遷移至本地?cái)?shù)據(jù)庫中進(jìn)行數(shù)據(jù)處理,因此數(shù)據(jù)的可視化展示和數(shù)據(jù)流遷移技術(shù)的研究具有重要意義。
目前,我國(guó)某型高空臺(tái)能夠?qū)Χ喾N型號(hào)的發(fā)動(dòng)機(jī)進(jìn)行試驗(yàn)驗(yàn)證,但高空臺(tái)各個(gè)試驗(yàn)設(shè)備采集的原始數(shù)據(jù)僅存儲(chǔ)于歷史數(shù)據(jù)庫中,在需要用到的時(shí)候?qū)?shù)據(jù)庫進(jìn)行檢索,查詢相應(yīng)的數(shù)據(jù)信息,可視化、智能化水平不高[3],其深層利用價(jià)值并未得到開發(fā)。具體來說其數(shù)據(jù)價(jià)值利用的瓶頸主要體現(xiàn)在以下兩個(gè)方面:① 對(duì)數(shù)據(jù)的挖掘研究不夠深入,未對(duì)數(shù)據(jù)本身或各類數(shù)據(jù)關(guān)聯(lián)集之間所隱藏的各類信息進(jìn)行充分挖掘[4],發(fā)現(xiàn)其所包含的深層聯(lián)系和規(guī)律;② 數(shù)據(jù)在綜合管控平臺(tái)中的顯性化表達(dá)處于初級(jí)階段,在人機(jī)交互界面中只簡(jiǎn)單地展現(xiàn)了系統(tǒng)測(cè)得的有限原始數(shù)據(jù),操作人員獲取的數(shù)據(jù)價(jià)值有限且形式簡(jiǎn)單,在數(shù)據(jù)價(jià)值與數(shù)據(jù)展示直觀性上有待改進(jìn)。
在數(shù)據(jù)流遷移技術(shù)中,目前航空發(fā)動(dòng)機(jī)領(lǐng)域采用的數(shù)據(jù)流遷移技術(shù)主要包括3種:① 創(chuàng)建一個(gè)中間數(shù)據(jù)存儲(chǔ)單元[5],將本地所需數(shù)據(jù)源從歷史數(shù)據(jù)庫中取出并存入中間存儲(chǔ)單元中,再通過本地?cái)?shù)據(jù)庫讀取中間單元的數(shù)據(jù),實(shí)現(xiàn)數(shù)據(jù)源獲取;② 采用Oracle原生的觸發(fā)器模式[6],給定觸發(fā)條件,將歷史數(shù)據(jù)庫數(shù)據(jù)信息在觸發(fā)條件的作用下同步至本地?cái)?shù)據(jù)庫中;③ 通過TCP協(xié)議或動(dòng)態(tài)鏈接庫接口獲取歷史數(shù)據(jù)庫中的數(shù)據(jù)源信息[7]。在學(xué)術(shù)界與產(chǎn)業(yè)界中,數(shù)據(jù)流遷移技術(shù)處于平穩(wěn)發(fā)展階段,Delakis等[8]研究了段特征,進(jìn)而提出了一種可以解決異構(gòu)數(shù)據(jù)庫同步問題的段模型。針對(duì)異構(gòu)數(shù)據(jù)庫系統(tǒng)的hooking問題,Lehman等[9]提出了TSpaces,TSpaces是一種數(shù)據(jù)庫中間件,它通過研究和整合異構(gòu)數(shù)據(jù)庫系統(tǒng)的事務(wù)、數(shù)據(jù)訪問等特征解決異構(gòu)數(shù)據(jù)庫系統(tǒng)之間同步的通信問題;Yadav等[10]基于事務(wù)復(fù)制提出了一種分布式數(shù)據(jù)同步架構(gòu);Vassev[11]基于微軟消息隊(duì)列提出了一種解決企業(yè)多分支系統(tǒng)之間數(shù)據(jù)庫同步解決方案。
IBM公司提出了一種支持異構(gòu)數(shù)據(jù)庫之間透明訪問的連接方法,并研發(fā)了名為DB2 Data Joiner的數(shù)據(jù)庫同步中間件產(chǎn)品[12];SyBase通過在數(shù)據(jù)源節(jié)點(diǎn)運(yùn)行一個(gè)檢測(cè)數(shù)據(jù)庫日志的進(jìn)程,實(shí)現(xiàn)了數(shù)據(jù)的復(fù)制,研發(fā)了名為Enterprise Connect的數(shù)據(jù)庫同步中間件產(chǎn)品[9];為了實(shí)現(xiàn)異構(gòu)數(shù)據(jù)庫之間數(shù)據(jù)通信,Oracle 提出數(shù)據(jù)庫轉(zhuǎn)換器的概念,并直接收購了Golden Gate數(shù)據(jù)庫同步產(chǎn)品[13];DB2通過建立CCD表實(shí)現(xiàn)異構(gòu)復(fù)制,SQLSever提出了發(fā)布者訂閱者模式[14]。但是對(duì)于航空發(fā)動(dòng)機(jī)模擬試驗(yàn)臺(tái)采集的各傳感器測(cè)點(diǎn)數(shù)據(jù),因?yàn)槠渚哂熊姽ば袠I(yè)性質(zhì),追求的是數(shù)據(jù)的保密性、安全性和數(shù)據(jù)同步的實(shí)時(shí)性,目前在航空發(fā)動(dòng)機(jī)領(lǐng)域所采用的技術(shù),限制性較多,無法保證數(shù)據(jù)流遷移的實(shí)時(shí)性和封裝性。而利用產(chǎn)業(yè)領(lǐng)域的第三方開源軟件無法保證數(shù)據(jù)流遷移的保密性與安全性。
基于上述關(guān)于高空模擬試驗(yàn)臺(tái)數(shù)據(jù)可視化及數(shù)據(jù)流遷移所存在的不足,本文提出了基于多框架集成的航空發(fā)動(dòng)機(jī)高空模擬試驗(yàn)臺(tái)數(shù)據(jù)流實(shí)時(shí)遷移及可視化技術(shù),在高空模擬試驗(yàn)臺(tái)數(shù)據(jù)可視化部分采用基于MyBatis-Plus框架的自動(dòng)視圖層構(gòu)建技術(shù),將試驗(yàn)設(shè)備各傳感器參數(shù)信息清晰直觀地展示于Vue框架的瀏覽器端表結(jié)構(gòu)空間中,供試驗(yàn)人員查看和分析,在數(shù)據(jù)流遷移部分,采用了基于GateWay限流機(jī)制的JDBC接口模式及負(fù)載均衡機(jī)制的MyBatis框架模式,在保證數(shù)據(jù)流遷移的保密性和安全性的前提下,極大程度地縮短數(shù)據(jù)同步時(shí)間,滿足實(shí)時(shí)性要求。最終通過Vue框架的前端界面監(jiān)控?cái)?shù)據(jù)流同步的過程,并給出對(duì)應(yīng)的結(jié)論。
在高空模擬試驗(yàn)設(shè)備試驗(yàn)過程中,需要采集數(shù)百個(gè)字段名參數(shù)和數(shù)萬個(gè)測(cè)量點(diǎn)數(shù)據(jù),這些數(shù)據(jù)極其重要,為方便后續(xù)進(jìn)行數(shù)據(jù)分析、發(fā)動(dòng)機(jī)性能評(píng)估、智能化管理和控制,需要將采集的數(shù)據(jù)存儲(chǔ)起來,但是使用Excel或其他非關(guān)系型數(shù)據(jù)庫可能會(huì)導(dǎo)致數(shù)據(jù)覆蓋和丟失等問題,因此本文采用Oracle數(shù)據(jù)庫作為歷史數(shù)據(jù)庫和本地?cái)?shù)據(jù)庫的源數(shù)據(jù)庫,這是由于Oracle數(shù)據(jù)庫對(duì)于歷史數(shù)據(jù)的存儲(chǔ)、持久性和熱備份都有很好的優(yōu)勢(shì)[15]。Oracle的結(jié)構(gòu)主要包括兩部分,即實(shí)例結(jié)構(gòu)和數(shù)據(jù)庫系統(tǒng)。實(shí)例部分包括擴(kuò)展的JAVA操作池、共享池、日志緩沖池等,真正實(shí)現(xiàn)數(shù)據(jù)存儲(chǔ)的是Oracle數(shù)據(jù)庫系統(tǒng),Oracle的整體結(jié)構(gòu)和后續(xù)的數(shù)據(jù)流遷移流程如圖1所示。
在高空模擬試驗(yàn)設(shè)施運(yùn)行過程中,進(jìn)排氣系統(tǒng)、冷卻系統(tǒng)、發(fā)動(dòng)機(jī)參數(shù)等數(shù)據(jù)通過TCP采集,集中存儲(chǔ)在歷史數(shù)據(jù)庫(Oracle數(shù)據(jù)庫)中,如圖2所示。
圖2 測(cè)量參數(shù)采集原理圖
為了保持歷史數(shù)據(jù)庫的封裝性和完整性,后續(xù)基于數(shù)據(jù)的發(fā)動(dòng)機(jī)性能評(píng)估、異常數(shù)據(jù)處理和故障診斷分析都將在本地?cái)?shù)據(jù)庫中完成。該過程中涉及數(shù)據(jù)流的可視化展示與數(shù)據(jù)流遷移的技術(shù)點(diǎn)包括:數(shù)據(jù)流的可視化展示可以方便試驗(yàn)員對(duì)數(shù)據(jù)進(jìn)行查看分析,直觀地展示給相關(guān)人員;數(shù)據(jù)流的遷移功能可以在極大程度地保持歷史數(shù)據(jù)庫完整性的情況下,充分挖掘所需數(shù)據(jù)信息,作為后續(xù)各類算法研究的數(shù)據(jù)源,因此數(shù)據(jù)的可視化功能和遷移功能成為整個(gè)實(shí)驗(yàn)流程的關(guān)鍵。
針對(duì)航空發(fā)動(dòng)機(jī)高空模擬試驗(yàn)臺(tái)數(shù)據(jù)流遷移及可視化功能,本文主要闡述兩部分技術(shù)要點(diǎn):首先是數(shù)據(jù)流的可視化功能,該部分主要是將高空模擬試驗(yàn)臺(tái)設(shè)備的各類傳感器所測(cè)量的參數(shù),包括閥門開度數(shù)據(jù)、進(jìn)出口壓力及進(jìn)出口溫度等信息可視化地展現(xiàn)于瀏覽器端。主要涉及的技術(shù)組成包括后端的MyBatis-Plus框架模式、Spring MVC設(shè)計(jì)模式、跨域數(shù)據(jù)傳輸模式及前端的Vue框架模式、Element UI技術(shù)。數(shù)據(jù)流可視化流程如圖3所示。
其次是數(shù)據(jù)流的實(shí)時(shí)同步遷移功能,該部分的實(shí)現(xiàn)理念是將匯集于Oracle數(shù)據(jù)庫中的集合數(shù)據(jù)進(jìn)行數(shù)據(jù)提煉,因?yàn)镺racle數(shù)據(jù)庫中的數(shù)據(jù)未全部用于后續(xù)的故障診斷算法或?yàn)槠渌麑?shí)現(xiàn)提供數(shù)據(jù)源支持,且歷史數(shù)據(jù)庫一般不能進(jìn)行改變,直接操作歷史數(shù)據(jù)庫會(huì)破壞其封裝性,造成表結(jié)構(gòu)空間的改變、破壞數(shù)據(jù)的原子性。因此需要將部分需要利用的數(shù)據(jù)同步到本地?cái)?shù)據(jù)庫中。在同步的過程中,依據(jù)高空模擬試驗(yàn)臺(tái)測(cè)點(diǎn)參數(shù)數(shù)量級(jí)、測(cè)點(diǎn)參數(shù)字段名個(gè)數(shù)和同步時(shí)間的要求,主要采用3種方式:基于觸發(fā)條件的原生觸發(fā)器模式、基于GateWay限流機(jī)制的JDBC接口融合全量/增量模式和基于負(fù)載均衡機(jī)制的MyBatis框架融合多線程并行處理流模式,來針對(duì)不同的情況完成數(shù)據(jù)的遷移功能。該部分主要涉及的技術(shù)組成包括后端的MyBatis框架模式、JDBC接口模式、觸發(fā)器模式、負(fù)載均衡權(quán)選擇器模式、GateWay限流模式、Spring MVC設(shè)計(jì)模式、Spring Boot框架模式及前端的Vue框架模式、Element UI技術(shù)。數(shù)據(jù)流遷移整體流程如圖4所示。
圖4 數(shù)據(jù)流遷移整體流程
為了在航空發(fā)動(dòng)機(jī)高空模擬試驗(yàn)過程中,數(shù)據(jù)流可以可視化地呈現(xiàn)于瀏覽器端供試驗(yàn)人員查看和分析,而無須再從數(shù)據(jù)庫中查詢相關(guān)的數(shù)據(jù),則需要利用基于MyBatis-Plus 框架的自動(dòng)視圖層構(gòu)建可視化技術(shù)的支持,這個(gè)過程中涉及到多個(gè)框架的交互和數(shù)據(jù)流跨域傳輸?shù)年P(guān)鍵點(diǎn),首先介紹此技術(shù)中涉及的幾大類框架結(jié)構(gòu)及其功能。
(1) MyBatis-Plus框架。
MyBatis-Plus框架是用于Java與底層數(shù)據(jù)庫之間進(jìn)行數(shù)據(jù)交互與映射的高級(jí)框架模式,根據(jù)底層數(shù)據(jù)庫中所存在的數(shù)據(jù)類型及字段名名稱,構(gòu)建航空發(fā)動(dòng)機(jī)高空模擬試驗(yàn)臺(tái)實(shí)體類對(duì)象,實(shí)現(xiàn)BaseMapper接口后,完成自動(dòng)視圖層構(gòu)建程序,即可實(shí)現(xiàn)Spring MVC的三層遞進(jìn)結(jié)構(gòu)模式,自動(dòng)生成高空模擬試驗(yàn)臺(tái)實(shí)體類對(duì)象中的字段名屬性,這些字段名屬性與數(shù)據(jù)庫中對(duì)應(yīng)數(shù)據(jù)表的字段名名稱一一映射,操作程序即可修改或重新為字段名信息進(jìn)行賦值,利用MyBatis-Plus框架即可實(shí)現(xiàn)自動(dòng)數(shù)據(jù)查詢、修改和重置等功能,將數(shù)據(jù)表信息讀取到高空模擬實(shí)驗(yàn)臺(tái)實(shí)體類對(duì)象內(nèi)部,便于后續(xù)操作。
(2) Spring MVC設(shè)計(jì)模式。
Spring MVC設(shè)計(jì)模式,即Model(模型),View(視圖),Controller(控制器)三層結(jié)構(gòu)模式[16-17],采用循環(huán)依賴注入的邏輯,將視圖層注入模型中,并將封裝好的模型層注入前端控制器中,便可將數(shù)據(jù)在瀏覽器端展示,MyBatis-Plus的自動(dòng)視圖層構(gòu)建技術(shù)就用到了Spring MVC的三層遞進(jìn)結(jié)構(gòu)模式[18],分別對(duì)應(yīng)Repository層,Service層和Controller層。Repository層中編寫查詢高空模擬試驗(yàn)臺(tái)對(duì)應(yīng)表結(jié)構(gòu)空間中的數(shù)據(jù)的功能,將其注入到Service層中,實(shí)現(xiàn)對(duì)應(yīng)的接口及實(shí)現(xiàn)類,最終將Service層注入Controller層中,在瀏覽器中調(diào)用Controller層中的根目錄路徑,即可將數(shù)據(jù)呈現(xiàn)于瀏覽器中。
(3) 數(shù)據(jù)流跨域傳輸技術(shù)。
因?yàn)樽罱K需要呈現(xiàn)的高空模擬試驗(yàn)臺(tái)測(cè)量參數(shù)是在Vue框架對(duì)應(yīng)表結(jié)構(gòu)中,而Spring MVC設(shè)計(jì)模式中的Controller層是在給定根路徑下的瀏覽器端中呈現(xiàn)最終的數(shù)據(jù),想要將數(shù)據(jù)呈現(xiàn)于Vue框架下設(shè)定的表結(jié)構(gòu)中,則需要數(shù)據(jù)的跨域傳輸,在主程序中加入對(duì)于跨域請(qǐng)求GET、POST、DELETE、SELECT支持的屏蔽端口傳輸?shù)某绦蚣纯蓪?shí)現(xiàn)數(shù)據(jù)的跨域傳輸。
該過程的實(shí)現(xiàn)流程如下。
① 首先利用TCP協(xié)議,將傳感器測(cè)量的試驗(yàn)設(shè)備參數(shù)數(shù)據(jù)存儲(chǔ)于歷史數(shù)據(jù)庫中,試驗(yàn)參數(shù)主要包括閥門開度,進(jìn)出口壓力測(cè)量值,進(jìn)出口溫度測(cè)量值及時(shí)間戳等數(shù)據(jù)信息。
② 利用Java作為第三方語言操作數(shù)據(jù)庫,配置連接信息,給定驅(qū)動(dòng)及數(shù)據(jù)庫連接池信息,使得程序與歷史數(shù)據(jù)庫之間建立連接關(guān)系。
③ 創(chuàng)建航空發(fā)動(dòng)機(jī)高空模擬試驗(yàn)臺(tái)實(shí)體類對(duì)象,實(shí)現(xiàn)BaseMapper接口,自動(dòng)生成實(shí)體類對(duì)象內(nèi)部屬性值,與數(shù)據(jù)表字段名一一映射。自動(dòng)生成視圖層層遞進(jìn)邏輯關(guān)系,自動(dòng)生成數(shù)據(jù)表數(shù)據(jù)檢索功能,并將最終所獲取的數(shù)據(jù)表信息封裝于高空模擬試驗(yàn)臺(tái)實(shí)體類對(duì)象內(nèi)部,用于后續(xù)前端界面的展示。
④ 利用Vue框架,編寫屏蔽端口的跨域數(shù)據(jù)流傳輸程序,使得封裝于高空模擬試驗(yàn)臺(tái)內(nèi)部的數(shù)據(jù)信息可視化地呈現(xiàn)于Vue框架的瀏覽器端表結(jié)構(gòu)中,至此整個(gè)執(zhí)行流程完成。
最終呈現(xiàn)于Vue框架瀏覽器端表結(jié)構(gòu)中的數(shù)據(jù)信息如圖5所示。
圖5 高空模擬試驗(yàn)臺(tái)參數(shù)測(cè)量信息展示
因高空模擬試驗(yàn)臺(tái)在試驗(yàn)過程中所測(cè)量參數(shù)的保密性及重要性,利用基于觸發(fā)條件的原生觸發(fā)器模式和開源的數(shù)據(jù)流遷移技術(shù)無法保證數(shù)據(jù)的實(shí)時(shí)性及安全性,所以本文采用了基于GateWay限流機(jī)制下的JDBC接口融合全量/增量數(shù)據(jù)流遷移模式來實(shí)現(xiàn)數(shù)據(jù)實(shí)時(shí)同步的功能。
JDBC接口模式主要包括以下6部分:配置數(shù)據(jù)庫連接信息層、Druid數(shù)據(jù)源連接層、動(dòng)態(tài)SQL語句切換層、定時(shí)器任務(wù)層、GateWay限流機(jī)制層和最終的主程序。所有的功能最終集成于主程序中,以定時(shí)任務(wù)的形式不斷地將數(shù)據(jù)流進(jìn)行遷移,從而完成數(shù)據(jù)的同步功能,程序的執(zhí)行流程如圖6所示。
圖6 基于GateWay限流機(jī)制的JDBC接口模式程序執(zhí)行流程圖
首先配置.yml文件,包含歷史數(shù)據(jù)庫和本地?cái)?shù)據(jù)庫的所有配置信息;給定Druid數(shù)據(jù)源,初始化數(shù)據(jù)庫常量池的配置參數(shù),通過數(shù)據(jù)庫連接函數(shù)將配置文件內(nèi)的信息解析到定時(shí)程序中;設(shè)置定時(shí)器,使程序一直處于啟動(dòng)狀態(tài),給定刷新率。在定時(shí)程序執(zhí)行過程中,通過Map集合的鍵值對(duì)存儲(chǔ)高空臺(tái)試驗(yàn)編號(hào)和其對(duì)應(yīng)的數(shù)據(jù)表信息,通過動(dòng)態(tài)SQL指令,實(shí)現(xiàn)不同數(shù)據(jù)表的數(shù)據(jù)同步操作,最終將定時(shí)任務(wù)程序注入主程序邏輯中。當(dāng)有新的數(shù)據(jù)增添到歷史數(shù)據(jù)庫并提交時(shí),主程序可以實(shí)時(shí)監(jiān)測(cè)到數(shù)據(jù)量的改變并將數(shù)據(jù)刷新插入到本地?cái)?shù)據(jù)庫中。在數(shù)據(jù)流遷移過程中,每次數(shù)據(jù)同步的數(shù)據(jù)量不同,數(shù)據(jù)量過大時(shí)會(huì)造成數(shù)據(jù)同步的堵塞,前一次同步的數(shù)據(jù)發(fā)生的堵塞會(huì)使得后續(xù)的同步無法進(jìn)行,這樣急劇地增加了數(shù)據(jù)同步的時(shí)間。當(dāng)數(shù)據(jù)堵塞嚴(yán)重時(shí),會(huì)造成數(shù)據(jù)庫發(fā)生死鎖的情況,數(shù)據(jù)處于堵塞狀態(tài),后續(xù)的同步請(qǐng)求持續(xù)等待,處于僵持狀態(tài),當(dāng)死鎖狀態(tài)過長(zhǎng)時(shí),會(huì)增加服務(wù)器雪崩的可能,在這種情況下,利用GateWay限流機(jī)制,控制每一次的同步量處于設(shè)定的數(shù)量集范圍內(nèi),這種設(shè)定可以控制每一次的數(shù)據(jù)同步量都可處于最優(yōu)的數(shù)量級(jí),且依據(jù)觸發(fā)條件可以動(dòng)態(tài)切換全量及增量同步方式,即可實(shí)現(xiàn)數(shù)據(jù)的有效遷移,避免死鎖的發(fā)生。
其中配置數(shù)據(jù)庫連接信息層主要包括數(shù)據(jù)庫連接時(shí)所需要的用戶名信息、密碼信息、驅(qū)動(dòng)配置信息和URL信息。還包括數(shù)據(jù)庫池?cái)?shù)量及初始化參數(shù)、試驗(yàn)編號(hào)的存儲(chǔ)路徑和定時(shí)任務(wù)執(zhí)行時(shí)間等內(nèi)容。
Druid數(shù)據(jù)源配置層將連接好的數(shù)據(jù)庫信息以Druid數(shù)據(jù)連接源形式進(jìn)行封裝,給定池化參數(shù)的初始化信息,完成數(shù)據(jù)庫的連接操作。并將最終配置完成的數(shù)據(jù)庫放入定時(shí)任務(wù)中。
動(dòng)態(tài)SQL語句切換層主要是將SQL語句進(jìn)行編譯,實(shí)現(xiàn)其所需達(dá)到的目標(biāo),該層主要包括兩個(gè)部分,第一部分是反射解析歷史數(shù)據(jù)表的表結(jié)構(gòu)信息,解析源表的字段名信息、數(shù)據(jù)結(jié)構(gòu)、注釋等內(nèi)容,從而構(gòu)建與歷史數(shù)據(jù)表表結(jié)構(gòu)空間完全一致的本地?cái)?shù)據(jù)表,為數(shù)據(jù)同步提供表結(jié)構(gòu)空間支持。第二部分主要是全量/增量數(shù)據(jù)同步切換模式,如圖7所示。
圖7 數(shù)據(jù)同步模式切換邏輯
當(dāng)數(shù)據(jù)同步主程序啟動(dòng)時(shí),歷史數(shù)據(jù)庫中已存在數(shù)據(jù),若此時(shí)本地?cái)?shù)據(jù)庫表中存在不需要的數(shù)據(jù)時(shí),則執(zhí)行全量同步方式。該方式主要包含以下3部分。
① 獲取歷史表數(shù)據(jù),將本地表清空,將數(shù)據(jù)同步至本地表,之后再執(zhí)行增量同步方式,將歷史數(shù)據(jù)表后續(xù)不斷增加的數(shù)據(jù)同步到本地表中。當(dāng)本地?cái)?shù)據(jù)庫的目標(biāo)表中不存在數(shù)據(jù)時(shí),則直接執(zhí)行增量同步方式,將歷史數(shù)據(jù)庫中的數(shù)據(jù)不斷同步到本地?cái)?shù)據(jù)庫中。
② 定時(shí)任務(wù)層。將連接配置完成后的Druid連接池利用Connection關(guān)鍵字進(jìn)行數(shù)據(jù)通道連接,并將動(dòng)態(tài)SQL語句與定時(shí)任務(wù)進(jìn)行關(guān)聯(lián),解析并獲取定時(shí)任務(wù)執(zhí)行時(shí)間,開啟定時(shí)任務(wù),不斷獲取歷史數(shù)據(jù)庫表結(jié)構(gòu)空間中的數(shù)據(jù),并將數(shù)據(jù)同步到本地?cái)?shù)據(jù)庫的表結(jié)構(gòu)空間中。
③ 主函數(shù)層。將定時(shí)任務(wù)層所執(zhí)行的所有邏輯的外部設(shè)置監(jiān)控系統(tǒng),實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)流的執(zhí)行進(jìn)度,統(tǒng)計(jì)數(shù)據(jù)執(zhí)行的時(shí)間和數(shù)據(jù)同步量。
MyBatis框架模式主要以注入層的形式實(shí)現(xiàn),主要包括Repository層、Service層,以及Controller層外部設(shè)置數(shù)據(jù)監(jiān)控邏輯,用以監(jiān)控?cái)?shù)據(jù)同步的狀態(tài)?;谪?fù)載均衡機(jī)制的MyBatis框架模式如圖8所示,核心研究對(duì)象為數(shù)據(jù)流遷移從歷史數(shù)據(jù)庫到本地?cái)?shù)據(jù)庫的執(zhí)行進(jìn)程,因此采用一主一從的多數(shù)據(jù)源方式。
圖8 基于負(fù)載均衡機(jī)制的MyBatis框架模式
引入多線程的概念,該多線程并行傳輸流與傳統(tǒng)的多線程方式不同,該方式采用分治并行處理,將數(shù)據(jù)進(jìn)行分割,分割塊選為100,則每個(gè)線程處理幾百行數(shù)據(jù),多個(gè)線程同時(shí)并行執(zhí)行數(shù)據(jù)的索引和插入功能,將極大程度地提高數(shù)據(jù)同步的效率,滿足實(shí)時(shí)性要求。
創(chuàng)建航空發(fā)動(dòng)機(jī)高空臺(tái)字段名參數(shù)實(shí)體類對(duì)象,構(gòu)建Repository層的數(shù)據(jù)獲取和插入功能接口,將其注入Dao層來完成數(shù)據(jù)源配置。最終將連接好的Dao層注入Service層,加入多線程并行傳輸流邏輯,分配表結(jié)構(gòu),獲取試驗(yàn)臺(tái)編號(hào)信息,自動(dòng)檢索同步表名稱。
Repository層主要是實(shí)現(xiàn)數(shù)據(jù)庫的配置信息,采用主從數(shù)據(jù)源配置歷史數(shù)據(jù)庫信息及本地?cái)?shù)據(jù)庫信息,連接歷史數(shù)據(jù)庫,獲取歷史數(shù)據(jù)表字段名及數(shù)據(jù)信息;連接本地?cái)?shù)據(jù)庫,構(gòu)建與需要同步的歷史數(shù)據(jù)表表結(jié)構(gòu)空間相同的本地?cái)?shù)據(jù)表,將數(shù)據(jù)執(zhí)行插入操作。
將連接好的Repository層注入Dao層,Dao層主要是從Mapper文件中利用元注解解析出SQL語句和需要執(zhí)行的函數(shù)功能,將高空模擬試驗(yàn)臺(tái)數(shù)據(jù)表字段名信息與高空模擬試驗(yàn)臺(tái)實(shí)體類屬性對(duì)象進(jìn)行對(duì)應(yīng)關(guān)聯(lián),整體連接好的結(jié)構(gòu)定義為Service層。
將Service層注入Controller層中,利用定時(shí)程序解析獲得定時(shí)時(shí)長(zhǎng)和外部監(jiān)控邏輯,實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)流的傳輸過程,最終得到所需的執(zhí)行結(jié)果。負(fù)載均衡作用于主程序的邏輯中,負(fù)載均衡的引入是為了解決某一線程處理數(shù)據(jù)同步過程中,因數(shù)據(jù)量較大造成的同步堵塞的問題。當(dāng)某一個(gè)線程所需要同步的數(shù)據(jù)量過大時(shí),此時(shí)觸發(fā)負(fù)載均衡權(quán)重選擇器的邏輯,該線程的負(fù)載均衡權(quán)重值較大,此時(shí),系統(tǒng)會(huì)將其任務(wù)量分配給其他線程同時(shí)來完成,極大程度地解決了單一線程超負(fù)荷工作的情況,避免了線程堵塞和數(shù)據(jù)庫死鎖現(xiàn)象的發(fā)生。
因?yàn)楦呖漳M試驗(yàn)臺(tái)試驗(yàn)流程中采集的數(shù)據(jù)量巨大,分布于不同的表結(jié)構(gòu)空間中,每次需要同步多個(gè)表的數(shù)據(jù),每個(gè)表的同步時(shí)間是統(tǒng)計(jì)開始同步時(shí)刻的時(shí)間戳節(jié)點(diǎn)到同步完成時(shí)的時(shí)間戳節(jié)點(diǎn)之間差值,本文采用基于Vue框架的前端框架實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)流傳輸過程中各個(gè)表的同步信息,其中前端界面包含3部分主要功能。
① 用戶登錄界面:采用基于Nacos服務(wù)注冊(cè)與發(fā)現(xiàn)的設(shè)計(jì)原則,匹配正確的用戶名及密碼,支持多用戶登錄模式。
② JDBC接口數(shù)據(jù)同步監(jiān)控:主要是監(jiān)控JDBC接口模式的數(shù)據(jù)流遷移的同步時(shí)長(zhǎng),包含不同數(shù)據(jù)表的切換功能、同步表名稱、同步數(shù)據(jù)量、同步時(shí)長(zhǎng)、同步狀態(tài)等信息。
③MyBatis框架數(shù)據(jù)同步監(jiān)控:主要是監(jiān)控MyBatis框架模式的數(shù)據(jù)流遷移的同步時(shí)長(zhǎng),包含不同數(shù)據(jù)表的切換功能、同步表名稱、同步數(shù)據(jù)量、同步時(shí)長(zhǎng)、同步狀態(tài)等信息。
登陸界面主要包括用戶名及用戶密碼信息,用戶名及密碼一一對(duì)應(yīng)存儲(chǔ)于Oracle數(shù)據(jù)庫中,以鍵值對(duì)的形式取出,這樣可以滿足多用戶登錄整個(gè)系統(tǒng)的模式。當(dāng)用戶名與密碼匹配成功,即可進(jìn)入首頁,Nacos服務(wù)的注冊(cè)與發(fā)現(xiàn)設(shè)計(jì)原則可以解決在同一時(shí)間有多用戶登錄服務(wù)的情況,其邏輯校驗(yàn)功能可以排除非法登錄信息的情況。在登錄頁面中,首先會(huì)根據(jù)用戶輸入的用戶名密碼校驗(yàn)數(shù)據(jù)的準(zhǔn)確性,當(dāng)用戶名和密碼組成的鍵值對(duì)形式處于完全正確的情況下才會(huì)登錄整個(gè)平臺(tái)內(nèi)部數(shù)據(jù)流監(jiān)控的頁面。同時(shí)Nacos服務(wù)也會(huì)在該過程中監(jiān)控整個(gè)登錄用戶名的合法性。當(dāng)多用戶同時(shí)進(jìn)行登錄時(shí),Nacos服務(wù)會(huì)識(shí)別登錄的順序,利用JUC并發(fā)包下的semphore機(jī)制來排序登錄的用戶信息,從而完成整個(gè)登錄流程。用戶登陸界面如圖9所示。
圖9 用戶登錄界面
JDBC接口融合全量/增量的數(shù)據(jù)實(shí)時(shí)同步技術(shù),具體選擇增量還是全量的方式則需要利用GateWay的限流機(jī)制來進(jìn)行判斷。當(dāng)每次新增的數(shù)據(jù)量不大時(shí),為防止同步數(shù)據(jù)的缺失及因網(wǎng)絡(luò)延遲等造成的數(shù)據(jù)丟失問題,選擇執(zhí)行全量同步將需要的數(shù)據(jù)再全部同步一次。當(dāng)數(shù)據(jù)量很大時(shí),則需要利用GateWay機(jī)制調(diào)用增量式的同步方法來完成,且每一次同步限定其同步數(shù)據(jù)量處于機(jī)制調(diào)控允許的范圍內(nèi),防止同步堵塞產(chǎn)生死鎖的可能。該方式的數(shù)據(jù)同步量為平均每秒200+行數(shù)據(jù),滿足實(shí)時(shí)性要求,對(duì)應(yīng)數(shù)據(jù)如表1所示。同步時(shí)長(zhǎng)與同步數(shù)據(jù)量關(guān)系如圖10所示,監(jiān)控界面如圖11所示。并且圖11所示界面中可以增加同步模式,同步表試驗(yàn)編號(hào)等額外組件按鈕,擴(kuò)展性和泛化能力好,當(dāng)需要改變同步模式及不同表的同步過程時(shí),只需自定義切換即可更改前后端交互的接口。
表1 JDBC接口方式數(shù)據(jù)同步式數(shù)據(jù)展示
圖10 JDBC接口模式數(shù)據(jù)同步量與同步時(shí)間關(guān)系表示圖
圖11 JDBC接口模式數(shù)據(jù)同步監(jiān)控界面
負(fù)載均衡的提出正是為解決在多任務(wù)情況下,數(shù)據(jù)讀取量大、數(shù)據(jù)多、情況較為復(fù)雜的場(chǎng)景中出現(xiàn)的問題。而基于MyBatis框架融合多線程并行處理流的數(shù)據(jù)實(shí)時(shí)同步這一模式,正是針對(duì)大數(shù)據(jù)量、多字段名情況而設(shè)計(jì)的方法,利用負(fù)載均衡機(jī)制對(duì)其進(jìn)行相應(yīng)優(yōu)化,優(yōu)化每一塊線程并行處理流的執(zhí)行速度,讓每一部分疊加起來,使整個(gè)系統(tǒng)執(zhí)行的速度顯著提升,在該流程中,主要是監(jiān)控?cái)?shù)據(jù)流同步的數(shù)據(jù)量,數(shù)據(jù)同步時(shí)間及日期等相關(guān)信息內(nèi)容。
其中有切換數(shù)據(jù)同步模式的雙選功能,并且預(yù)留了增配接口,當(dāng)有新的方式需要加入時(shí),可以動(dòng)態(tài)進(jìn)行選擇加入,最終向試驗(yàn)員展示的是數(shù)據(jù)同步總量、數(shù)據(jù)同步時(shí)間和同步狀態(tài)。在整個(gè)平臺(tái)中,選擇需要試驗(yàn)的編號(hào),即可完成對(duì)應(yīng)試驗(yàn)編號(hào)數(shù)據(jù)的同步,且試驗(yàn)可進(jìn)行擴(kuò)展,可增加試驗(yàn)編號(hào)與其對(duì)應(yīng)的數(shù)據(jù)表。數(shù)據(jù)流遷移過程也可同步或分步進(jìn)行,該方式的數(shù)據(jù)同步量為平均每秒300+行數(shù)據(jù),滿足實(shí)時(shí)性的要求,對(duì)應(yīng)數(shù)據(jù)如表2所示。同步時(shí)長(zhǎng)與同步數(shù)據(jù)量關(guān)系如圖12所示,監(jiān)控界面如圖13所示。并且圖13所示界面中可以增加同步模式,同步表試驗(yàn)編號(hào)等額外組件按鈕、擴(kuò)展性和泛化能力好,當(dāng)需要改變同步模式與不同表的同步過程時(shí),只需自定義切換即可更改前后端交互的接口。
表2 MyBatis框架數(shù)據(jù)同步模式數(shù)據(jù)展示
圖12 MyBatis框架模式數(shù)據(jù)同步量與同步時(shí)間關(guān)系表示圖
圖13 Mybatis框架模式數(shù)據(jù)同步監(jiān)控界面
本文提出了采用多框架集成的方式來實(shí)現(xiàn)高空模擬試驗(yàn)臺(tái)數(shù)據(jù)流可視化及遷移的技術(shù):通過基于MyBatis-Plus的自動(dòng)視圖層構(gòu)建模式將存儲(chǔ)于底層數(shù)據(jù)庫中的各傳感器測(cè)量參數(shù)信息跨域呈現(xiàn)于Vue框架的瀏覽器端,可供試驗(yàn)員查看分析;利用基于GateWay限流機(jī)制的JDBC接口融合全量/增量數(shù)據(jù)實(shí)時(shí)同步模式及基于負(fù)載均衡機(jī)制的MyBatis框架融合多線程并行處理流模式可實(shí)現(xiàn)數(shù)據(jù)的實(shí)時(shí)遷移功能,前端采用Vue框架監(jiān)控?cái)?shù)據(jù)流傳輸過程,可實(shí)時(shí)監(jiān)測(cè)數(shù)據(jù)同步的流程。通過對(duì)這兩部分功能的驗(yàn)證,得到以下結(jié)論。
① 航空發(fā)動(dòng)機(jī)高空模擬試驗(yàn)臺(tái)各測(cè)點(diǎn)數(shù)據(jù)可以通過基于MyBatis-Plus的自動(dòng)視圖層構(gòu)建技術(shù)通過檢索底層數(shù)據(jù)庫表結(jié)構(gòu)中的信息,清晰地呈現(xiàn)于瀏覽器端界面,數(shù)據(jù)展示過程中,完整性對(duì)應(yīng)性好,試驗(yàn)員可以直觀地查看分析數(shù)據(jù)所蘊(yùn)含的內(nèi)在信息,數(shù)據(jù)可視化分析具有參考價(jià)值。
② 數(shù)據(jù)同步的實(shí)時(shí)性極大地提高。兩種數(shù)據(jù)流遷移技術(shù)均可保證在每秒內(nèi)實(shí)現(xiàn)200以上的數(shù)據(jù)同步量,能在短時(shí)間內(nèi)高效地完成數(shù)據(jù)庫之間的數(shù)據(jù)傳輸,保證了實(shí)時(shí)性。能夠?qū)崿F(xiàn)數(shù)據(jù)的完全遷移,在傳輸過程中不丟失數(shù)據(jù)和保證準(zhǔn)確性,能夠?qū)崿F(xiàn)完全的數(shù)據(jù)同步。
③ 自動(dòng)檢索同步表功能齊全。同步表名稱可根據(jù)試驗(yàn)編號(hào)自動(dòng)選擇,完成不同字段表的實(shí)時(shí)數(shù)據(jù)同步功能,擴(kuò)展能力強(qiáng)。當(dāng)需要添加其他試驗(yàn)表同步業(yè)務(wù)時(shí),只需給定試驗(yàn)編號(hào)。該試驗(yàn)編號(hào)對(duì)應(yīng)的同步表可以完成數(shù)據(jù)的實(shí)時(shí)同步任務(wù)。