(中國電子科技集團公司第三十八研究所,安徽合肥230088)
軍事雷達作為戰(zhàn)爭的產物和軍中“千里眼”,從出現(xiàn)至今,已經成為各軍事大國不遺余力地競相發(fā)展的裝備設施。隨著技術的發(fā)展,現(xiàn)代雷達系統(tǒng)越來越復雜,這給雷達狀態(tài)監(jiān)視及使用維護提出了新的挑戰(zhàn)。日志管理功能可以記錄并管理雷達生命周期內的工作過程狀態(tài),包括雷達的控制、狀態(tài)參數(shù)、故障信息、設備壽命等重要信息,這為裝備的維護保障提供了科學的數(shù)據,本文主要介紹SQLite數(shù)據庫在雷達日志管理中的設計及應用。
與傳統(tǒng)C/S結構的各種大型關系數(shù)據庫(如Oracle,SQL Server,MySQL等)相比,SQLite是一個輕量級的關系數(shù)據庫,具有三級模式的結構體系,即用戶模式、邏輯模式和存儲模式[1]。相對于傳統(tǒng)數(shù)據庫,SQLite具有更好的實時性、系統(tǒng)開銷小、底層控制能力強。SQLite能夠高效地利用有限資源、提高數(shù)據的存取速度、增強系統(tǒng)的安全性,并具有如下關鍵特點[2]:
1)零配置。SQLite在使用前不需要安裝設置,不需要進程來啟動、停止或配置,不需要管理員去創(chuàng)建新數(shù)據庫或分配用戶權限,在系統(tǒng)崩潰或失電之后自動恢復。
2)支持絕大多數(shù)SQL-92標準的SQL命令,支持視圖、觸發(fā)器,支持嵌套SQL,具有事務處理功能,自動維護事務的完整性、原子性等特性,支持實體完整性和參照完整性。
3)無需安裝數(shù)據庫引擎。使用SQLite時,訪問數(shù)據庫的程序直接從磁盤上的數(shù)據庫文件讀寫,沒有中間的服務器進程。
4)支持多種開發(fā)語言和數(shù)據庫平臺無關性,支持大多數(shù)計算機語言,支持 Windows/Linux/Unix/Mac OS等主流的操作系統(tǒng),可實現(xiàn)數(shù)據庫文件在機器之間自由共享。
5)精簡性與簡單訪問。優(yōu)化后整個SQLite庫小于225 KB。一個SQLite數(shù)據庫是一個單獨的普通磁盤文件,能夠被定位在路徑層次的任何地方。
6)數(shù)據存儲量大。數(shù)據存儲在單個物理文件中,支持2 TB的數(shù)據存儲。
7)源碼完全開放。使用者可用于任何非商業(yè)和商業(yè)用途。
SQLite數(shù)據庫主要由4部分組成:內核(Core)、SQL編譯器(SQL Compiler)、后端(Backend)以及附件(Accessories),內部結構如圖1所示[3]。
最后,本文存在兩個問題可以進一步改進:第一,使用跨越時間更長的面板數(shù)據得到的兩步估計值更加穩(wěn)健,但由于數(shù)據局限,目前無法實施;第二,其他因素,如預期、相對收入等對主觀幸福感的影響在整個分布上的變化如何,以及中國其他群體,如農村居民、城市移民、老年人等主觀幸福感的決定因素用面板分位數(shù)回歸方法分析后得到的結論又有何異同,需要更深一步地研究。
圖1 SQLite的內部結構
SQLite的接口是一些已經編寫好的C庫,即使使用不同語言的API,在底層仍然使用C庫執(zhí)行。SQL語句通過接口進入到高效的SQL編譯器,由標記處理器(Tokenizer)分解成分析器(Parser)可以識別的各個標志符,然后由分析器重新組合標志符并調用代碼生成器(Code Generator)生成虛擬機器碼,交由虛擬機(Virtual Machine)去執(zhí)行,最終完成SQL語句指定的任務。虛擬機是SQLite內部結構的核心,不僅完成與數(shù)據操作相關的全部操作,而且還是客戶和存儲之間信息進行交換的中間單元。數(shù)據庫按照B樹(B-tree)的形式存儲在磁盤上,通過可調整的頁面緩沖(Pager)獲得對數(shù)據的快速查找和存儲。為了方便移植,SQLite使用一個抽象層接口(OS Interface)與不同操作系統(tǒng)進行對接。
SQLite數(shù)據庫在雷達中的部署如圖2所示。雷達綜合監(jiān)控計算機作為雷達監(jiān)控系統(tǒng)的“中樞神經”,實現(xiàn)發(fā)射監(jiān)控、接收監(jiān)控、伺服監(jiān)控、信號監(jiān)控、終端監(jiān)控的狀態(tài)信息采集、識別、分類與處理,通過以太網發(fā)送給雷達顯控計算機,雷達顯控軟件對各分系統(tǒng)的狀態(tài)進行識別、分類、編碼后,錄入嵌入式數(shù)據庫SQLite中,完成系統(tǒng)狀態(tài)的日志記錄;雷達顯控接收操縱員的控制命令,完成雷達整機的工作狀態(tài)控制,這些控制命令進行分類編碼后通過內部以太網發(fā)送到綜合監(jiān)控,由綜合監(jiān)控完成控制日志的統(tǒng)一管理;操縱員通過雷達顯控發(fā)出日志查詢指令時,由綜合監(jiān)控通過SQLite數(shù)據庫接口實現(xiàn)日志的快速檢索,把結果返回給雷達顯控進行實時顯示。
圖2 SQLite數(shù)據庫部署圖
SQLite數(shù)據庫創(chuàng)建及連接接口函數(shù)為sqlite3_open,在綜合監(jiān)控中的實現(xiàn)如下:
所謂日志,是指系統(tǒng)或設備所指定對象的某些操作及其操作結果按時間有序的集合[4]。日志由日志記錄組成,每條日志記錄描述了一次單獨的事件。與一般的原始數(shù)據相比,日志通常是一種半結構化的數(shù)據,它包含了一個時間戳和一個消息或者系統(tǒng)所特有的其他信息。日志是系統(tǒng)狀態(tài)變化的反映,是對系統(tǒng)的狀態(tài)和活動的流水記錄[5]。
雷達日志可分為操作日志、故障日志、狀態(tài)日志、告警日志,如圖3所示。對日志進行分類記錄有利于操縱員按類型進行查詢檢索,方便系統(tǒng)維護管理。操作日志記錄雷達操縱員控制輸入指令信息,用于完整記錄雷達的控制流程,包括操縱員信息、控制對象、控制指令、控制參數(shù)、時間等;故障日志記錄雷達的故障信息,用于分析雷達故障發(fā)生的背景及故障原因,包括故障名稱、所屬分系統(tǒng)、故障時間;狀態(tài)日志記錄雷達工作狀態(tài)參數(shù)信息,包括天線轉速、工作頻率、信號處理參數(shù)、發(fā)射機功率參數(shù)、定北參數(shù)等;告警日志記錄雷達的異常信息、嚴重故障的重要信息。
圖3 SQLite的內部結構
根據雷達日志的分類及特點,需要創(chuàng)建3張表,分別是日志類別表、日志類型表、日志記錄表,SQL語句的接口函數(shù)為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所示。
創(chuàng)建日志類型表的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) 日志記錄表
日志記錄表用于記錄雷達運行過程的操作及狀態(tài)的真實信息,包括日志編號、所屬日志類型、日志參數(shù)、用戶名、日志產生時間,其結構如表3所示。
表3 日志記錄表
創(chuàng)建日志記錄表的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”。
數(shù)據庫的記錄主要用于對事件及行為的實時存儲,而數(shù)據庫的檢索則用于業(yè)務的分析及事務的處理,也是日志管理最終的結果體現(xiàn)。在SQLite中,數(shù)據庫的檢索包括如下接口函數(shù):
數(shù)據庫檢索結果的人機界面顯示如圖4所示。
圖4 數(shù)據庫檢索及顯示
SQLite以體積小巧、快速高效、穩(wěn)定可靠、易移植性好等優(yōu)勢成為嵌入式數(shù)據庫領域的新寵。本文介紹了SQLite數(shù)據庫在雷達系統(tǒng)中的部署、數(shù)據庫表結構的設計,以及日志的記錄與檢索方法。工程實踐表明,SQLite數(shù)據庫具有存儲量大、性能高和跨平臺的特點,能夠滿足雷達系統(tǒng)中對日志數(shù)據存儲和管理的功能需求。
[1]ALLEN G,OWENS M.SQLite權威指南[M].2版.楊謙,劉義宣,謝志強,譯.北京:電子工業(yè)出版社,2012.
[2]王春艷,李帥.SQLite在飛艇監(jiān)控中的應用與優(yōu)化[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]林曉東,劉心松.文件系統(tǒng)中日志技術的研究[J].計算機應用,1998,18(1):28-30.
[5]羅自立,薛質,李建華.基于Linux環(huán)境的主機日志自動審計技術[J].信息安全與通信保密,2004(7):43-45.