任雪峰,王善民,杜 清,秦亞萍,管志強(qiáng)
(1. 海軍駐南京地區(qū)雷達(dá)系統(tǒng)軍事代表室,南京 210003;2. 中國(guó)船舶重工集團(tuán)公司第七二四研究所,南京 211153)
隨著雷達(dá)技術(shù)的不斷發(fā)展,各種使用環(huán)境下的雷達(dá)不斷出現(xiàn)。雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)用于收集、整理、存儲(chǔ)和處理各種雷達(dá)在探測(cè)過(guò)程中獲取的目標(biāo)數(shù)據(jù)。這些海量的雷達(dá)目標(biāo)數(shù)據(jù)對(duì)于目標(biāo)識(shí)別、數(shù)據(jù)挖掘、情報(bào)分析等具有重要意義。
雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)可關(guān)聯(lián)多臺(tái)雷達(dá)探測(cè)設(shè)備,需要加載的目標(biāo)數(shù)據(jù)也來(lái)自不同的設(shè)備。有的設(shè)備持續(xù)運(yùn)行,定期上傳累積的目標(biāo)數(shù)據(jù)。有的設(shè)備則是不定期運(yùn)行,需根據(jù)指令離線統(tǒng)一加載所存儲(chǔ)的目標(biāo)數(shù)據(jù)。因此,雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)的目標(biāo)數(shù)據(jù)加載是一個(gè)高并發(fā)的多事務(wù)處理過(guò)程。如果并發(fā)操作不當(dāng),則易引起事務(wù)長(zhǎng)期獨(dú)占數(shù)據(jù)庫(kù)、事務(wù)間資源沖突導(dǎo)致死鎖或并發(fā)的各事務(wù)存取的數(shù)據(jù)不正確。
數(shù)據(jù)庫(kù)系統(tǒng)對(duì)于訪問(wèn)的并行處理機(jī)制解決了多事務(wù)對(duì)同一數(shù)據(jù)庫(kù)記錄操作的順序問(wèn)題,但它所解決的是在同一時(shí)刻多用戶對(duì)同一記錄的使用控制,避免出現(xiàn)同步更新寫入的情況沖突,并不能從邏輯上保證數(shù)據(jù)并發(fā)操作后的正確性。
本文分析了現(xiàn)有雷達(dá)目標(biāo)數(shù)據(jù)的加載工作流程及其在并發(fā)控制時(shí)出現(xiàn)的問(wèn)題,并針對(duì)該問(wèn)題提出一種雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)加載的并發(fā)控制方法,保障數(shù)據(jù)庫(kù)并發(fā)事務(wù)操作的正確性。
在某型雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)中,雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)的目標(biāo)數(shù)據(jù)加載由系統(tǒng)中不同的應(yīng)用程序來(lái)完成。在加載過(guò)程中,每一個(gè)訪問(wèn)數(shù)據(jù)庫(kù)的應(yīng)用程序?qū)?yīng)一個(gè)加載事務(wù)。按照某型雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)的應(yīng)用情況,目標(biāo)數(shù)據(jù)的加載可概括為兩類:周期循環(huán)加載和離線存儲(chǔ)加載。
周期循環(huán)加載是指對(duì)于持續(xù)工作運(yùn)行的雷達(dá)探測(cè)設(shè)備,雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)在收到其發(fā)送來(lái)的實(shí)時(shí)探測(cè)的目標(biāo)數(shù)據(jù)后,先將處理過(guò)的數(shù)據(jù)進(jìn)行本地緩存,在加載周期達(dá)到后將本周期的目標(biāo)數(shù)據(jù)向雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)加載。
離線存儲(chǔ)加載是指對(duì)于非持續(xù)運(yùn)行的或與雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)無(wú)通訊連接的雷達(dá)探測(cè)設(shè)備,通過(guò)專用的離線存儲(chǔ)設(shè)備收集存儲(chǔ)在雷達(dá)探測(cè)設(shè)備上目標(biāo)數(shù)據(jù)后向雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)一次性加載。
雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)的周期循環(huán)加載的工作流程如下:
(1) 雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)啟動(dòng),初始化設(shè)置,設(shè)置周期循環(huán)加載的加載周期,開始工作;
(2) 接收和處理各雷達(dá)設(shè)備發(fā)送來(lái)的實(shí)時(shí)目標(biāo)數(shù)據(jù)并緩存,等待周期循環(huán)加載的周期到達(dá);
(3) 周期到達(dá)后,創(chuàng)建新的緩存,繼續(xù)接收數(shù)據(jù)轉(zhuǎn)2,啟動(dòng)數(shù)據(jù)庫(kù)加載線程;
(4) 向雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)申請(qǐng)控制權(quán)限,申請(qǐng)成功后轉(zhuǎn)5,否則繼續(xù)申請(qǐng);
(5) 對(duì)數(shù)據(jù)庫(kù)控制權(quán)限設(shè)定鎖;
(6) 向雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)導(dǎo)入上一周期緩存的數(shù)據(jù),導(dǎo)入成功后轉(zhuǎn)7;
(7) 檢查是否存在因周期到達(dá)產(chǎn)生的新的加載事務(wù),若存在轉(zhuǎn)6,若不存在轉(zhuǎn)7,釋放數(shù)據(jù)庫(kù)控制權(quán)限,數(shù)據(jù)庫(kù)加載線程掛起。
雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)的離線存儲(chǔ)加載的工作流程如圖2所示。
(1) 雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)啟動(dòng),初始化設(shè)置,開始工作;
(2) 若收到離線加載任務(wù),則讀取和處理離線存儲(chǔ)設(shè)備上的雷達(dá)目標(biāo)數(shù)據(jù),等待所有離線目標(biāo)數(shù)據(jù)處理結(jié)束,否則繼續(xù)等待離線加載任務(wù);
(3) 向雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)申請(qǐng)控制權(quán)限,申請(qǐng)成功后轉(zhuǎn)4,否則繼續(xù)申請(qǐng);
(4) 對(duì)數(shù)據(jù)庫(kù)控制權(quán)限設(shè)定鎖;
(5) 向雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)導(dǎo)入讀取并處理的所有離線數(shù)據(jù),導(dǎo)入成功后轉(zhuǎn)6;
(6) 釋放數(shù)據(jù)庫(kù)控制權(quán)限,數(shù)據(jù)庫(kù)加載線程掛起,等待新的離線加載任務(wù)。
從周期循環(huán)加載和離線存儲(chǔ)加載的工作流程可以看出,任何一種情況單獨(dú)執(zhí)行時(shí)數(shù)據(jù)庫(kù)訪問(wèn)控制不存在問(wèn)題。但是,由于對(duì)于數(shù)據(jù)庫(kù)控制權(quán)限,使用了鎖機(jī)制來(lái)進(jìn)行并發(fā)控制,當(dāng)兩種情況同時(shí)執(zhí)行時(shí)便會(huì)出現(xiàn)以下問(wèn)題:
(1) 若離線存儲(chǔ)加載時(shí)間過(guò)長(zhǎng),時(shí)間大于實(shí)時(shí)數(shù)據(jù)的加載周期,由于數(shù)據(jù)庫(kù)控制權(quán)限長(zhǎng)時(shí)間不會(huì)被釋放,會(huì)造成周期循環(huán)加載事務(wù)堆積;
(2) 若周期循環(huán)加載事務(wù)首先執(zhí)行,獲取數(shù)據(jù)庫(kù)控制權(quán)限,若加載的目標(biāo)數(shù)據(jù)量較大,造成加載執(zhí)行時(shí)間較長(zhǎng),一個(gè)周期結(jié)束后馬上會(huì)進(jìn)行下一個(gè)周期數(shù)據(jù)的加載,則會(huì)造成離線存儲(chǔ)加載事務(wù)獲取不到數(shù)據(jù)庫(kù)控制權(quán)限,產(chǎn)生數(shù)據(jù)庫(kù)獨(dú)占現(xiàn)象。
為解決以上問(wèn)題,本文設(shè)計(jì)了一種雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)數(shù)據(jù)加載的并發(fā)控制方法,其主要思路是在申請(qǐng)數(shù)據(jù)庫(kù)訪問(wèn)權(quán)限時(shí)設(shè)計(jì)了一種動(dòng)態(tài)等待機(jī)制,具體描述如下:
(1) 定義一組變量:本次數(shù)據(jù)加載時(shí)間TL,本次數(shù)據(jù)加載大小DL,前次數(shù)據(jù)加載時(shí)間TL0,前次數(shù)據(jù)加載大小DL0,數(shù)據(jù)庫(kù)申請(qǐng)等待時(shí)間Tw,Tw的初始值為t0。
(2) 當(dāng)一個(gè)應(yīng)用程序在提交數(shù)據(jù)庫(kù)控制權(quán)限申請(qǐng)時(shí)記錄本次加載數(shù)據(jù)大小DL,如數(shù)據(jù)庫(kù)當(dāng)前處于空閑狀態(tài)則立刻獲取數(shù)據(jù)庫(kù)控制權(quán)進(jìn)行數(shù)據(jù)加載。目標(biāo)數(shù)據(jù)加載完畢后立即釋放數(shù)據(jù)庫(kù)控制權(quán),同時(shí)記錄本次加載時(shí)間TL,更新TL0=TL,DL0=DL。如此時(shí)數(shù)據(jù)庫(kù)被占用,在等待Tw時(shí)間后再次申請(qǐng)。
(3) 當(dāng)應(yīng)用程序完成一次數(shù)據(jù)加載后,再一次準(zhǔn)備加載數(shù)據(jù)時(shí)記錄本次加載數(shù)據(jù)大小DL,訪問(wèn)數(shù)據(jù)庫(kù),如果此時(shí)數(shù)據(jù)庫(kù)處于空閑狀態(tài)則立刻獲取數(shù)據(jù)庫(kù)控制權(quán),加載完畢后,更新TL、TL0、DL0。如此時(shí)數(shù)據(jù)庫(kù)被占用,則更新等待時(shí)間,Tw_New=Tw(1+k·ΔT),其中,當(dāng)DL0大于DL時(shí)k為-1,反之為1。ΔT的計(jì)算公式如下:
(4) 應(yīng)用程序在等待Tw_New后,再次申請(qǐng)數(shù)據(jù)庫(kù)控制權(quán)限。
采用以上的并發(fā)控制方法,使得申請(qǐng)數(shù)據(jù)庫(kù)控制權(quán)的等待時(shí)間可以隨著加載數(shù)據(jù)量的大小改變,目標(biāo)數(shù)據(jù)少的加載事務(wù)可以增加獲取數(shù)據(jù)庫(kù)控制權(quán)的概率,使其盡快完成加載操作。優(yōu)化后的雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)加載流程如圖3所示。
某型雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)系統(tǒng)的雷達(dá)目標(biāo)數(shù)據(jù)加載率是20 MB/min,周期循環(huán)加載的加載周期是60 min,離線存儲(chǔ)加載的數(shù)據(jù)庫(kù)權(quán)限申請(qǐng)周期是5 min。系統(tǒng)啟動(dòng)后周期循環(huán)加載就一直處于響應(yīng)階段,離線存儲(chǔ)加載在根據(jù)任務(wù)情況執(zhí)行。
在周期循環(huán)加載數(shù)據(jù)量不大的情況下,即一個(gè)加載周期內(nèi)接收的數(shù)據(jù),能夠在小于加載周期的時(shí)間內(nèi)導(dǎo)入數(shù)據(jù)庫(kù),則兩種執(zhí)行方式都可以執(zhí)行到,但在周期循環(huán)加載數(shù)據(jù)量大的情況下則會(huì)出現(xiàn)問(wèn)題。
表1 試驗(yàn)情況
由表1可以看出,周期循環(huán)加載下,一個(gè)基本上報(bào)周期的數(shù)據(jù)量是1 500 MB,全部加載到數(shù)據(jù)庫(kù)中則需要75 min,超過(guò)了固定的上報(bào)周期60 min。這種情況下,當(dāng)完成1 500 MB加載后數(shù)據(jù)庫(kù)權(quán)限就不會(huì)被釋放,立刻加載下一個(gè)周期的數(shù)據(jù)。具體執(zhí)行過(guò)程如表2所示。
表2 試驗(yàn)1加載情況
通過(guò)表2可以看出,在周期循環(huán)加載流程中數(shù)據(jù)量較大的情況下,離線存儲(chǔ)加載就沒(méi)法獲取數(shù)據(jù)庫(kù)權(quán)限,無(wú)法執(zhí)行。改進(jìn)后的加載情況如表3所示。
表3 試驗(yàn)1改進(jìn)后的加載情況
從表3中可以看出,在T0+75 min時(shí),第1個(gè)周期的數(shù)據(jù)加載完畢,根據(jù)數(shù)據(jù)加載情況,計(jì)算得到數(shù)據(jù)庫(kù)權(quán)限的申請(qǐng)周期是在108 min中;在T0+154 min時(shí),第2個(gè)周期的數(shù)據(jù)加載完畢,由于之前沒(méi)有到達(dá)數(shù)據(jù)庫(kù)權(quán)限的申請(qǐng)周期,于是周期循環(huán)加載就會(huì)釋放掉數(shù)據(jù)庫(kù)權(quán)限,這樣離線存儲(chǔ)加載就可以在T0+155 min的時(shí)候獲取到,離線存儲(chǔ)加載得以執(zhí)行。
本文提出的并發(fā)控制方法在數(shù)據(jù)量大的時(shí)候可自動(dòng)增大數(shù)據(jù)庫(kù)權(quán)限申請(qǐng)周期,以增大等待權(quán)限的事務(wù)獲得數(shù)據(jù)庫(kù)使用權(quán)的概率,在數(shù)據(jù)量小的時(shí)候可自動(dòng)的縮短數(shù)據(jù)庫(kù)權(quán)限申請(qǐng)周期,減少數(shù)據(jù)庫(kù)空閑時(shí)間,有效地規(guī)避了獨(dú)占問(wèn)題。
針對(duì)雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)的加載情況,本文設(shè)計(jì)了一種雷達(dá)目標(biāo)數(shù)據(jù)庫(kù)數(shù)據(jù)加載的并發(fā)控制方法。通過(guò)在申請(qǐng)數(shù)據(jù)庫(kù)控制權(quán)限時(shí)增加了一種動(dòng)態(tài)等待機(jī)制。通過(guò)仿真實(shí)驗(yàn)證明,該方法有效地避免了數(shù)據(jù)庫(kù)獨(dú)占問(wèn)題,保障了多個(gè)數(shù)據(jù)庫(kù)加載事務(wù)的正確執(zhí)行。