呂梁,陳晴,滕舟
(浙江省氣象信息網(wǎng)絡中心,杭州,310017)
基于NetCDF的數(shù)值預報產(chǎn)品存儲和應用
呂梁,陳晴,滕舟
(浙江省氣象信息網(wǎng)絡中心,杭州,310017)
對基于NetCDF的數(shù)值預報產(chǎn)品的存儲和應用等方面的關鍵技術進行深入的研究,其中包括NetCDF的功能概況、數(shù)據(jù)結(jié)構(gòu)、使用方法和特點分析,基于NetCDF的數(shù)值預報產(chǎn)品存儲架構(gòu)設計以及在此架構(gòu)之上的數(shù)值預報產(chǎn)品應用模式分析等。提出一套可以支持各類數(shù)值預報產(chǎn)品規(guī)范存儲,統(tǒng)一訪問接口友好、高效輸出的數(shù)值預報產(chǎn)品存儲和應用技術。實驗表明,該關鍵技術解決方案具有較好的實際操作性,能夠支持大部分數(shù)值預報模式,對各類終端系統(tǒng)具有良好的兼容性。
NetCDF;數(shù)值預報;存儲架構(gòu);應用模式;訪問接口
隨著氣象信息化的不斷推進,各類數(shù)值預報產(chǎn)品基本以文件庫和關系型數(shù)據(jù)庫的形式提供共享,但是由于產(chǎn)品內(nèi)容豐富、格式復雜、存放規(guī)范不統(tǒng)一和調(diào)用規(guī)則不一致等原因?qū)е履壳斑€缺乏統(tǒng)一的產(chǎn)品訪問接口。各類模式預報數(shù)據(jù)[1]在業(yè)務使用上,存在數(shù)據(jù)無法統(tǒng)一讀取,訪問方式復雜多樣,抽取時間序列困難等一系列問題。
因此,研究如何建立一套規(guī)范化的數(shù)值預報產(chǎn)品存儲和應用設計方案,就有其現(xiàn)實意義。本文基于大數(shù)據(jù)存儲系統(tǒng)作為數(shù)據(jù)環(huán)境運行的硬件和軟件平臺,建立基于NetCDF文件格式的格點數(shù)據(jù)專用數(shù)據(jù)庫,開發(fā)支持HTTP、SOAP協(xié)議和Socket技術的格點數(shù)據(jù)計算處理算法,采用標準化數(shù)據(jù)的輸出格式和規(guī)范化接口的調(diào)用方法,提供一致的接口來訪問不同的數(shù)值預報產(chǎn)品。能夠快速地對預報數(shù)據(jù)按照地理區(qū)域進行單個時次數(shù)據(jù)的獲取功能,能夠?qū)δ骋蛔鴺它c的單個氣象要素進行24小時序列的快速獲取和其他一些具體的數(shù)據(jù)訪問接口功能。
根據(jù)這一思想,本文從NetCDF的功能概況、數(shù)據(jù)結(jié)構(gòu)、使用方法和特點分析,基于NetCDF的數(shù)值預報產(chǎn)品存儲架構(gòu)設計以及在此架構(gòu)之上的數(shù)值預報產(chǎn)品應用模式分析等多個角度進行深入研究。在此基礎上,如何增加統(tǒng)一訪問接口對數(shù)值預報產(chǎn)品的整體支持,就成為了本文需要重點解決的問題。
1.1NetCDF概況
NetCDF是網(wǎng)絡通用數(shù)據(jù)格式(Network Common Data Form)的簡稱,主要特點是能夠通過統(tǒng)一的數(shù)據(jù)結(jié)構(gòu)快速高效地讀取包括單點、時間序列等的網(wǎng)格類數(shù)據(jù),以文件擴展名.nc結(jié)尾。
NetCDF存取的數(shù)據(jù)分布系統(tǒng)是一個基于多維的數(shù)據(jù)格式,如果需要獲得某個單點數(shù)據(jù)時,不需要按照傳統(tǒng)方法遍歷所有前部節(jié)點,而是由NetCDF特定算法直接存取那一個數(shù)據(jù)[2]。因此,通過NetCDF不僅能夠高效地管理、讀取和更改海量的網(wǎng)格數(shù)據(jù),而且能夠大大降低模式產(chǎn)品計算所必須消耗的數(shù)據(jù)存取時間,已經(jīng)成為了包括氣象、水文、海洋和地理等科技領域的數(shù)據(jù)生成標準。
1.2NetCDF文件結(jié)構(gòu)
NetCDF文件主要是Dimensions、Variables、Attributes、Data四個部分組成的[3]。NetCDF存儲的數(shù)據(jù)可從數(shù)學角度理解為由多自變量共同決定的單值函數(shù):
F(x,y,z,...)=value
公式中的多個自變量(x,y,z,…等)在NetCDF里稱為維(Dimensions),例如維度可以是時間、緯度、經(jīng)度等;公式中的單值函數(shù)值value在NetCDF里稱為變量(Variables),例如海拔、降水等。另外,為了能夠更準確地描述函數(shù)值與自變量各自的特性(單位、學名等),NetCDF還增加了稱為屬性(Attributes)的字段。最后稱為Data的部分主要存儲數(shù)據(jù)資料。
一個NetCDF文件的結(jié)構(gòu)示例如下:
NetCDF name{
Dimensions:…//定義維數(shù)
Variables:…//定義變量
Attributes:…//屬性
Data:…//數(shù)據(jù)
}
1.3坐標系變換
NetCDF維度的默認步進為1。然而在現(xiàn)實應用情況下,經(jīng)常使用的是自定義的坐標系統(tǒng),此時可以使用(Coordinate Varibles)坐標變量[4]。坐標變量是一個以特定維度為自變量的一維單值函數(shù)。舉例如下:
NetCDF test_pres{
dimensions:
latitude=6;//緯度軸
longitude=12;//經(jīng)度軸
variables:
float latitude(latitude);//坐標變量,具體緯度
float longitude(longitude);//坐標變量,具體緯度
float pressure(latitude,longitude);//氣壓值
data:
latitude=25,30,35,40,45,50;
longitude=-125,-120,-115,-110,-105,-100,-95,-90,-85,-80,-75,-70;
pressure=902,906,912,918,924,930,936,942,948,954,960,966,
……
905,911,917,923,929,935,941,947,953,959,965,973;
通過坐標變換的方式進行轉(zhuǎn)換,結(jié)果為:
latitude=25,longitude=-125時,pressure=902;
latitude=50,longitude=-70時,pressure=973;
以此類推。
1.4NetCDF程序讀寫
Java的編程環(huán)境為Eclipse+jdk7,新建項目,將下載的NetCDF 4.3的jar包添加到項目的編譯路徑下,完成編譯、運行后能夠產(chǎn)生simple_xy.nc結(jié)果,代碼如下:
public boolean writeToNetdf3(String datasetIn,String datasetOut,boolean isLargeFile)throws IOException{
NetCDFFile ncfileIn=ucar.nc2.dataset.NetCDFDataset. openFile(datasetIn,null);
System.out.println("Read from"+datasetIn+"write to" +datasetOut);
NetCDFFile ncfileOut=ucar.nc2.FileW riter.writeToFile(ncfileIn,datasetOut,false,-1,isLargeFile);
ncfileIn.close();
ncfileOut.close();
System.out.println("NetCDFFile successfully written="+ ncfileOut);
2.3NetCDF存儲目錄結(jié)構(gòu)
對目前使用較頻繁的數(shù)值預報產(chǎn)品數(shù)據(jù)進行分解處理,按照格點數(shù)據(jù)的一些屬性進行了分類存儲管理。建立基于NetCDF格式的數(shù)值預報數(shù)據(jù)庫,按照一定目錄規(guī)則結(jié)構(gòu)和數(shù)據(jù)組織結(jié)構(gòu)進行規(guī)整存儲。NetCDF存儲目錄的組織形式為:
根目錄/模式名稱/年月日/氣象要素NC文件
具體目錄存儲示例如圖1。
根據(jù)各類模式提供的要素名稱,如圖2:

圖1 存儲目錄結(jié)構(gòu)

表1 要素定義
將NetCDF的文件名定義為:“要素”+“_”+“生成時間”+“預報時間”+“.nc”,如圖2:

圖2 文件名稱
2.2NetCDF數(shù)據(jù)結(jié)構(gòu)
NetCDF格式的格點數(shù)據(jù)的組織,按照每個氣象要素建立整日的格點數(shù)據(jù)文件,包含每個起報時間制作或訂正的各預報時效預報數(shù)據(jù),NetCDF數(shù)據(jù)格式的定義如下:
(1)Dimensions維度段:設定氣象要素為4個緯度數(shù)據(jù)(time,level,lat,lon),包括時間、層次、緯度和經(jīng)度。
(2)Variables屬性段:描述各類屬性值,其中l(wèi)on(lon)為經(jīng)度方向格點數(shù)量;lat(lat)為維度方向格點數(shù)量;level(level)指定具體的高度層次值;time(time)指定具體的起報時間值;flag(flag用來表示某一起報時間的預報數(shù)據(jù)是否被寫入;tstr(tstr)設定具體起報時間;ystr(ystr)用來設定該預報制作的年份。
(3)Data數(shù)據(jù)段:存儲各屬性定義的具體值。其中存儲了整日每個起報時間制作的逐個預報時效的氣溫格點數(shù)據(jù),覆蓋全部預報時效。
具體的文件示例:
dimensions:
lon=116;lat=125;level=1;time=4;
variables:
float lon(lon);lon:units="degrees_east";
float lat(lat);lat:units="degrees_north";
float level(level);level:units="millibars";
float time(time);time:units="days since 2015-01-01 00:00:00";
float flag(time);float tstr(time);float ystr(time);
float t2mm001(time,level,lat,lon);
t2mm001:missing_value=-999999.0f;
float t2mm002(time,level,lat,lon);…………
data:
lon=116,116.05,116.1,……,124.9,124.95,125;
lat=25,25.05,20.1,……,32.9,32.95,33;
level=0;
time=0,0.25,0.5,0.75;
flag=1,_,1,_,1,_,……;
tstr=10100,_,10112,_,10200,_,……;
ystr=2014,_,2014,_,2014,_,……;
t2mm01=23.1,24.2,……
3.1數(shù)據(jù)源整體架構(gòu)
目前,在業(yè)務支持環(huán)境里有以下三類數(shù)據(jù)源:
(1)格點數(shù)據(jù)庫
對大部分數(shù)值預報進行解碼工作,采用Grib1、Grib2格式進行統(tǒng)一存儲管理。
(2)NetCDF格點數(shù)據(jù)庫
本文按照CIMISS標準搭建NetCDF格點數(shù)據(jù)庫,以支撐格點應用系統(tǒng)。
(3)其他格點數(shù)據(jù):HDF4、HDF5、Micaps等。
3.2統(tǒng)一訪問接口
在建立了基于NetCDF文件格式的統(tǒng)一的規(guī)范化格點數(shù)據(jù)庫以后,開發(fā)并拓展基于CIMISS的格點數(shù)值預報統(tǒng)一數(shù)據(jù)訪問接口,增加對自有模式產(chǎn)品和國外其他模式產(chǎn)品的支持,從而實現(xiàn)更加豐富的標準化數(shù)據(jù)輸出和規(guī)范化接口的調(diào)用方法。利用統(tǒng)一的數(shù)據(jù)訪問接口作為業(yè)務應用與數(shù)據(jù)庫之間的中間層,實現(xiàn)軟件架構(gòu)的松耦合,對應用的擴展提供更好的基礎。
統(tǒng)一數(shù)據(jù)訪問接口支持HTTP、SOAP協(xié)議[5]和Socket技術的格點數(shù)據(jù)計算處理方法,提供精細化預報系統(tǒng)格點數(shù)據(jù)的讀取、寫入、更新和同步訪問接口。各級用戶通過發(fā)布的統(tǒng)一接口獲取數(shù)據(jù)。總體架構(gòu)如圖3所示。

圖3 總體架構(gòu)
數(shù)據(jù)服務接口根據(jù)格點預報制作與訂正過程中涉及到的具體數(shù)據(jù)訪問接口,使用統(tǒng)一和標準化的調(diào)用方式和數(shù)據(jù)封裝結(jié)果(返回結(jié)果調(diào)用方式、接口命名、參數(shù)命名)。能夠按照具體業(yè)務應用場景提供格點數(shù)據(jù)中整個平面場寫入、指定格點數(shù)據(jù)寫入、裁剪、讀取和插值的數(shù)據(jù)操作功能。同時,接口具備均衡負載策略,能夠提供較高的響應和處理效率,流程的配和基于GUI格點的編輯,兼容大部分流行開發(fā)環(huán)境的調(diào)用。讀取、寫入接口分別被封裝為Linux版本和Windows版本的動態(tài)庫,方便精細化預報編輯工具的使用,同時采用Socket的數(shù)據(jù)傳輸方式,盡量避免多余的數(shù)據(jù)傳輸。
3.3數(shù)據(jù)管理
為了增強數(shù)值預報產(chǎn)品業(yè)務支撐的穩(wěn)定性,需要對格點數(shù)據(jù)庫進行日常的數(shù)據(jù)管理,包括定時預先生成空場格點預報數(shù)據(jù)、格點數(shù)據(jù)備份和歷史格點數(shù)據(jù)的歸檔存儲。對數(shù)值預報格點數(shù)據(jù)服務,進行日常的監(jiān)控管理,包括定時監(jiān)視數(shù)據(jù)服務狀態(tài)、每次請求數(shù)據(jù)的日志記錄、實時統(tǒng)計在線用戶數(shù)量和數(shù)據(jù)同步進程的運行狀態(tài)。對預報制作業(yè)務,進行日常告警監(jiān)控,包括監(jiān)視各時次預報制作的情況、數(shù)據(jù)上傳情況、數(shù)據(jù)同步情況等。
以上各類業(yè)務的監(jiān)視,運行監(jiān)視均納入到統(tǒng)一的監(jiān)視平臺,提供統(tǒng)一的值班監(jiān)視頁面由專人維護,包括系統(tǒng)狀態(tài)監(jiān)視、存儲空間監(jiān)視、進程監(jiān)視、接口訪問性能監(jiān)視、預報制作、數(shù)據(jù)上傳和同步等各個方面。
[1]周毅.數(shù)值天氣預報基礎[M].氣象出版社,2003
[2]Ramamurthy M.NetCDFC/C++/Fortran Source Code and Documentation[EB/OL].http://www.unidata.ucar.edu/software/NetCDF/,2008
[3]Russ Rew,Glenn Davis,Steve Emmerson,Ha-rvey Davies.NetCDFFortran 90 Interface Guide[M].Boulder:Unidata Program Center,2005
[4]查石祥.NetCDF數(shù)據(jù)的編程式訪問[J].氣象科技,2004(增刊):40~43
[5]James Snell,Doug Tidwell,Pavel Kulchenko.SOAPWeb服務開發(fā)[M].中國電力出版社,2002
NetCDF;Numerical Forecast;Storage;App lication Mode;Access Interface
Storage and App lication of Num erical Forecast Products Based on NetCDF
LV Liang,CHEN Qing,TENG Zhou
(Zhejiang Meteorological Information and Network Center,Hangzhou 310017)
Makes a deep research on key technology of the storage and application of numerical forecast products based on NetCDF,including the overview of the functions,data structures,usingmethods and characteristics of NetCDF,the product storage architecture design and the application of numerical forecast products based onmode analysis.Proposes a set of technologies which can support a variety of standardized storage,the unified access interface can friendly and efficient output all kinds of numerical forecast products.Experimental results show that the solutions are practical,can supportmostof numerical forecastmodel and have a good compatibility to all kinds of terminal system.
1007-1423(2015)16-0047-05
10.3969/j.issn.1007-1423.2015.16.011
呂梁(1983-),男,浙江衢州人,工程師,碩士研究生,研究方向為信息網(wǎng)絡和辦公自動化
陳晴(1984-),女,浙江杭州人,工程師,本科,研究方向為信息網(wǎng)絡和數(shù)據(jù)庫
滕舟(1982-),男,浙江杭州人,工程師,本科,研究方向為信息網(wǎng)絡和網(wǎng)絡安全
2015-04-29
2015-05-21