王春艷,李 帥
(中國電子科技集團公司第三十八研究所,安徽合肥230088)
隨著現代科學技術的進步,臨近空間獨特的資源優勢已成為各國關注的熱點,平流層飛艇運行在臨近空間底部,依靠空氣靜浮力駐空,具有可定點和機動巡航、駐空時間長、載重量大、可重復使用等特點,在區域防災減災、環境監測、城市安全監控、高分辨率實時區域監視、預警和導彈防御、區域通信等方面具有重要的用途,作為一種新型信息平臺,引起了世界上發達國家的廣泛關注。
利用計算機網絡技術實現對飛艇運行遠程監視和測控,確保飛艇的安全運行是目前研究的重要方向。在飛艇飛行任務中,飛艇姿態的數據監測和測控實時處理顯得尤為重要,能夠協助工程技術人員準確地掌握飛艇運行態勢,正確地分析運行過程和有效地指揮控制飛艇運行。數據庫負責整個監控系統的數據存儲工作[1],是整個測控系統的重要組成部分。通常情況下,商業數據庫需要專業的數據庫管理系統進行管理且系統龐大,非常占用系統資源,使得設計系統復雜,影響了系統的運行效率,考慮飛艇遠程監控系統的設計需求和整個系統的性能,本文提出了在飛艇監控中使用輕量級數據庫系統SQLite的方案。
飛艇測控系統應實現以下幾種功能:
(1)數據采集和存儲。數據采集主要是由艇上飛控系統完成,通過兩塊飛控計算機(主控和備控)板,將采集的各種參數信息定時通過無線網絡傳輸到地面測控計算機上的嵌入式服務器中進行分析和存儲。
(2)歷史數據查詢。根據用戶輸入的查詢信息,查找數據庫中的相關數據,提供給管理人員分析,對當前能源系統的使用狀態和壽命進行評估,對各執行機構的能效進行風險評估,預測出當前存在的潛在危險,在飛艇失效時進行故障診斷、歸零分析,輔助尋找故障根源。
(3)遠程控制功能。在系統遙控模式下,用戶遠程對設備進行控制,通過無線傳輸向艇上飛控系統發生控制指令,并將控制信息和回饋信息進行存儲。
(4)設備自控參數設置。完成在自控模式下對設備的臨界值進行設定,如果監測數據超出了臨界范圍,發送報警信號或作出相應的控制。
(5)整機狀態監測。實現遠程監視整機運行狀態,包括飛艇各姿態數據顯示、各氣囊壓力指示,能源余量預估顯示以及全部設備運行狀態與告警。
(6)用戶信息管理。用戶信息管理是系統中所需實現的一項最基本的功能,為系統提供了安全保障,可以有效防止非法用戶進入系統查看數據。
遠程測控系統的總體目標是實現系統數據的結構化管理[2],最大化共享網絡資源,最終達到異地實時遠程測控的目的,通過簡單的控制和操作完成遠程測控功能,運行時的各種狀態參數數據和控制參數實時存儲、分析,輔助工程技術人員提前決策。
SQLite是一個輕量級的關系數據庫,具有三級模式的結構體系,即用戶模式、邏輯模式和存儲模式。相對于傳統數據庫,SQLite具有更好的實時性、系統開銷小、底層控制能力強。SQLite能夠高效地利用有限資源,提高數據的存取速度,增強系統的安全性,并具有如下關鍵特點:
(1)零配置。SQLite在使用前不需要安裝設置,不需要進程來啟動、停止或配置,不需要管理員去創建新數據庫或分配用戶權限,在系統崩潰或失電之后自動恢復。
(2)支持絕大多數SQL-92標準的SQL命令,支持視圖、觸發器,支持嵌套SQL,具有事務處理功能,自動維護事務的完整性、原子性等特性,支持實體完整性和參照完整性。
(3)零配置的數據庫引擎和安裝。使用SQLite時,訪問數據庫的程序直接從磁盤上的數據庫文件讀寫,沒有中間的服務器進程。
(4)支持多種開發語言和數據庫平臺無關性,支持大多數計算機語言,支持 Windows/Linux/Unix/Mac OS等主流的操縱系統,可實現數據庫文件在機器之間自由共享。
(5)精簡性與簡單訪問。優化后整個SQLite庫小于225 KB。一個SQLite數據庫是一個單獨的普通磁盤文件,能夠被定位在路徑層次的任何地方。
(6)數據存儲量大。數據存儲在單個物理文件中,支持2 TB的數據存儲。
(7)源碼完全開放。使用者可用于任何非商業和商業用途。
SQLite采用模塊化的設計,主要由4個部分組成:內核(Core)、SQL編譯器(SQL Compiler)、后端(Backend)以及附件(Accessories),內部結構如圖1所示[3]。

圖1 SQLite體系結構圖
SQLite接口是一些已經編寫好的C庫,SQL語句通過接口進入到高效的SQL編譯器,由標記處理器分解成分析器可以識別的各個標志符,然后由分析器重新組合標志符并調用代碼生成器生成虛擬機器碼,交由虛擬機去執行,最終完成SQL語句指定的任務。虛擬機是SQLite內部結構的核心,不僅完成與數據操作相關的全部操作,而且還是客戶和存儲之間信息進行交換的中間單元。數據庫按照B樹(Btree)的形式存儲在磁盤上,通過可調整的頁面緩沖獲得對數據的快速查找和存儲。為了方便移植,SQLite使用一個抽象層接口(OS interface)與不同操作系統進行對接。
SQLite數據庫直接部署在測控系統節點上,如圖2所示。艇上部署兩個飛控計算機,相互作為備份控制,將艇上采集的各類傳感器數據定時傳輸給地面測控系統,遙控模式下接收地面測控計算機發來的人工干預指令,控制各分系統設備,并將參數回送給地面測控計算機;自控模式下根據測控系統設置的臨界值進行自動控制各設備。測控系統中所有接收的檢測數據和發送的控制操作均作為關鍵數據,保存到數據庫服務器中。操作人員可以使用不同的終端登錄,查詢和分析整機監測數據[4]。

圖2 測控系統數據庫部署
直接使用SQLite執行一條SQL的插入語句時延范圍在100 ms以上,實驗表明在頻繁記錄采集數據時,這樣的數據錄入效率將嚴重影響記錄節點的運行[5],錄入過程耗時過長,對于長時間的數據采集任務,有內存消耗過多或內存不足的潛在問題[5]。
本文重點從以下三個方面進行優化處理:
(1)對大批量數據入庫操作進行綜合優化,縮短數據錄入時間;
(2)優化數據庫單次插入數據的延時;
(3)采用多線程并發處理技術,數據采集處理和數據存儲同時進行。
SQLite的內存數據庫模式就是直接將數據庫創建在內存中,相對于磁盤,內存的數據讀寫速度要高出幾個數量級,將數據保存在內存中相比從磁盤上訪問能夠極大地提高應用的性能。
采用內存數據庫,在不進行任何優化時的單次數據錄入時間與優化后的磁盤數據庫基本相當。因此在存儲采集數據時采用內存數據庫的模式實現數據的實時錄入。
在數據庫管理系統中,事務(Transaction)被定義為對特定數據庫的一組SQL操作,這組對數據庫的操作要么全部執行,要么都不執行。在SQLite中每一條插入/更新(INSERT/UPDATE)語句都默認的被當作一個事務執行,每一次執行就涉及一次打開數據庫、寫數據庫、關閉數據庫的操作,大大延長了數據庫操作的時間,因此,可以將批量的插入/更新操作顯式的定義為一組事務,在批量錄入之前指定事務開始處理,執行語句為:sqlite3_exec(pSQLiteDB,"BEGIN",0,0,&zErr Msg);在所有數據錄入完畢之后指定事物提交處理,執行語句為:sqlite3_exec(pSQLiteDB,"BEGIN",0,0,&zErr Msg),其中pSQLiteDB表示數據庫連接對象,"BEGIN"表示開始事物處理,"COMMIT"表示提交事物處理。
SQLite支持事物的一個重要特性就是“原子提交”,意味著一個事物中的所有操作動作要么全部發生,要么都不發生。SQLite的同步(synchronous)選項相當于一種同步IO機制,所有對數據庫的修改都必須等待本次操作寫入到磁盤上后才返回。當頻繁地對數據庫進行INSERT/UPDATE操作時,可以選擇關閉同步選項,執行語句為:SQLite3_exec(pSQLiteDB,"PRAGMASYNCHRONOUS=OFF",NULL,NULL,&zErr Msg),待所有事物提交后一次性更新磁盤數據庫。
經過測試證明,關閉同步選項后,數據錄入操作時間可再縮短100 ms左右。
SQLite中日志是在系統遇到關機或斷電時用來恢復數據庫,保持數據庫完整性的措施,默認情況下日志是隨著對數據庫的操作一起寫入磁盤的,SQLite中日志記錄模式修改為內存記錄模式“MEMORY”,即不產生任何單獨的數據庫日志文件,所有的操作日志存儲于內存中,更改SQLite默認日志模式為內存記錄模式,執行語句為:“SQLite3_exec(pSQLiteDB,"PRAGMA JOURNAL_MODE=MEMORY",NULL,NULL,&zErr Msg)”,可以提高單次INSERT操作的效率。
嵌入式數據庫SQLite在飛艇運行監控系統中的應用克服了使用傳統商業數據庫時系統開發難度大,使用維護不方便[6]。由于SQLite數據庫使用簡單,不需要專門的數據庫管理引擎,存取速度快,性能穩定,完全滿足了飛艇監控系統管理監控數據的需求。本文通過三點優化策略切實地提高SQLite數據庫訪問速度的方案,使SQLite數據庫的性能滿足飛艇飛行遠程監控中實時數據錄入需求。同時也證明了SQLite在功能和性能上可以很好地取代目前使用傳統商業數據庫,降低了商業投入成本和維護成本。
[1]蔡勇,王勇.嵌入式數據庫SQLite在測控系統設計中的應用[J].電子測試,2011(10):89-93.
[2]陳曉東,曹奇英.嵌入式數據庫SQLite的遠程可視化維護管理工具的設計與實現[J].計算機應用與軟件,2011,28(8):106-107.
[3](美)ALLEN G,OWENS M.SQLite權威指南(第2版)[M].北京:電子工業出版社,2012:21-137.
[4]李海貴,孫俊平.通用雷達數據處理系統仿真測試平臺設計[J].雷達科學與技術,2010,8(4):339-342.
[5]周帆.SQLite在半實物仿真系統中的應用與優化[J].彈箭與制導學報,2013,33(1):167-170.
[6]黃德才.數據庫原理及其應用(第3版)[M].北京:科學出版社,2010:19-154.