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