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

?

一種保存Micaps數(shù)據(jù)資料的思路和方法

2020-11-23 06:10李細生
中低緯山地氣象 2020年5期
關(guān)鍵詞:數(shù)據(jù)文件二進制備份

張 華,李細生

(湖南省株洲市氣象局,湖南 株洲 412003)

0 引言

Micaps4[1]是目前我國大部分氣象臺站制作天氣預(yù)報的操作平臺,功能眾多,需海量的數(shù)據(jù)資料支持,國家氣象局將這些數(shù)據(jù)以不同格式(大部分是文本格式)下發(fā),優(yōu)點是便于直接讀取和訪問,缺點是空間占用非常大,每天大約有100 G,且訪問效率較低。現(xiàn)在各個省局都建有分布式數(shù)據(jù)中心,市、縣兩級再無需維護數(shù)據(jù)服務(wù)器,訪問速度和效率較以前大幅度提升,但仍然沒有解決基層臺站歷史資料的長期不間斷保存問題,這些海量的歷史數(shù)據(jù)其實也是氣象部門的寶貴資源和財富,白白流失實在浪費?;诖?,可設(shè)計一個資料存儲程序,通過一些必要的刪減和壓縮手段,將每天的資料打包到一個數(shù)據(jù)文件,既大大節(jié)約存儲空間,又便于資料的交流和使用以及日后的分析應(yīng)用,從而打好氣象部門的“大數(shù)據(jù)”[2]這張牌。

1 壓縮數(shù)據(jù)文件的主要思路

為了達到數(shù)據(jù)文件大幅度瘦身的目標(biāo),保存資料時必須有相應(yīng)的刪減和壓縮技巧,可通過如下幾種方式縮減容量:

1.1 縮小資料覆蓋范圍

Micaps資料一般有全球范圍,東亞范圍等,基層臺站如果研究的區(qū)域不需要那么大,則可將范圍適當(dāng)縮小。如中央臺下發(fā)的EC細網(wǎng)格資料范圍是73°~135°E、18°~54°N,總共有497×289=143 633個網(wǎng)格點,網(wǎng)格距是0.125個經(jīng)緯度。假如研究目標(biāo)區(qū)域僅僅為江南、華南等地,那么可以將經(jīng)緯度范圍裁取為:100°~130°E、20°~40°N,如此一來,網(wǎng)格點變?yōu)?61×161=25 921個,數(shù)據(jù)量變?yōu)樵瓉淼?/6。

1.2 刪除不常用的要素或產(chǎn)品

Micaps資料里占用空間較大的有衛(wèi)星數(shù)據(jù)產(chǎn)品、雷達產(chǎn)品、數(shù)值模式產(chǎn)品等,如果去除這些,或者只選擇少數(shù)幾個精品進行保持,也可減少一半以上存儲容量。

1.3 將文本格式的數(shù)據(jù)改寫成二進制格式

Micaps后臺使用的數(shù)據(jù)很多為文本格式,它是一種典型的順序文件,其文件的邏輯結(jié)構(gòu)又屬于流式文件??梢栽赨nix、Macintosh、Microsoft Windows、DOS和其它操作系統(tǒng)之間自由交互,文本文件編碼基于字符定長,譯碼容易但占用空間較大;二進制文件編碼是變長的,所以它靈活,存儲利用率高,占用空間較小。因此,可以利用二進制文件占用空間小的優(yōu)點,通過程序?qū)⑽谋疚募械臄?shù)據(jù)按一定的順序?qū)懭攵M制DAT文件,從而縮減容量。當(dāng)然,二進制文件也有可讀性差的缺點,所以數(shù)據(jù)保存好以后一定要用專門的說明文件對數(shù)據(jù)的格式和順序進行單獨說明,并與數(shù)據(jù)文件存放在同一路徑下。

2 寫入二進制文件的源碼和注意事項

下面以ECMWF_THIN某個時次的低溫預(yù)報數(shù)據(jù)為例來說明改寫程序的編寫。編程語言為VB.NET,源程序用Microsoft Visual Studio 2010編譯[3]通過,代碼的功能是將某一時間點EC細網(wǎng)格2 m最低氣溫預(yù)報(間隔6 h、共38個預(yù)報時次)通過范圍裁取后寫入二進制DAT文件,設(shè)計思路是將原文本數(shù)據(jù)文件去除文件頭,選取適當(dāng)范圍數(shù)據(jù)再改變順序?qū)懭攵M制文件*.dat。源代碼如下:

Public Function DuECTmn(ByVal Parth As String)

Dim Jd(2), Jdt(2) As Single '原經(jīng)度范圍,細網(wǎng)格73

Dim Wd(2), Wdt(2) As Single '原緯度范圍,細網(wǎng)格18

Dim T1(17), Tm1(38) As Integer

Dim T2(17), Tm2(38) As String

Dim myFileTmn As New IO.FileStream("d: fxtdat” °ComboBox4.Text ° "Tmn6.dat", FileMode.Create, FileAccess.Write)’創(chuàng)建新的二進制文件。

Dim bwTmn As New BinaryWriter(myFileTmn, System.Text.Encoding.UTF32) ’ 定義二進制文件的數(shù)據(jù)壓縮格式為UTF32。

For K = 1 To 38 '按順序循環(huán)讀取低溫文件38個(6h間隔)

txtFmn6 = TxtTmn6 °ComboBox4.Text °Tm2(K)'EC6 h低溫全路徑文件名。

If My.Computer.FileSystem.FileExists(txtFmn6) = False Then‘如果原始資料缺失則提示并退出。

MsgBox(txtFmn6 °"文件缺失!")

bwTmn.Flush()

bwTmn.Close()

myFileTmn.Close()

Exit Function

End If

Dim strRead As String() = IO.File.ReadAllLines(txtFmn6)

Dim Temp(strRead.Length - 1)() As String

For i = 0 To strRead.Length - 1

strRead(i) = Trim(strRead(i))

Do While InStr(strRead(i), " ") '如果有連續(xù)的兩個空格就替換成一個空格,用循環(huán)方式去除文本文件中多余的空格。

strRead(i) = Replace(strRead(i), " ", " ")

Loop

If i<6 Then

Temp(i) = strRead(i).Split(" ")’用回車符分割數(shù)據(jù)

Else

Temp(i) = strRead(i).Split(" ")’用空格分割數(shù)據(jù)

End If

Next

Jd={107, 117} '縮小經(jīng)度范圍

Wd={23, 31} '縮小緯度范圍

Dim Ds(Int((Wd(1)-Wd(0))/0.125), Int((Jd(1)-Jd(0))/0.125)) As Single

x=0

For i=0 To Int((Wd(1)-Wd(0))/0.125)-1

For j=0 To Int((Jd(1)-Jd(0))/0.125)-1

Ds(i, j)=Temp(2*(54-Wd(0))/0.125-2*i+6)((Jd(0)-73)/0.125+j)’將文本文件數(shù)據(jù)讀入數(shù)組,并改變順序?qū)懭攵M制文件,+6是為了去除文本文件的前6行(文件頭)。

Gf=Val(Ds(i, j))

bwTmn.Write(Gf) ’寫入二進制文件

x=x+1

Next

Next

Next

bwTmn.Flush()

bwTmn.Close()

myFileTmn.Close()

End Function

上述子程序?qū)⒆x取數(shù)據(jù)范圍設(shè)置成107°~117°E、23°~31°N ,網(wǎng)格點變?yōu)?01×81=8 181個,6 h一次、38個預(yù)報時次的文件(TXT格式)本來總共占33 M空間,改寫成一個二進制dat數(shù)據(jù)文件后縮小為680 K,約為原來的1/50,文件大幅度變小,訪問效率提升。

這里需要注意兩個問題:一是寫DAT文件時的編碼格式,“System.Text.Encoding.UTF32”必須是UTF32編碼,其它編碼格式用GRADS軟件讀取時為錯誤數(shù)據(jù);二是寫數(shù)據(jù)的順序,Micaps的數(shù)據(jù)順序是從高緯度到低緯度,寫數(shù)據(jù)時必須改成從低緯度到高緯度。

Micaps的文本數(shù)據(jù)一般是一個文件保存二個維度數(shù)據(jù),寫成二進制文件時可以根據(jù)需要將一天的所有資料保存到一個文件里,那么就有5個維度(空間三維,時間一維,要素一維)的數(shù)據(jù),如此處理之后,每天100 G的原始數(shù)據(jù)除去不常用的,全部寫入一個dat,大小變?yōu)?00~500 M,壓縮比例為200~1 000倍,保存幾年的數(shù)據(jù)毫無壓力。

3 二進制數(shù)據(jù)文件的訪問和使用

通過前面方法處理保存的數(shù)據(jù)文件的說明文件通常在同路徑下可以找到,如果這些數(shù)據(jù)需要在Micaps里使用,用簡單的少數(shù)幾行代碼恢復(fù)成一個個文本格式文件,再加上相應(yīng)的文件頭即可。

如需要用GRADS等繪圖軟件查看數(shù)據(jù),則另寫數(shù)據(jù)描述文件。前文EC低溫預(yù)報的數(shù)據(jù)描述文件如下:

dset d: fxtdat19091008Tmn6.dat

TITLE EC dw

UNDEF -9.99E+33

options little_endian

XDEF 80 LINEAR 107 0.125

YDEF 64 LINEAR 23 0.125

ZDEF 1 LEVELS 999

TDEF 38 LINEAR 08Z10Sep2019 6hr

vars 1

dw 0 99 dw

ENDVARS

4 備份程序的業(yè)務(wù)使用情況

株洲市氣象臺是湖南省的地區(qū)級臺站,備份數(shù)據(jù)需要從湖南省氣象局?jǐn)?shù)據(jù)服務(wù)器遠程拷貝下載,每天的數(shù)據(jù)量很大,如果是直接下載再保存于本地,受限于網(wǎng)絡(luò)帶寬和硬盤容量,基本無法實現(xiàn),用前文所述方法加以處理后,如果只選取常規(guī)地面、高空資料,EC-Thin資料等,一天的數(shù)據(jù)壓縮后大約只有500 M,這樣一來,1TB的硬盤可以輕松保存5 a以上資料?;诖怂悸罚覀冇肰B.NET編寫了可執(zhí)行程序,該程序的主要功能是定時備份遠程服務(wù)器上的M4后臺數(shù)據(jù),定時功能由WIN系統(tǒng)的計劃任務(wù)實現(xiàn),將該程序放入系統(tǒng)計劃任務(wù)欄每日02—03時自行啟動(如圖1),備份完畢后自動退出。

圖1 WIN7系統(tǒng)計劃任務(wù)中的M4資料備份程序Fig.1 M4 data backup program in win7 system planning task

具體需要備份哪些資料由設(shè)置文件設(shè)置(如圖2),該設(shè)置文件列舉需要備份的資料及其目錄地址,備份主程序啟動后搜索該目錄下一天之內(nèi)的所有新文件并逐一寫入DAT文件,圖2所示的設(shè)置文件備份高空、地面和EC細網(wǎng)格資料,日儲存數(shù)據(jù)量大約為原數(shù)據(jù)量的25%,占用空間150 M,一般1 h內(nèi)即可完成備份。通過最近2 a的實踐運行,此程序穩(wěn)定可靠,操作簡單,設(shè)置好參數(shù)文件后無需人工干預(yù)即可每日定時完成資料備份工作。

圖2 備份程序的設(shè)置文件Fig.2 The setup file of backup program

5 結(jié)語

資料備份工作非常重要,前文所述的思路和方法可以概括為:刪除不常用數(shù)據(jù),保留必需的核心數(shù)據(jù),并用二進制編碼進一步壓縮數(shù)據(jù)文件容量,后期數(shù)據(jù)使用可借助GRADS軟件或者恢復(fù)成M4文本文件。2年的實踐使用證明該方法穩(wěn)定、實用且操作簡便,保存和使用資料的成本降低,效率提高,可為基層臺站解決海量歷史資料備份問題提供借鑒。

猜你喜歡
數(shù)據(jù)文件二進制備份
淺談數(shù)字化條件下的數(shù)據(jù)備份管理
用二進制解一道高中數(shù)學(xué)聯(lián)賽數(shù)論題
創(chuàng)建vSphere 備份任務(wù)
有趣的進度
Windows10應(yīng)用信息備份與恢復(fù)
二進制在競賽題中的應(yīng)用
基于表空間和數(shù)據(jù)文件探討MIS中數(shù)據(jù)庫架構(gòu)設(shè)計
舊瓶裝新酒天宮二號從備份變實驗室
基于網(wǎng)絡(luò)環(huán)境的社區(qū)協(xié)同辦公問題探討(二)
二進制寬帶毫米波合成器設(shè)計與分析