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

表1 試驗情況
由表1可以看出,周期循環加載下,一個基本上報周期的數據量是1 500 MB,全部加載到數據庫中則需要75 min,超過了固定的上報周期60 min。這種情況下,當完成1 500 MB加載后數據庫權限就不會被釋放,立刻加載下一個周期的數據。具體執行過程如表2所示。

表2 試驗1加載情況
通過表2可以看出,在周期循環加載流程中數據量較大的情況下,離線存儲加載就沒法獲取數據庫權限,無法執行。改進后的加載情況如表3所示。

表3 試驗1改進后的加載情況
從表3中可以看出,在T0+75 min時,第1個周期的數據加載完畢,根據數據加載情況,計算得到數據庫權限的申請周期是在108 min中;在T0+154 min時,第2個周期的數據加載完畢,由于之前沒有到達數據庫權限的申請周期,于是周期循環加載就會釋放掉數據庫權限,這樣離線存儲加載就可以在T0+155 min的時候獲取到,離線存儲加載得以執行。
本文提出的并發控制方法在數據量大的時候可自動增大數據庫權限申請周期,以增大等待權限的事務獲得數據庫使用權的概率,在數據量小的時候可自動的縮短數據庫權限申請周期,減少數據庫空閑時間,有效地規避了獨占問題。
針對雷達目標數據庫的加載情況,本文設計了一種雷達目標數據庫數據加載的并發控制方法。通過在申請數據庫控制權限時增加了一種動態等待機制。通過仿真實驗證明,該方法有效地避免了數據庫獨占問題,保障了多個數據庫加載事務的正確執行。