国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

SQLite在半實物仿真系統(tǒng)中的應(yīng)用與優(yōu)化*

2013-12-10 03:53
彈箭與制導學報 2013年1期
關(guān)鍵詞:入庫硬盤內(nèi)存

周 帆

(中國兵器工業(yè)第203研究所,西安 710065)

0 引言

隨著精確制導武器的信息化程度不斷提高,制導部件、控制系統(tǒng)以及火控、偵指系統(tǒng)之間相互交換的數(shù)據(jù)量也隨之激增。半實物仿真中需要對過程變量進行實時記錄并存儲,便于設(shè)計人員進行事后分析。目前,一般的做法是,整個仿真實驗系統(tǒng)部署一臺數(shù)據(jù)庫服務(wù)器,數(shù)據(jù)采集單元將采集到的數(shù)據(jù)以文件形式保存,在實驗完成后將所有的數(shù)據(jù)文件通過特定的格式轉(zhuǎn)換腳本或轉(zhuǎn)換軟件導入數(shù)據(jù)庫。

這種應(yīng)用模式的問題是:1)應(yīng)用復雜度高。目前系統(tǒng)中一般都采用微軟的SQL Server、MySQL等數(shù)據(jù)庫產(chǎn)品,但這些產(chǎn)品都是面向大型企業(yè)級應(yīng)用,雖然其功能非常強大、成熟度很高,但配置復雜、使用難度較高以及需要專門的維護人員等約束使得部分實驗系統(tǒng)中的數(shù)據(jù)庫利用率極低,沒有起到應(yīng)有的作用。2)操作流程復雜。各種數(shù)據(jù)采集節(jié)點將數(shù)據(jù)按一定的格式保存,在導入數(shù)據(jù)庫時,需要針對不同的格式提供專門的工具進行數(shù)據(jù)抓取后錄入,增加了操作復雜度。3)價格昂貴,性價比低??紤]到半實物仿真實驗系統(tǒng)中一般只能用到數(shù)據(jù)庫系統(tǒng)相當小的一個功能子集,其性價比是相當?shù)偷摹?/p>

鑒于以上三點,文中提出了采用輕量級的嵌入式數(shù)據(jù)庫系統(tǒng)SQLite為基礎(chǔ)的半實物仿真系統(tǒng)設(shè)計方案。

1 SQLite簡介

1.1 SQLite的歷史

SQLite是一款輕量級的開放源碼數(shù)據(jù)管理系統(tǒng),支持絕大多數(shù)SQL92標準操作。最初是由D.Richard Hipp為美國海軍艦載反導系統(tǒng)設(shè)計,提供免安裝、免維護的數(shù)據(jù)存儲、管理能力,用于取代反導系統(tǒng)中龐大、復雜的Informix后端數(shù)據(jù)庫服務(wù)器。2000年夏天SQLite推出1.0版本,到目前為止,SQLite已經(jīng)發(fā)布3.7.11 版。

1.2 SQLite的特點

1)免維護。SQLite數(shù)據(jù)庫管理系統(tǒng)無需安裝即可直接使用,用戶可以直接對數(shù)據(jù)庫進行操作,不需要專門的數(shù)據(jù)庫管理員首先去創(chuàng)建相應(yīng)的數(shù)據(jù)庫實例。系統(tǒng)宕機或斷電不會導致數(shù)據(jù)丟失的問題。

2)無需服務(wù)器,通常使用的各種數(shù)據(jù)庫產(chǎn)品都有一個服務(wù)器進程,用戶需要對數(shù)據(jù)庫操作時都要用到一些進程間通信的方式來訪問數(shù)據(jù)庫。而對于SQLite來說,用戶進程可以對存儲在硬盤上的數(shù)據(jù)庫文件直接進行操作,不需要任何中間環(huán)節(jié)。

3)單一數(shù)據(jù)庫文件。SQLite數(shù)據(jù)庫和硬盤上的一個普通文件沒有任何區(qū)別,可以直接刪除,或移動到其它任何目錄或載體中。而普通的數(shù)據(jù)庫管理系統(tǒng)一般都把數(shù)據(jù)庫文件放在一個特定的目錄下,只有數(shù)據(jù)庫管理系統(tǒng)可以訪問它,雖然這增加了數(shù)據(jù)的安全性,但是隨之而來的建立和維護復雜度卻大大提高。

4)穩(wěn)定的跨平臺支持能力。SQLite數(shù)據(jù)庫文件格式是跨平臺的,一旦數(shù)據(jù)庫文件創(chuàng)建后,不論是Windows、類Unix平臺,32位或64位平臺都可以直接使用。

5)占用資源少,處理速度快,經(jīng)過優(yōu)化的SQLite僅為350KiB左右。

2 SQLite在半實物仿真系統(tǒng)中的部署

某型精確制導武器半實物仿真系統(tǒng)中,采用SQLite取代原先的SQL Server 2000數(shù)據(jù)庫,系統(tǒng)部署圖如圖1所示。

圖1 SQLite在仿真系統(tǒng)中的部署圖

SQLite數(shù)據(jù)庫直接部署在數(shù)據(jù)采集節(jié)點上,采集節(jié)點的業(yè)務(wù)邏輯不用發(fā)生任何改變,只需要將對文件的操作替換為對本地SQLite數(shù)據(jù)庫的操作即可。下面給出使用SQLite實現(xiàn)采集節(jié)點業(yè)務(wù)邏輯的代碼片段:

至此,數(shù)據(jù)庫就已準備就緒可以通過SQL語句進行操作了。在數(shù)據(jù)記錄線程中,首先從數(shù)據(jù)總線或數(shù)據(jù)緩沖區(qū)讀取一幀數(shù)據(jù),然后將數(shù)據(jù)組幀到一條SQL的insert語句中,再通過SQLite3_exec執(zhí)行這條insert語句即可數(shù)據(jù)的入庫操作:

最后,使用SQLite3_close(db)關(guān)閉數(shù)據(jù)庫即完成了一次數(shù)據(jù)記錄與入庫的操作。

在該半實物仿真系統(tǒng)中,需記錄的過程變量為60~80個,這里以80個為例,即每次向數(shù)據(jù)庫中插入80個變量,進行100次插入操作考察數(shù)據(jù)錄入的時間。圖2給出了將數(shù)據(jù)寫入數(shù)據(jù)庫的時間測試結(jié)果(測試平臺:硬件:Intel Pentium Dual 2.2GHz,1GB DDR2內(nèi)存,7200RPM SATA-II硬盤,軟件:Windows XP sp2 ,visual studio C++6.0 sp6,SQLite 3.7.11)。

圖2 數(shù)據(jù)庫插入操作時間

3 數(shù)據(jù)庫優(yōu)化

從圖2可以看出,直接使用SQLite執(zhí)行一條SQL的插入語句時延范圍在78~157ms,均值為98.29ms。數(shù)據(jù)表明這樣的數(shù)據(jù)錄入效率將嚴重影響記錄節(jié)點的運行,對于項目采樣頻率為1kHz的需求而言,一次數(shù)據(jù)錄入將導致丟失100幀的數(shù)據(jù)。這種情況下,如果要使用SQLite數(shù)據(jù)庫,只能在采集任務(wù)開始前,開辟足夠的內(nèi)存空間,所有的數(shù)據(jù)先記錄在內(nèi)存中,待一次采集任務(wù)完成后將所有數(shù)據(jù)再插入數(shù)據(jù)庫中。這種方案有兩個問題:1)采集任務(wù)完成后的數(shù)據(jù)錄入過程耗時過長,這里還是以每幀80個變量為例,數(shù)據(jù)采集時間為20s,采集完成后的數(shù)據(jù)入庫時延如圖3所示,橫坐標為測試次數(shù),縱坐標為數(shù)據(jù)錄入時間(單位:min)。雖然對數(shù)據(jù)采集與保存本身沒影響,但30min左右的數(shù)據(jù)入庫時間是無法容忍的。2)對于長時間的數(shù)據(jù)采集任務(wù),有內(nèi)存耗盡的潛在問題。

這里提出兩種解決方案。1)對大批量數(shù)據(jù)入庫操作進行優(yōu)化,縮短數(shù)據(jù)錄取時間;2)優(yōu)化數(shù)據(jù)庫單次插入數(shù)據(jù)的延時,采用多線程技術(shù)在數(shù)據(jù)采集的同時完成數(shù)據(jù)的入庫工作。

圖3 批量數(shù)據(jù)入庫時間

3.1 使用事務(wù)

在數(shù)據(jù)庫管理系統(tǒng)中,事務(wù)(Transaction)被定義為對特定數(shù)據(jù)庫的一組SQL操作,這組對數(shù)據(jù)庫的操作要么全部執(zhí)行,要么都不執(zhí)行。在SQLite中每一條INSERT/UPDATE語句都默認的被當作一個事務(wù)被執(zhí)行,每一次執(zhí)行就涉及一次數(shù)據(jù)庫的打開-寫數(shù)據(jù)庫-關(guān)閉數(shù)據(jù)庫的操作,因此大大延長了數(shù)據(jù)庫操作的時間。因此,可以將批量的INSERT/UPDATE語句顯式的定義為一組事務(wù),代碼如下所示:

圖4為使用事務(wù)處理批量插入后的系統(tǒng)數(shù)據(jù)錄入所需的時間。

對比圖3可以看出,使用事務(wù)處理后,系統(tǒng)的數(shù)據(jù)錄入時間縮短到優(yōu)化前的約1/900。以達到用戶可接受的范圍。

圖4 采用事務(wù)后批量數(shù)據(jù)入庫時間

3.2 關(guān)閉synchronous選項

SQLite的同步(synchronous)選項相當于一種同步IO機制,所有對數(shù)據(jù)庫的修改都必須等待本次操作寫入到磁盤上后才返回。當頻繁的對數(shù)據(jù)庫進行INSERT/UPDATE時,可以選擇關(guān)閉同步選項,進一步提高數(shù)據(jù)入庫的速度:

圖5是關(guān)閉同步選項前后,批量數(shù)據(jù)錄入時間的對比。

可以看到關(guān)閉同步選項后,數(shù)據(jù)錄入操作時間可再縮短100ms左右。

圖5 同步選項對批量數(shù)據(jù)錄入時間影響對比

3.3 替換默認的

上面針對數(shù)據(jù)采集完成后,數(shù)據(jù)批量入庫時的性能進行了優(yōu)化。如果希望在數(shù)據(jù)采集的同時進行數(shù)據(jù)的入庫工作,那么可以組合使用關(guān)閉同步選項以及更改 SQLite默認日志模式的方式來提高單次INSERT操作的效率。SQLite中日志是在系統(tǒng)遇到宕機或斷電時用來恢復數(shù)據(jù)庫,保持數(shù)據(jù)庫完整性的措施,默認情況下日志是隨著對數(shù)據(jù)庫的操作一起寫入磁盤的,這里可以將其修改為內(nèi)存記錄模式:

圖6 優(yōu)化后單次數(shù)據(jù)插入時間對比

);

圖6為針對單次插入數(shù)據(jù)庫操作使用不同優(yōu)化選項的測試結(jié)果。

結(jié)合以上提到的集中優(yōu)化策略,向SQLite中單次插入數(shù)據(jù)的時間可以控制在0.2ms以內(nèi),是優(yōu)化前的1/500。對于采樣周期為1ms的采集節(jié)點,完全能夠?qū)崿F(xiàn)邊采樣邊入庫的操作模式。

3.4 使用內(nèi)存數(shù)據(jù)庫模式

SQLite的內(nèi)存數(shù)據(jù)庫模式就是直接將數(shù)據(jù)庫創(chuàng)建在主存中,相對于磁盤,內(nèi)存的數(shù)據(jù)讀寫速度要高出幾個數(shù)量級,將數(shù)據(jù)保存在內(nèi)存中相比從磁盤上訪問能夠極大的提高應(yīng)用的性能。圖7是采用內(nèi)存數(shù)據(jù)庫模式時,數(shù)據(jù)入庫的時間與優(yōu)化后的磁盤數(shù)據(jù)庫單次插入數(shù)據(jù)時間對比曲線。

采用內(nèi)存數(shù)據(jù)庫,在不進行任何優(yōu)化時的單次數(shù)據(jù)錄入時間與優(yōu)化后的磁盤數(shù)據(jù)庫基本相當。因此在采集節(jié)點也可采用內(nèi)存數(shù)據(jù)庫的模式實現(xiàn)數(shù)據(jù)的邊采集邊錄入。

圖7 內(nèi)存數(shù)據(jù)庫模式數(shù)據(jù)入庫時間

3.5 使用SSD硬盤

以上幾點優(yōu)化方法都是通過對SQLite本身進行各種優(yōu)化選項的組合,從而提高其數(shù)據(jù)錄入效率來滿足實際需求。磁盤數(shù)據(jù)庫之所以操作時延長,其瓶頸在于硬盤的訪問速度。如果更換為SSD固態(tài)硬盤,其操作效率將大大提高,圖8為在SSD固態(tài)硬盤上相應(yīng)的測試曲線。

使用SSD硬盤后,同樣在未經(jīng)任何優(yōu)化的條件下,SSD硬盤上的插入性能較傳統(tǒng)硬盤提高了近200倍。而經(jīng)過優(yōu)化后,SSD硬盤上的插入性能也提高了近2倍多??梢奡SD硬盤的使用對數(shù)據(jù)庫訪問性能的提高還是很明顯的。

圖8 SSD與普通硬盤數(shù)據(jù)錄入時間對比

4 結(jié)論

文中通過5點優(yōu)化策略切實的提高SQLite數(shù)據(jù)庫訪問速度的方案,使SQLite數(shù)據(jù)庫的性能滿足半實物仿真實驗中實時數(shù)據(jù)錄入需求。同時也證明了SQLite在功能和性能上可以很好的取代目前使用傳統(tǒng)商業(yè)數(shù)據(jù)庫,解決半實物仿真系統(tǒng)中數(shù)據(jù)庫投入大、維護難、利用率低的問題。

[1](美)Grant Allen,Mike Owens.SQLite權(quán)威指南[M].2版.北京:電子工業(yè)出版社,2012:21-137.

[2]http://www.sqlite.org,SQLite[OL].

[3]蔡勇,王勇.嵌入式數(shù)據(jù)庫SQLite在測控系統(tǒng)設(shè)計中的應(yīng)用[J].電子測試,2011(10):89-93.

[4]萬瑪寧,關(guān)永,韓相軍.嵌入式數(shù)據(jù)庫典型技術(shù)SQLite和Berkeley DB 的研究[J].微計算機信息,2006,22(1/2):91-93.

猜你喜歡
入庫硬盤內(nèi)存
重磅!廣東省“三舊”改造標圖入庫標準正式發(fā)布!
中國食品品牌庫入庫企業(yè)信息公示②
中國食品品牌庫入庫企業(yè)信息公示①
HiFi級4K硬盤播放機 億格瑞A15
Egreat(億格瑞)A10二代 4K硬盤播放機
筆記本內(nèi)存已經(jīng)在漲價了,但幅度不大,升級擴容無須等待
“春夏秋冬”的內(nèi)存
服務(wù)器更換硬盤后的同步問題
身臨其境探究竟 主動思考完任務(wù)——《倉儲與配送實務(wù)》入庫作業(yè)之“入庫訂單處理”教學案例
內(nèi)存搭配DDR4、DDR3L還是DDR3?