• 
    

    
    

      99热精品在线国产_美女午夜性视频免费_国产精品国产高清国产av_av欧美777_自拍偷自拍亚洲精品老妇_亚洲熟女精品中文字幕_www日本黄色视频网_国产精品野战在线观看 ?

      基于SQLite數(shù)據(jù)庫的歷史航跡管理系統(tǒng)設(shè)計與開發(fā)

      2020-12-07 06:08:03劉峰陳福良
      計算機時代 2020年11期
      關(guān)鍵詞:數(shù)據(jù)庫

      劉峰 陳福良

      摘? 要: 為了解決指控系統(tǒng)中對實時目標歷史航跡的顯示需求,設(shè)計了一種基于SQLite數(shù)據(jù)庫的歷史航跡管理系統(tǒng)。結(jié)合當前指控系統(tǒng)的實際情況,將歷史航跡管理系統(tǒng)劃分為系統(tǒng)外部通信模塊、態(tài)勢處理模塊、存儲處理模塊和人機交互模塊。在商用計算機上對系統(tǒng)存儲和查詢性能進行了測試,測試結(jié)果滿足指控系統(tǒng)的實際使用需求。

      關(guān)鍵詞: 指控系統(tǒng); 歷史航跡; 數(shù)據(jù)庫; SQLite

      中圖分類號:TP311.1? ? ? ? ? 文獻標識碼:A? ? ?文章編號:1006-8228(2020)11-58-05

      Abstract: In order to solve the requirement of displaying the real-time target historical voyage track in the Command and Control System, this paper designs a historical track management system by using SQLite database. Combining with the actual situation of the current Command and Control System, the historical track management system is divided into external communication module, situation processing module, storage processing module and human-computer interaction module. The system is implemented on a commercial computer,and its storage and query performance are tested, the test results meet the actual requirements of the Command and Control System.

      Key words: Command and Control System; historical track; database; SQLite

      0 引言

      隨著艦船裝備雷達系統(tǒng)的快速發(fā)展,在對目標定位過程中,產(chǎn)生海量的航跡數(shù)據(jù),而現(xiàn)有的指控系統(tǒng)中,為了保證實時目標的響應(yīng)時間,一般只支持目標少量歷史航跡點的顯示。但是在實際指揮引導(dǎo)的過程中,指揮員需要對目標的歷史軌跡數(shù)據(jù)與實時航跡進行對比分析,特別是對一些重點關(guān)注的目標進行分析,以確定目標的威脅等級、具體型號。因此需要存儲海量歷史航跡數(shù)據(jù),并支持指揮人員快速查詢某批目標的歷史航跡數(shù)據(jù)。

      然而,現(xiàn)階段歷史軌跡存儲管理技術(shù)不夠完善[2],并且現(xiàn)有的航跡存儲系統(tǒng)往往基于Hadoop、HBase等分布式計算存儲框架[3],對整個指控系統(tǒng)的軟件架構(gòu)和資源占用要求比較高,因此如何適配指控系統(tǒng),并做到高效地存儲和查詢歷史航跡數(shù)據(jù),成為本系統(tǒng)設(shè)計的重點和難點。

      本文從此實際需求出發(fā),設(shè)計了基于SQLite數(shù)據(jù)庫的歷史航跡管理系統(tǒng),并采用Qt進行開發(fā),以適配不同的操作系統(tǒng)。

      1 系統(tǒng)架構(gòu)

      歷史航跡管理系統(tǒng)接收指控系統(tǒng)內(nèi)的實時態(tài)勢報文和指揮人員的查詢輸入,按照輸入的查詢規(guī)則,從數(shù)據(jù)庫中查詢符合輸入條件的數(shù)據(jù),并將查詢結(jié)果打包發(fā)送出去,將整個系統(tǒng)劃分為外部通信模塊、態(tài)勢處理模塊、存儲處理模塊、人機交互模塊四個部分(見圖1),其中外部通信模塊采用接口適配的開發(fā)思想,適配整個系統(tǒng)與外部指控系統(tǒng)之間的通信協(xié)議,系統(tǒng)內(nèi)部各個模塊之間通過消息隊列機制來進行數(shù)據(jù)同步。

      外部通信模塊把從指控系統(tǒng)獲取到的目標態(tài)勢數(shù)據(jù)轉(zhuǎn)換為內(nèi)部消息格式發(fā)送到態(tài)勢處理模塊,態(tài)勢處理模塊接收到內(nèi)部消息數(shù)據(jù),提取其中的位置信息,建立數(shù)據(jù)緩存隊列,當隊列長度到達一定閾值后,將隊列中的數(shù)據(jù)發(fā)送至存儲處理模塊進行入庫處理。存儲處理模塊負責對接收到的數(shù)據(jù)入庫保存,同時,響應(yīng)人機交互模塊的查詢請求,從本地SQLITE數(shù)據(jù)文件中載入符合條件的航跡數(shù)據(jù)信息。

      人機交互模塊接收人機交互界面的查詢請求,調(diào)用存儲處理模塊提供的查詢接口,返回滿足用戶查詢請求的數(shù)據(jù)。

      2 外部通信模塊

      外部通信模塊目前采用服務(wù)總線(DDS)的方式獲取數(shù)據(jù),它是現(xiàn)階段指控系統(tǒng)常用的信息傳輸?shù)募軜?gòu),用來完成指控系統(tǒng)內(nèi)不同應(yīng)用軟件之間的信息交互。具體方式如圖2所示,通過DDS歷史航跡管理系統(tǒng)可以訂閱系統(tǒng)內(nèi)的實時態(tài)勢情報態(tài)勢,并轉(zhuǎn)換為內(nèi)部的信息格式發(fā)送給態(tài)勢處理模塊。

      外部通信模塊作為本系統(tǒng)與外部指控系統(tǒng)之間的通信協(xié)議轉(zhuǎn)換中間層,可以將歷史航跡管理系統(tǒng)與外部指控系統(tǒng)解耦,并且通過修改此模塊可以達到適配采用不同通信架構(gòu)的指控系統(tǒng)。

      3 態(tài)勢處理模塊

      態(tài)勢處理模塊將從外部通信模塊接收到的數(shù)據(jù)發(fā)送至存儲處理模塊。SQLite數(shù)據(jù)庫作為一種文件數(shù)據(jù)庫,存儲數(shù)據(jù)操作相當于文件操作,而態(tài)勢數(shù)據(jù)通過網(wǎng)絡(luò)進行接收,因此為了解決數(shù)據(jù)接收與數(shù)據(jù)庫文件讀寫速度不匹配的問題,采用數(shù)據(jù)緩存隊列對態(tài)勢數(shù)據(jù)進行預(yù)先保存,整個運行流程如圖3所示。

      態(tài)勢處理模塊創(chuàng)建態(tài)勢數(shù)據(jù)接收線程,對接收到的態(tài)勢數(shù)據(jù),提取其中的位置信息,緩存到內(nèi)部數(shù)據(jù)隊列中,當隊列中的數(shù)據(jù)達到一定數(shù)量(此閾值可根據(jù)實際每秒中接收到的報文數(shù)量進行設(shè)置,目前設(shè)置為1000)時,將整個數(shù)據(jù)隊列,通過事件的方式發(fā)送到數(shù)據(jù)庫處理模塊,進行入庫保存,程序流程圖如圖4所示。

      4 存儲處理模塊

      4.1 模塊設(shè)計

      存儲處理模塊采用SQLite數(shù)據(jù)庫進行航跡數(shù)據(jù)存儲,SQLite作為一種輕量級數(shù)據(jù)庫,支持單生產(chǎn)者多消費者的設(shè)計模式,因此存儲處理模塊在初始化時,預(yù)先創(chuàng)建數(shù)據(jù)庫寫入線程以及數(shù)據(jù)庫查詢線程。

      數(shù)據(jù)寫入線程通過Qt事件消息隊列接收態(tài)勢處理模塊打包發(fā)送的態(tài)勢數(shù)據(jù),數(shù)據(jù)讀取線程則響應(yīng)人機交互模塊轉(zhuǎn)發(fā)的外部查詢請求,采用多線程處理模式,創(chuàng)建數(shù)據(jù)存儲和數(shù)據(jù)查詢線程,提升系統(tǒng)對外部查詢請求的響應(yīng),具體結(jié)構(gòu)如圖5所示。

      4.2 庫表設(shè)計

      本系統(tǒng)主要提供單批目標在一段時間內(nèi)的航跡位置數(shù)據(jù),為了提高查詢的效率,每批目標單獨建立庫表,單個批號表中包含時間、經(jīng)度、緯度、目標類型、航速、航向等列,用來存儲目標的位置數(shù)據(jù),并以時間順序進行保存,目標庫表如圖6所示。

      目前指控系統(tǒng)單日接收的態(tài)勢數(shù)據(jù)量在千萬級,單個目標表日增加數(shù)據(jù)在5萬行左右的,隨著時間積累,如果不對時間進行處理的話,存儲的數(shù)據(jù)量將逐漸增加,導(dǎo)致整個數(shù)據(jù)庫查詢性能的下降。為了解決此問題,存儲目標航跡數(shù)據(jù)時,使用多個數(shù)據(jù)庫文件來保存歷史航跡數(shù)據(jù),具體做法為:以天為周期,使用當前日期為名稱,每天自動建立對應(yīng)日期的數(shù)據(jù)庫文件。減少庫表中目標記錄,顯著提升查詢的時間性能。

      4.3 數(shù)據(jù)寫入線程

      數(shù)據(jù)寫入線程初始化時,將根據(jù)當前系統(tǒng)時間,創(chuàng)建對應(yīng)日期的db文件,通過事務(wù)方式將從態(tài)勢處理模塊接收到的數(shù)據(jù)寫入數(shù)據(jù)庫,具體的偽代碼如下:

      Begin

      CreateSQLITEFile(time)

      ConnectDB()

      Transction() //開啟事務(wù)

      For(int i=0; i

      bool isCreate=JugeTime

      if isCreate

      CreateSQLITEFile(time)

      ConnectDB()

      Insert_sql()

      Commit() //提交事務(wù)

      End

      其中,函數(shù)CreateSQLITEFile(time)根據(jù)傳入的1970s的絕對時間,生成相應(yīng)日期的數(shù)據(jù)庫文件;ConnectDB()函數(shù)的作用是連接本機的SQLite數(shù)據(jù)庫文件,采用QSqlDatabase類來進行數(shù)據(jù)庫操作;函數(shù)JugeTime()用來判斷態(tài)勢數(shù)據(jù)的時間是否超過今天日期,如果超過,則需要重新建立新的日期的數(shù)據(jù)庫文件;函數(shù)Transction()設(shè)置開始事務(wù),采用事務(wù)方式的原因是當SQLite插入數(shù)據(jù)時,默認將單條Insert語句作為事務(wù)進行操作,有多少條數(shù)據(jù)就會產(chǎn)生多少次磁盤操作,而循環(huán)使用Insert語句插入數(shù)據(jù)庫的效率遠低于通過事務(wù)方式插入[4];函數(shù)Commit()提交事務(wù),完成整個寫入數(shù)據(jù)庫操作。具體流程圖如圖7所示。

      4.4 數(shù)據(jù)讀取線程

      數(shù)據(jù)讀取線程接收人機交互模塊發(fā)送的查詢請求,定義查詢請求結(jié)構(gòu)如圖8所示。

      其中uIP表示查詢請求方的IP地址,iBatch表示查詢的目標批號,dfStartTime,dfEndTime表示航跡數(shù)據(jù)的起始時間。當接收到查詢請求時,數(shù)據(jù)讀取線程首先根據(jù)查詢的起始時間,生成需要讀取的數(shù)據(jù)庫文件列表,按照查詢的時間順序,依次打開數(shù)據(jù)庫文件,調(diào)用SQLite查詢接口,查詢目標批號的航跡數(shù)據(jù),對查詢到的數(shù)據(jù),分包發(fā)送至人機交互模塊,由人機交互模塊將查詢數(shù)據(jù)發(fā)送給查詢方,偽代碼如下:

      Beigin

      sql_query=CreateSql(QueryCtrl)

      namelist=GetSQLITEDBfileName(start, end)

      For(int i=0; i

      OpenDBFile(filename)

      data=Query_sql(sql_query)

      Package(data)

      End

      其中,函數(shù)CreateSql(QueryCtrl),根據(jù)接收到的查詢請求,生成相應(yīng)的sql語句;函數(shù)GetSQLITEDBfileName(start,end),根據(jù)查詢請求中的起始時間,生成需要讀取db文件列表;函數(shù)OpenDBFile(filename)根據(jù)輸入的文件名稱,連接數(shù)據(jù)庫db文件;函數(shù)Query_sql(querystring)執(zhí)行生成的sql查詢語句,返回從SQLite數(shù)據(jù)庫查詢到的歷史航跡數(shù)據(jù);函數(shù)Package(data)將查詢到的航跡數(shù)據(jù)打包,并將打包后的查詢結(jié)果通過數(shù)據(jù)服務(wù)總線發(fā)送至請求方,具體流程圖如圖9所示。

      5 人機交互模塊

      主要響應(yīng)外部其他應(yīng)用軟件的查詢指令,由于態(tài)勢處理模塊設(shè)計緩存隊列緩存數(shù)據(jù),為了保證查詢結(jié)果的時效性,接收到查詢指令后,人機交互模塊發(fā)送更新指令到態(tài)勢處理模塊,接收到更新指令后,態(tài)勢處理模塊會將當前緩存隊列中的所有數(shù)據(jù)發(fā)送到存儲處理模塊進行入庫保存,存儲處理模塊寫入線程完成后將通過Qt事件,傳遞信號給人機交互模塊,當收到數(shù)據(jù)寫入完成信號時,再將查詢請求轉(zhuǎn)發(fā)至存儲處理模塊,此時存儲模塊再處理數(shù)據(jù)查詢請求,整個時序如圖10所示。

      6 試驗測試

      6.1 試驗測試環(huán)境

      在商用計算機上測試軟件性能,測試環(huán)境如下。

      ⑴ 硬件環(huán)境:處理器:Intel(R)Core(TM)i7-7700K CPU@4.2GHz,內(nèi)存:16GB。

      ⑵ 軟件環(huán)境:Win7 64位操作系統(tǒng)。

      6.2 試驗測試結(jié)果分析

      ⑴ 數(shù)據(jù)寫入性能測試

      每隔2s發(fā)送1000批航跡點,并將緩存隊列閾值設(shè)置為1000,共進行5組測試,取10次試驗的平均耗時為測試結(jié)果,記錄時間性能測試結(jié)果如表1所示。

      ⑵ 數(shù)據(jù)查詢性能測試

      查詢符合時間范圍的航跡數(shù)據(jù),共進行5組測試,取10次試驗的平均耗時為測試結(jié)果,數(shù)據(jù)查詢性能測試結(jié)果如表2所示。

      根據(jù)實際測試結(jié)果,系統(tǒng)平均寫入時間為197.2ms,平均讀取時間為49.2ms,遠低于航跡發(fā)送周期2s,滿足指控系統(tǒng)對歷史航跡存儲和查詢的需求。

      7 結(jié)束語

      本文針對指控系統(tǒng)中對目標歷史航跡數(shù)據(jù)存儲和查詢的需求,設(shè)計了系統(tǒng)的總體框架,明確了系統(tǒng)內(nèi)部的信息流程以及和外部指控系統(tǒng)間的通信方式,并在此基礎(chǔ)上劃分了具體工作的各個功能模塊,采用Qt對各個功能模塊進行開發(fā)實現(xiàn)。通過對軟件存儲數(shù)據(jù)和查詢數(shù)據(jù)的時間性能進行測試,本系統(tǒng)符合歷史航跡存儲量大、查詢性能高和跨平臺的要求,可以滿足指控系統(tǒng)對實時目標歷史航跡顯示的需求。

      參考文獻(References):

      [1] Sunny Kumar Aditya & Vikash KumarKarn.Android SQLite Essentials[M].Packt Publishing Limited,2014.8.26.

      [2] 格蘭特·艾倫,邁克·歐文斯.SQLite 權(quán)威指南(第2版)[M].電子工業(yè)出版社,2012.

      [3] 程棟.SQLite數(shù)據(jù)庫在數(shù)據(jù)分發(fā)服務(wù)中的應(yīng)用[J].信息技術(shù),2014.6.

      [4] 盛凱,劉忠,周德超.基于PostGIS的歷史航跡重演分析系統(tǒng)設(shè)計與開發(fā)[J].海軍工程大學(xué)學(xué)報,2017.10.

      [5] 孟凡君,曹偉,管志強.海量雷達數(shù)據(jù)異常軌跡分析[J].電子科技,2017(30)-1.

      [6] 孫曉全,熊永嶺,張艷娜.Android系統(tǒng)中SQLite數(shù)據(jù)庫使用效率研究[J].電子設(shè)計工程,2015.4.

      [7] 林培杰,朱安南,程樹英.Android數(shù)據(jù)庫SQLite性能優(yōu)化[J].計算機系統(tǒng)應(yīng)用,2014.23.

      [8] 王丹,孔祥偉,何良.SQLite輕型數(shù)據(jù)庫在試飛領(lǐng)域的應(yīng)用[J].中國科技信息.2019.9.

      [9] 孫成.基于智能設(shè)備的嵌入式數(shù)據(jù)庫安全性研究[D].吉林大學(xué),2015.

      猜你喜歡
      數(shù)據(jù)庫
      數(shù)據(jù)庫
      財經(jīng)(2017年15期)2017-07-03 22:40:49
      數(shù)據(jù)庫
      財經(jīng)(2017年2期)2017-03-10 14:35:35
      兩種新的非確定數(shù)據(jù)庫上的Top-K查詢
      數(shù)據(jù)庫
      財經(jīng)(2016年15期)2016-06-03 07:38:02
      數(shù)據(jù)庫
      財經(jīng)(2016年3期)2016-03-07 07:44:46
      數(shù)據(jù)庫
      財經(jīng)(2016年6期)2016-02-24 07:41:51
      數(shù)據(jù)庫
      財經(jīng)(2015年3期)2015-06-09 17:41:31
      數(shù)據(jù)庫
      財經(jīng)(2014年21期)2014-08-18 01:50:18
      數(shù)據(jù)庫
      財經(jīng)(2014年6期)2014-03-12 08:28:19
      數(shù)據(jù)庫
      財經(jīng)(2013年6期)2013-04-29 17:59:30
      盐山县| 牙克石市| 荃湾区| 陵川县| 玉林市| 英德市| 乌苏市| 南城县| 莆田市| 稻城县| 兴业县| 金秀| 汤原县| 阳江市| 民勤县| 台安县| 昆明市| 宣城市| 双鸭山市| 东台市| 洛阳市| 河南省| 怀仁县| 荔浦县| 诸城市| 任丘市| 唐山市| 元氏县| 南投县| 南靖县| 平凉市| 界首市| 太谷县| 林州市| 呈贡县| 延边| 铁岭县| 潮安县| 二连浩特市| 镇康县| 安塞县|