(中國電子科技集團公司第三十八研究所,安徽合肥230088)
軍事雷達作為戰爭的產物和軍中“千里眼”,從出現至今,已經成為各軍事大國不遺余力地競相發展的裝備設施。隨著技術的發展,現代雷達系統越來越復雜,這給雷達狀態監視及使用維護提出了新的挑戰。日志管理功能可以記錄并管理雷達生命周期內的工作過程狀態,包括雷達的控制、狀態參數、故障信息、設備壽命等重要信息,這為裝備的維護保障提供了科學的數據,本文主要介紹SQLite數據庫在雷達日志管理中的設計及應用。
與傳統C/S結構的各種大型關系數據庫(如Oracle,SQL Server,MySQL等)相比,SQLite是一個輕量級的關系數據庫,具有三級模式的結構體系,即用戶模式、邏輯模式和存儲模式[1]。相對于傳統數據庫,SQLite具有更好的實時性、系統開銷小、底層控制能力強。SQLite能夠高效地利用有限資源、提高數據的存取速度、增強系統的安全性,并具有如下關鍵特點[2]:
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庫,即使使用不同語言的API,在底層仍然使用C庫執行。SQL語句通過接口進入到高效的SQL編譯器,由標記處理器(Tokenizer)分解成分析器(Parser)可以識別的各個標志符,然后由分析器重新組合標志符并調用代碼生成器(Code Generator)生成虛擬機器碼,交由虛擬機(Virtual Machine)去執行,最終完成SQL語句指定的任務。虛擬機是SQLite內部結構的核心,不僅完成與數據操作相關的全部操作,而且還是客戶和存儲之間信息進行交換的中間單元。數據庫按照B樹(B-tree)的形式存儲在磁盤上,通過可調整的頁面緩沖(Pager)獲得對數據的快速查找和存儲。為了方便移植,SQLite使用一個抽象層接口(OS Interface)與不同操作系統進行對接。
SQLite數據庫在雷達中的部署如圖2所示。雷達綜合監控計算機作為雷達監控系統的“中樞神經”,實現發射監控、接收監控、伺服監控、信號監控、終端監控的狀態信息采集、識別、分類與處理,通過以太網發送給雷達顯控計算機,雷達顯控軟件對各分系統的狀態進行識別、分類、編碼后,錄入嵌入式數據庫SQLite中,完成系統狀態的日志記錄;雷達顯控接收操縱員的控制命令,完成雷達整機的工作狀態控制,這些控制命令進行分類編碼后通過內部以太網發送到綜合監控,由綜合監控完成控制日志的統一管理;操縱員通過雷達顯控發出日志查詢指令時,由綜合監控通過SQLite數據庫接口實現日志的快速檢索,把結果返回給雷達顯控進行實時顯示。

圖2 SQLite數據庫部署圖
SQLite數據庫創建及連接接口函數為sqlite3_open,在綜合監控中的實現如下:


所謂日志,是指系統或設備所指定對象的某些操作及其操作結果按時間有序的集合[4]。日志由日志記錄組成,每條日志記錄描述了一次單獨的事件。與一般的原始數據相比,日志通常是一種半結構化的數據,它包含了一個時間戳和一個消息或者系統所特有的其他信息。日志是系統狀態變化的反映,是對系統的狀態和活動的流水記錄[5]。
雷達日志可分為操作日志、故障日志、狀態日志、告警日志,如圖3所示。對日志進行分類記錄有利于操縱員按類型進行查詢檢索,方便系統維護管理。操作日志記錄雷達操縱員控制輸入指令信息,用于完整記錄雷達的控制流程,包括操縱員信息、控制對象、控制指令、控制參數、時間等;故障日志記錄雷達的故障信息,用于分析雷達故障發生的背景及故障原因,包括故障名稱、所屬分系統、故障時間;狀態日志記錄雷達工作狀態參數信息,包括天線轉速、工作頻率、信號處理參數、發射機功率參數、定北參數等;告警日志記錄雷達的異常信息、嚴重故障的重要信息。

圖3 SQLite的內部結構
根據雷達日志的分類及特點,需要創建3張表,分別是日志類別表、日志類型表、日志記錄表,SQL語句的接口函數為SQLITE_API int sqlite3_exec(sqlite3?,const char?sql,int(?callback)(void?,int,char??,char??),void?,char??errmsg)。
1)日志類別表
日志類別表用于存放4種類日志的結構信息,其結構如表1所示。

表1 日志類別表
添加日志類別的SQL語句為:“INSERT INTO TABLE_LOG_KIND(Log KindID,Log Kind-Name)VALUES(%d,′%s′);”。
2)日志類型表
日志類型表用于存放雷達日志詳細分類的結構信息,包括類型編號、所屬類別、類型代碼、類型名稱,其結構如表2所示。
創建日志類型表的SQL語句為:“CREATE TABLE IF NOT EXISTS TABLE_LOG_TYPE(Log TypeID INTEGER PRIMARY KEY AUTOINCREMENT,Log KindID INTEGER,Log-TypeCode VARCHAR(20),Log Type Name VARCHAR(50));”。
添加日志類型的SQL語句為:“INSERT INTO TABLE_LOG_TYPE(Log KindID,Log TypeCode,Log TypeName)VALUES(%d,′%s′,′%s′);”。
3) 日志記錄表
日志記錄表用于記錄雷達運行過程的操作及狀態的真實信息,包括日志編號、所屬日志類型、日志參數、用戶名、日志產生時間,其結構如表3所示。

表3 日志記錄表
創建日志記錄表的SQL語句為:“CREATE TABLE IF NOT EXISTS TABLE_LOG_RECORD(RecordID INTEGER PRIMARY KEY AUTOINCREMENT,Log TypeID INTEGER,LogPara BLOB,User Name VARCHAR(20),Record Time REAL);”。
添加雷達日志記錄的SQL語句為:“INSERT INTO TABLE_LOG_RECORD(Log TypeID,LogPara,User Name,Record Time)VALUES(%d,′%s′,′%s′,%f);”。
檢索雷達日志的SQL語句為:“SELECT RecordID,TABLE_LOG_RECORD.Log TypeID,LogPara,User Name,Record Time FROM TABLE_LOG_RECORD,TABLE_LOG_TYPE”。
數據庫的記錄主要用于對事件及行為的實時存儲,而數據庫的檢索則用于業務的分析及事務的處理,也是日志管理最終的結果體現。在SQLite中,數據庫的檢索包括如下接口函數:


數據庫檢索結果的人機界面顯示如圖4所示。

圖4 數據庫檢索及顯示
SQLite以體積小巧、快速高效、穩定可靠、易移植性好等優勢成為嵌入式數據庫領域的新寵。本文介紹了SQLite數據庫在雷達系統中的部署、數據庫表結構的設計,以及日志的記錄與檢索方法。工程實踐表明,SQLite數據庫具有存儲量大、性能高和跨平臺的特點,能夠滿足雷達系統中對日志數據存儲和管理的功能需求。
[1]ALLEN G,OWENS M.SQLite權威指南[M].2版.楊謙,劉義宣,謝志強,譯.北京:電子工業出版社,2012.
[2]王春艷,李帥.SQLite在飛艇監控中的應用與優化[J].雷達科學與技術,2014,12(6):609-612.WANG Chunyan,LI Shuai.Optimization and Appli-cation of SQLite in Monitoring and Control System of Airship[J].Radar Science and Technology,2014,12(6):609-612.(in Chinese)
[3]SQLite.The Architecture of SQLite[EB/OL].[2015-06-21].http://www.sqlite.org/arch.html.
[4]林曉東,劉心松.文件系統中日志技術的研究[J].計算機應用,1998,18(1):28-30.
[5]羅自立,薛質,李建華.基于Linux環境的主機日志自動審計技術[J].信息安全與通信保密,2004(7):43-45.