??诮?jīng)濟學院 曾子力 張藍春
波音最新型787系列噴氣式客機無論在技術還是設計上都有前所未有的突破。而其中飛行數(shù)據(jù)記錄儀(FDR)的數(shù)據(jù)格式也刷新了傳統(tǒng)的制式,采用ARINC647A-1型記錄制式。其最大特點是數(shù)據(jù)以幀為單位記錄。由于每秒產(chǎn)生成百上千的數(shù)據(jù)幀,數(shù)據(jù)幀隨機排列。解碼分析信息系統(tǒng)將數(shù)據(jù)幀歸類后以秒為單位進行存儲在數(shù)據(jù)庫中。由于航空飛行記錄器是通過XML文檔定義飛行數(shù)據(jù)的楨結(jié)構(gòu)及參數(shù)種類,如各個參數(shù)記錄的bit位置和各數(shù)據(jù)幀的設置與作用等等,因此解碼數(shù)據(jù)庫是通過設計軟件讀取該文檔記錄而生成,從而實現(xiàn)對飛機黑匣子數(shù)據(jù)的解碼。
解碼分析系統(tǒng)在載入解碼數(shù)據(jù)庫后,即可對飛機系統(tǒng)的運轉(zhuǎn)數(shù)據(jù)進行解讀,解碼后的參數(shù)推送到分析程序模得到工程值,用戶再對參數(shù)工程值做進一步的分析,最后提煉出的信息存儲在后臺SQLServer數(shù)據(jù)庫系統(tǒng),并同時在前臺也會保存相關的記錄。
由于飛行記錄器和快速存取記錄器數(shù)據(jù)量大的特點,雖然相關數(shù)據(jù)仍需存放在大型關系數(shù)據(jù)庫SQLServer服務器上,但面對龐大的數(shù)據(jù),不利于提到解碼分析和數(shù)據(jù)查詢速度。并且,若飛機數(shù)據(jù)庫等也采用SQLServer數(shù)據(jù)庫進行管理,勢必嚴重影響系統(tǒng)性能和運行速度,提高系統(tǒng)運行速度,因此,本系統(tǒng)將飛機數(shù)據(jù)庫和機場數(shù)據(jù)庫放置在前臺,以便客戶端快速調(diào)用。前端采用嵌入式實時數(shù)據(jù)庫系統(tǒng)來存放飛機數(shù)據(jù)庫、機場數(shù)據(jù)庫信息。實現(xiàn)兩種完全不同類型數(shù)據(jù)庫的兼容。
飛行數(shù)據(jù)譯碼分析系統(tǒng)使用SQLServer數(shù)據(jù)庫作為后臺確保大量的快速存取記錄器的警告事件記錄和航班記錄有足夠的數(shù)據(jù)庫容量存儲,同時SQLServer的服務器特性能確保各客戶端的譯碼分析數(shù)據(jù)能保存在服務器數(shù)據(jù)庫中。但對部分使用頻率很高的小型數(shù)據(jù)庫表,如飛機數(shù)據(jù)庫表、機場數(shù)據(jù)庫表等則不宜采用SQLServer來存儲,為了提高系統(tǒng)運行速度,利用存儲過程的方式對MS SQLServer 2000數(shù)據(jù)庫操作,前端數(shù)據(jù)庫采用小型本地數(shù)據(jù)庫。
由于一個firebird數(shù)據(jù)庫服務器能夠管理多個獨立的數(shù)據(jù)庫,每一個數(shù)據(jù)庫同時可支持多個客戶端連結(jié)。因此航空飛行記錄器解碼分析系統(tǒng)前端數(shù)據(jù)庫采用Firebird跨平臺的關系數(shù)據(jù)庫系統(tǒng)。
基于Firebird航空飛行記錄器解碼分析數(shù)據(jù)庫系統(tǒng)優(yōu)勢:一方面,F(xiàn)irebird作為輕量級嵌入式數(shù)據(jù)庫不會給操作系統(tǒng)環(huán)境帶來污染;另一方面,體現(xiàn)了很好的健壯性和便攜性。例如,假設若干動態(tài)庫放置在系統(tǒng)文件夾下,則這些動態(tài)庫有可能和其他系統(tǒng)的同名動態(tài)庫產(chǎn)生沖突。而多數(shù)大型數(shù)據(jù)庫的客戶端的安裝必須依賴數(shù)據(jù)庫開發(fā)商提供的安裝程序,完全的不透明,加大了系統(tǒng)故障的概率。無需安裝而直接運行。具體分析如下:
1.航空飛行記錄器解碼分析前端系統(tǒng)是面向單機用戶,整個服務器的功能都已經(jīng)包含到客戶端動態(tài)庫中,那么程序的運行也就不再依賴于必需安裝FireBird Server。這樣一來,一個可執(zhí)行文件加上幾個動態(tài)庫,這是所有單機數(shù)據(jù)庫系統(tǒng)都希望達到的效果。它完全免去了數(shù)據(jù)庫引擎的安裝,真正實現(xiàn)了“便攜”的效果。
2.把數(shù)據(jù)庫服務器的安裝包含到我們航空飛行記錄器解碼分析系統(tǒng)中。這個特性是FireBird數(shù)據(jù)庫所獨有的。FireBird的部署提供了相應的服務安裝的支持文件,這使得數(shù)據(jù)庫的安裝可以完全合并到程序本身之中,使數(shù)據(jù)庫服務成為系統(tǒng)的一部分。
3.讓客戶端程序是一個完全獨立的可執(zhí)行文件,客戶端除了這個可執(zhí)行文件以外,不必部署任何其他文件,包括數(shù)據(jù)庫的客戶端。
(1)和物理主鍵應與邏輯主鍵分離
兩表用邏輯主鍵相關聯(lián)時,在數(shù)據(jù)導入過程中,尤其是從邏輯主鍵的設計升級到物理主鍵的設計時,兩表的關聯(lián)需要一個將邏輯主鍵關聯(lián)轉(zhuǎn)化為物理主鍵關聯(lián)的過程。處理的方法有兩個方法。
其一,客戶端處理時,在客戶端放一個內(nèi)存表,預先載入被關聯(lián)的基礎數(shù)據(jù)表,其中既包含物理主鍵,又包含邏輯主鍵。然后將關聯(lián)表導入,每插入一條記錄之前,都通過內(nèi)存表匹配邏輯主鍵對應的物理主鍵的值,把該值放入記錄相應的關聯(lián)字段中,再輸入數(shù)據(jù)庫。
第二,服務器端處理時是在服務器端的觸發(fā)器中判斷,如果整數(shù)關聯(lián)字段為空,則自動通過原始的邏輯主鍵關聯(lián)字段匹配物理關聯(lián)字段對應的值,再進行賦值。
(2)數(shù)據(jù)導入導出過程中需要注意兩個問題
其一,尊重已形成的自增長主鍵的值,也就是,已形成的自增長主鍵的值不能讓它重新生成,原樣倒入,這樣就不會錯亂。IBExpert生成的觸發(fā)器因為有判斷語句,所以并不會干擾。
其二,生成器對象的值也要隨著變。特別是,在空數(shù)據(jù)庫倒入歷史數(shù)據(jù)時,一定要把生成器的值也繼承過來。
(3)動態(tài)建庫是一個理念變化
也就是說,“系統(tǒng)不依賴于一個固定的永久性庫”。動態(tài)建庫同時能夠分化數(shù)據(jù)風險,將風險分散到數(shù)據(jù)的子集上。數(shù)據(jù)庫物理存儲的瑕疵是有積累效果的。在極限情況下,F(xiàn)ireBird數(shù)據(jù)庫對數(shù)據(jù)庫文件的瑕疵產(chǎn)生有一定的容忍能力。具有2、3個簇錯誤的gdb文件基本上仍能夠繼續(xù)使用,這樣,當系統(tǒng)進入新業(yè)務時間的時候,數(shù)據(jù)庫瑕疵就被拋棄在舊庫中。這樣,系統(tǒng)即使不進行修補、備份、恢復,仍能很好的運行。如此一來真正就能夠?qū)崿F(xiàn)“無人值守”的數(shù)據(jù)庫系統(tǒng)。若是單個數(shù)據(jù)庫,則數(shù)據(jù)庫文件錯誤必須被及時發(fā)現(xiàn)、修補,否則會導致整個系統(tǒng)的崩潰,乃至于所有的數(shù)據(jù)都損失掉。
機場信息數(shù)據(jù)庫表是存放航空公司航線所有可能飛達的機場信息,包括機場位置、跑道方向等信息,該數(shù)據(jù)庫表中所有字段都為字符型數(shù)據(jù),具體包括以下字段:
飛機信息數(shù)據(jù)庫表是存放航空公司機隊所有飛機的機型等與飛機出廠信息相關的數(shù)據(jù)庫表,包括飛機注冊號、機型、發(fā)動機信息等相關的各類解碼數(shù)據(jù)庫,這些信息在QAR數(shù)據(jù)解碼與分析中將被頻繁使用。該數(shù)據(jù)庫表共包括以下字段信息:
[1]張藍春.基于C++的飛機黑匣子解碼分析系統(tǒng)的設計[J].計算機系統(tǒng)應用,2009.
[2]熊華鋼.先進航空電子綜合技術[M].國防工業(yè)出版社,2012.
[3]張立科.VISUAL C++ MFC類庫參考手冊[M].人民郵電出版社,2005.