王春艷,李 帥
(中國電子科技集團公司第三十八研究所,安徽合肥230088)
隨著現(xiàn)代科學(xué)技術(shù)的進步,臨近空間獨特的資源優(yōu)勢已成為各國關(guān)注的熱點,平流層飛艇運行在臨近空間底部,依靠空氣靜浮力駐空,具有可定點和機動巡航、駐空時間長、載重量大、可重復(fù)使用等特點,在區(qū)域防災(zāi)減災(zāi)、環(huán)境監(jiān)測、城市安全監(jiān)控、高分辨率實時區(qū)域監(jiān)視、預(yù)警和導(dǎo)彈防御、區(qū)域通信等方面具有重要的用途,作為一種新型信息平臺,引起了世界上發(fā)達國家的廣泛關(guān)注。
利用計算機網(wǎng)絡(luò)技術(shù)實現(xiàn)對飛艇運行遠程監(jiān)視和測控,確保飛艇的安全運行是目前研究的重要方向。在飛艇飛行任務(wù)中,飛艇姿態(tài)的數(shù)據(jù)監(jiān)測和測控實時處理顯得尤為重要,能夠協(xié)助工程技術(shù)人員準確地掌握飛艇運行態(tài)勢,正確地分析運行過程和有效地指揮控制飛艇運行。數(shù)據(jù)庫負責整個監(jiān)控系統(tǒng)的數(shù)據(jù)存儲工作[1],是整個測控系統(tǒng)的重要組成部分。通常情況下,商業(yè)數(shù)據(jù)庫需要專業(yè)的數(shù)據(jù)庫管理系統(tǒng)進行管理且系統(tǒng)龐大,非常占用系統(tǒng)資源,使得設(shè)計系統(tǒng)復(fù)雜,影響了系統(tǒng)的運行效率,考慮飛艇遠程監(jiān)控系統(tǒng)的設(shè)計需求和整個系統(tǒng)的性能,本文提出了在飛艇監(jiān)控中使用輕量級數(shù)據(jù)庫系統(tǒng)SQLite的方案。
飛艇測控系統(tǒng)應(yīng)實現(xiàn)以下幾種功能:
(1)數(shù)據(jù)采集和存儲。數(shù)據(jù)采集主要是由艇上飛控系統(tǒng)完成,通過兩塊飛控計算機(主控和備控)板,將采集的各種參數(shù)信息定時通過無線網(wǎng)絡(luò)傳輸?shù)降孛鏈y控計算機上的嵌入式服務(wù)器中進行分析和存儲。
(2)歷史數(shù)據(jù)查詢。根據(jù)用戶輸入的查詢信息,查找數(shù)據(jù)庫中的相關(guān)數(shù)據(jù),提供給管理人員分析,對當前能源系統(tǒng)的使用狀態(tài)和壽命進行評估,對各執(zhí)行機構(gòu)的能效進行風險評估,預(yù)測出當前存在的潛在危險,在飛艇失效時進行故障診斷、歸零分析,輔助尋找故障根源。
(3)遠程控制功能。在系統(tǒng)遙控模式下,用戶遠程對設(shè)備進行控制,通過無線傳輸向艇上飛控系統(tǒng)發(fā)生控制指令,并將控制信息和回饋信息進行存儲。
(4)設(shè)備自控參數(shù)設(shè)置。完成在自控模式下對設(shè)備的臨界值進行設(shè)定,如果監(jiān)測數(shù)據(jù)超出了臨界范圍,發(fā)送報警信號或作出相應(yīng)的控制。
(5)整機狀態(tài)監(jiān)測。實現(xiàn)遠程監(jiān)視整機運行狀態(tài),包括飛艇各姿態(tài)數(shù)據(jù)顯示、各氣囊壓力指示,能源余量預(yù)估顯示以及全部設(shè)備運行狀態(tài)與告警。
(6)用戶信息管理。用戶信息管理是系統(tǒng)中所需實現(xiàn)的一項最基本的功能,為系統(tǒng)提供了安全保障,可以有效防止非法用戶進入系統(tǒng)查看數(shù)據(jù)。
遠程測控系統(tǒng)的總體目標是實現(xiàn)系統(tǒng)數(shù)據(jù)的結(jié)構(gòu)化管理[2],最大化共享網(wǎng)絡(luò)資源,最終達到異地實時遠程測控的目的,通過簡單的控制和操作完成遠程測控功能,運行時的各種狀態(tài)參數(shù)數(shù)據(jù)和控制參數(shù)實時存儲、分析,輔助工程技術(shù)人員提前決策。
SQLite是一個輕量級的關(guān)系數(shù)據(jù)庫,具有三級模式的結(jié)構(gòu)體系,即用戶模式、邏輯模式和存儲模式。相對于傳統(tǒng)數(shù)據(jù)庫,SQLite具有更好的實時性、系統(tǒng)開銷小、底層控制能力強。SQLite能夠高效地利用有限資源,提高數(shù)據(jù)的存取速度,增強系統(tǒng)的安全性,并具有如下關(guān)鍵特點:
(1)零配置。SQLite在使用前不需要安裝設(shè)置,不需要進程來啟動、停止或配置,不需要管理員去創(chuàng)建新數(shù)據(jù)庫或分配用戶權(quán)限,在系統(tǒng)崩潰或失電之后自動恢復(fù)。
(2)支持絕大多數(shù)SQL-92標準的SQL命令,支持視圖、觸發(fā)器,支持嵌套SQL,具有事務(wù)處理功能,自動維護事務(wù)的完整性、原子性等特性,支持實體完整性和參照完整性。
(3)零配置的數(shù)據(jù)庫引擎和安裝。使用SQLite時,訪問數(shù)據(jù)庫的程序直接從磁盤上的數(shù)據(jù)庫文件讀寫,沒有中間的服務(wù)器進程。
(4)支持多種開發(fā)語言和數(shù)據(jù)庫平臺無關(guān)性,支持大多數(shù)計算機語言,支持 Windows/Linux/Unix/Mac OS等主流的操縱系統(tǒng),可實現(xiàn)數(shù)據(jù)庫文件在機器之間自由共享。
(5)精簡性與簡單訪問。優(yōu)化后整個SQLite庫小于225 KB。一個SQLite數(shù)據(jù)庫是一個單獨的普通磁盤文件,能夠被定位在路徑層次的任何地方。
(6)數(shù)據(jù)存儲量大。數(shù)據(jù)存儲在單個物理文件中,支持2 TB的數(shù)據(jù)存儲。
(7)源碼完全開放。使用者可用于任何非商業(yè)和商業(yè)用途。
SQLite采用模塊化的設(shè)計,主要由4個部分組成:內(nèi)核(Core)、SQL編譯器(SQL Compiler)、后端(Backend)以及附件(Accessories),內(nèi)部結(jié)構(gòu)如圖1所示[3]。
圖1 SQLite體系結(jié)構(gòu)圖
SQLite接口是一些已經(jīng)編寫好的C庫,SQL語句通過接口進入到高效的SQL編譯器,由標記處理器分解成分析器可以識別的各個標志符,然后由分析器重新組合標志符并調(diào)用代碼生成器生成虛擬機器碼,交由虛擬機去執(zhí)行,最終完成SQL語句指定的任務(wù)。虛擬機是SQLite內(nèi)部結(jié)構(gòu)的核心,不僅完成與數(shù)據(jù)操作相關(guān)的全部操作,而且還是客戶和存儲之間信息進行交換的中間單元。數(shù)據(jù)庫按照B樹(Btree)的形式存儲在磁盤上,通過可調(diào)整的頁面緩沖獲得對數(shù)據(jù)的快速查找和存儲。為了方便移植,SQLite使用一個抽象層接口(OS interface)與不同操作系統(tǒng)進行對接。
SQLite數(shù)據(jù)庫直接部署在測控系統(tǒng)節(jié)點上,如圖2所示。艇上部署兩個飛控計算機,相互作為備份控制,將艇上采集的各類傳感器數(shù)據(jù)定時傳輸給地面測控系統(tǒng),遙控模式下接收地面測控計算機發(fā)來的人工干預(yù)指令,控制各分系統(tǒng)設(shè)備,并將參數(shù)回送給地面測控計算機;自控模式下根據(jù)測控系統(tǒng)設(shè)置的臨界值進行自動控制各設(shè)備。測控系統(tǒng)中所有接收的檢測數(shù)據(jù)和發(fā)送的控制操作均作為關(guān)鍵數(shù)據(jù),保存到數(shù)據(jù)庫服務(wù)器中。操作人員可以使用不同的終端登錄,查詢和分析整機監(jiān)測數(shù)據(jù)[4]。
圖2 測控系統(tǒng)數(shù)據(jù)庫部署
直接使用SQLite執(zhí)行一條SQL的插入語句時延范圍在100 ms以上,實驗表明在頻繁記錄采集數(shù)據(jù)時,這樣的數(shù)據(jù)錄入效率將嚴重影響記錄節(jié)點的運行[5],錄入過程耗時過長,對于長時間的數(shù)據(jù)采集任務(wù),有內(nèi)存消耗過多或內(nèi)存不足的潛在問題[5]。
本文重點從以下三個方面進行優(yōu)化處理:
(1)對大批量數(shù)據(jù)入庫操作進行綜合優(yōu)化,縮短數(shù)據(jù)錄入時間;
(2)優(yōu)化數(shù)據(jù)庫單次插入數(shù)據(jù)的延時;
(3)采用多線程并發(fā)處理技術(shù),數(shù)據(jù)采集處理和數(shù)據(jù)存儲同時進行。
SQLite的內(nèi)存數(shù)據(jù)庫模式就是直接將數(shù)據(jù)庫創(chuàng)建在內(nèi)存中,相對于磁盤,內(nèi)存的數(shù)據(jù)讀寫速度要高出幾個數(shù)量級,將數(shù)據(jù)保存在內(nèi)存中相比從磁盤上訪問能夠極大地提高應(yīng)用的性能。
采用內(nèi)存數(shù)據(jù)庫,在不進行任何優(yōu)化時的單次數(shù)據(jù)錄入時間與優(yōu)化后的磁盤數(shù)據(jù)庫基本相當。因此在存儲采集數(shù)據(jù)時采用內(nèi)存數(shù)據(jù)庫的模式實現(xiàn)數(shù)據(jù)的實時錄入。
在數(shù)據(jù)庫管理系統(tǒng)中,事務(wù)(Transaction)被定義為對特定數(shù)據(jù)庫的一組SQL操作,這組對數(shù)據(jù)庫的操作要么全部執(zhí)行,要么都不執(zhí)行。在SQLite中每一條插入/更新(INSERT/UPDATE)語句都默認的被當作一個事務(wù)執(zhí)行,每一次執(zhí)行就涉及一次打開數(shù)據(jù)庫、寫數(shù)據(jù)庫、關(guān)閉數(shù)據(jù)庫的操作,大大延長了數(shù)據(jù)庫操作的時間,因此,可以將批量的插入/更新操作顯式的定義為一組事務(wù),在批量錄入之前指定事務(wù)開始處理,執(zhí)行語句為:sqlite3_exec(pSQLiteDB,"BEGIN",0,0,&zErr Msg);在所有數(shù)據(jù)錄入完畢之后指定事物提交處理,執(zhí)行語句為:sqlite3_exec(pSQLiteDB,"BEGIN",0,0,&zErr Msg),其中pSQLiteDB表示數(shù)據(jù)庫連接對象,"BEGIN"表示開始事物處理,"COMMIT"表示提交事物處理。
SQLite支持事物的一個重要特性就是“原子提交”,意味著一個事物中的所有操作動作要么全部發(fā)生,要么都不發(fā)生。SQLite的同步(synchronous)選項相當于一種同步IO機制,所有對數(shù)據(jù)庫的修改都必須等待本次操作寫入到磁盤上后才返回。當頻繁地對數(shù)據(jù)庫進行INSERT/UPDATE操作時,可以選擇關(guān)閉同步選項,執(zhí)行語句為:SQLite3_exec(pSQLiteDB,"PRAGMASYNCHRONOUS=OFF",NULL,NULL,&zErr Msg),待所有事物提交后一次性更新磁盤數(shù)據(jù)庫。
經(jīng)過測試證明,關(guān)閉同步選項后,數(shù)據(jù)錄入操作時間可再縮短100 ms左右。
SQLite中日志是在系統(tǒng)遇到關(guān)機或斷電時用來恢復(fù)數(shù)據(jù)庫,保持數(shù)據(jù)庫完整性的措施,默認情況下日志是隨著對數(shù)據(jù)庫的操作一起寫入磁盤的,SQLite中日志記錄模式修改為內(nèi)存記錄模式“MEMORY”,即不產(chǎn)生任何單獨的數(shù)據(jù)庫日志文件,所有的操作日志存儲于內(nèi)存中,更改SQLite默認日志模式為內(nèi)存記錄模式,執(zhí)行語句為:“SQLite3_exec(pSQLiteDB,"PRAGMA JOURNAL_MODE=MEMORY",NULL,NULL,&zErr Msg)”,可以提高單次INSERT操作的效率。
嵌入式數(shù)據(jù)庫SQLite在飛艇運行監(jiān)控系統(tǒng)中的應(yīng)用克服了使用傳統(tǒng)商業(yè)數(shù)據(jù)庫時系統(tǒng)開發(fā)難度大,使用維護不方便[6]。由于SQLite數(shù)據(jù)庫使用簡單,不需要專門的數(shù)據(jù)庫管理引擎,存取速度快,性能穩(wěn)定,完全滿足了飛艇監(jiān)控系統(tǒng)管理監(jiān)控數(shù)據(jù)的需求。本文通過三點優(yōu)化策略切實地提高SQLite數(shù)據(jù)庫訪問速度的方案,使SQLite數(shù)據(jù)庫的性能滿足飛艇飛行遠程監(jiān)控中實時數(shù)據(jù)錄入需求。同時也證明了SQLite在功能和性能上可以很好地取代目前使用傳統(tǒng)商業(yè)數(shù)據(jù)庫,降低了商業(yè)投入成本和維護成本。
[1]蔡勇,王勇.嵌入式數(shù)據(jù)庫SQLite在測控系統(tǒng)設(shè)計中的應(yīng)用[J].電子測試,2011(10):89-93.
[2]陳曉東,曹奇英.嵌入式數(shù)據(jù)庫SQLite的遠程可視化維護管理工具的設(shè)計與實現(xiàn)[J].計算機應(yīng)用與軟件,2011,28(8):106-107.
[3](美)ALLEN G,OWENS M.SQLite權(quán)威指南(第2版)[M].北京:電子工業(yè)出版社,2012:21-137.
[4]李海貴,孫俊平.通用雷達數(shù)據(jù)處理系統(tǒng)仿真測試平臺設(shè)計[J].雷達科學(xué)與技術(shù),2010,8(4):339-342.
[5]周帆.SQLite在半實物仿真系統(tǒng)中的應(yīng)用與優(yōu)化[J].彈箭與制導(dǎo)學(xué)報,2013,33(1):167-170.
[6]黃德才.數(shù)據(jù)庫原理及其應(yīng)用(第3版)[M].北京:科學(xué)出版社,2010:19-154.