趙美珍
(中國艦船研究設計中心 武漢 430064)
隨著海洋科學技術的發展與進步,海洋數據采集技術也日新月異,所能獲取的海洋數據類型也更加多樣化。要將類型紛繁復雜的海洋數據投入到實際的應用當中,就要對其進行有效的管理。海洋數據的存儲是數據管理中較為重要的一個環節。因此,建立科學有效的海洋數據存儲模型,是一項迫在眉睫的任務。
不同類型的海洋數據具有不同的特點,有些數據點的特性較為明顯,采用對象關系表組織比較適宜,有些數據其屬性值和空間位置時刻都在發生變化,表現出了很強的時空動態性,采用對象關系表進行數據組織會造成大量數據的冗余,其數據組織采用文件層次模型比較適宜。本文將介紹基于Oracle的數據庫存儲技術和基于NetCDF格式的文件存儲模型及其在海洋環境數據存儲中的應用。
海洋宏觀環境包括海洋地理環境、海洋水文環境、海洋氣象環境、海洋生物環境等。本文中研究的海洋環境特指海洋水文環境與海洋氣象環境,以下簡稱海洋環境。
海洋環境數據根據來源可劃分為歷史統計數據、數值模式數據、海軍出版發行的港口潮汐及電子海圖數據、艇載傳感器實測數據等。根據存在狀況可劃分為靜態和動態數據。從學科上又可分為氣象、水文、海底地理數據。
學科分類法是最常用的。按照這種方法劃分,海洋環境信息系統中所用到的數據類型有:海溫,鹽度,海水密度,海水聲速,海洋聲道,溫、鹽、密、聲躍層,水色和透明度,風浪、涌浪,熱帶氣旋,潮汐,潮流,海流。
在我們的海洋環境信息系統中,按照其數據來源和格式的不同,將十二種海洋環境信息要素劃分為背景場數據、模式預報數據及實測數據三類,其中背景場數據又可分為歷史統計數據和客觀分析數據,具體如圖1所示。

圖1 海洋環境數據系統要素分類圖
海洋環境信息與陸地信息相比有許多不同之處,概括起來,海洋環境信息主要具有如下特點:
1)具有陸地地貌信息的復雜性和流體信息的獨特性雙重特點;
2)海洋環境信息獲取難度大,數據更新困難;
3)分布分散;
4)數據量龐大,數據標準不統一,完善的數據庫建設困難大;
5)海洋環境信息多樣性,數據類型和格式復雜;
6)具有變化尺度多樣性的特點;
7)海洋邊界信息的模糊性;
8)數據表達有2D、2.5D、3D、4D等不同形式,對海洋環境數據分析意義重大。
對于一些離散的,點的特征較為明顯的海洋數據,采用數據庫存儲技術比較適宜。采用數據庫存儲數據,數據的共享性高、關聯性比較強、獨立性強,且可以對數據進行統一控制。
1)數據庫設計的任務
數據庫設計的基本任務是:根據用戶的信息需求、處理需求和數據庫的支持環境,設計出數據模式以及典型的應用程序。
2)數據庫設計方法和設計步驟
數據庫設計步驟可以分為下面幾步:
(1)需求分析;
(2)概念設計;
(3)邏輯設計;
(4)物理設計;
(5)數據庫的實施、運行和維護。
數據庫的詳細設計流程如圖2所示:

圖2 數據庫設計流程圖
3)關系規范化理論
關系數據庫的設計主要是關系模式的設計。一個好的關系模式除了滿足用戶對信息的存儲和查詢以外,還應該以下面的要求作為衡量的標準。
(1)元組的每個分量(屬性)必須是不可分割的數據項;
(2)數據庫中的數據冗余應盡可能的少;
(3)不會出現修改異常;
(4)不會出現插入異常;
(5)不會出現刪除異常;
(6)考慮到查詢的要求,組織數據的合理性。
1)Oracle數據庫
Oracle數據庫是目前世界上使用最為廣泛的數據庫管理系統,作為一個通用的數據庫系統,它具有完整的數據管理功能;作為一個關系數據庫,它是一個完備關系的產品;作為分布式數據庫,它實現了分布式處理功能。Oracle作為主流大型數據庫,其具有功能強大、性能穩定、使用靈活、易于管理、開放性、可伸縮性、非常好的平行性,以及最高級別的安全認證、使用風險低、存儲數據量大等優點。
2)MFC ODBC數據庫開發技術
ODBC是一個應用廣泛的數據庫訪問應用編程接口,使用標準的SQL作為其數據庫訪問語言。ODBC的設計是建立在客戶機/服務器體系結構基礎之上的。ODBC使開發者避免了與數據源連接的復雜性。ODBC數據庫訪問接口是用C語言編寫的,可以更好的訪問多種關系型數據庫系統。
Visual C++中提供了MFC ODBC類,封裝了ODBC API,使得利用MFC來創建ODBC的應用程序非常簡便。
3.3.1 邏輯結構設計
該系統的邏輯結構設計包括數據表的設計和索引表的設計,分別如下:
1)索引表
對于某些類型的海洋環境要素數據,分年、分月、分層來存儲為不同的數據文件,而在查詢時只能通過經度、緯度、層、時間(年、月、日、時、分、秒)等作為輸入信息來得到具體的要素值,為了實現不同數據表之間數據的便捷、快速查詢,建立了索引表。索引表中存儲的是某要素相關的所有表的表名及表的命名規則。
2)統計數據表
統計數據表存儲的是背景場數據中要素的歷史統計數據,根據各要素的數據格式的不同,其屬性也不同。具體說來包括:
(1)溫、鹽、密、聲特征值:均值、標準差、最大值、最小值、站次數;
(2)溫度、密度、聲速躍層特征值:上界深度、厚度和強度;
(3)聲道特征參數:聲道軸深度、聲道軸處的聲速和聲道厚度;
(4)風浪、涌浪特征:波高平均值、觀測次數、標準差、最大值、周期平均值、觀測次數、標準差、最大值、大浪出現頻率、大涌出現頻率;
(5)水色、透明度:均值、標準偏差和觀測次數;
(6)海面平均氣溫:均值、觀測次數、標準差、最大值、最小值;
(7)熱帶氣旋:路徑、發生頻率、強度等。
3)客觀分析數據表
客觀分析數據表存儲的是背景場數據中要素的客觀分析數據,主要包括溫、鹽、密、聲客觀分析值,風浪、涌浪客觀分析值,海面氣溫客觀分析值,水色、透明度客觀分析值等九種要素。所有客觀分析表的屬性均相同,包括經度、緯度、平均值。
3.3.2 數據表設計
由于海洋環境要素涉及的數據表較多,僅以海洋溫度數據為例,說明索引表和統計數據表的設計規則。至于客觀分析數據表,其設計規則與統計數據表類似,此處不予贅述。
以海洋溫度要素為例,介紹統計數據表及其索引表的結構和二者之間的關系。
區域范圍:0°N≤緯度<25°N,105°E≤經度<132°E,按層存放,共10層,每層每行有八個變量,分別為緯度、經度、標準層(單位:m)、平均值、最小值、最大值、觀測次數和方差,其數據表及索引表的結構如表1及表2所示。

表1 溫度統計值表

表2 溫度索引表
在對海洋環境要素建表過程中,由于表的數量太大,是通過執行腳本文件來實現。腳本的執行是通過SQL*PLUS的@或START命令把指定腳本文件的內容裝入SQL緩沖區中并運行。例如:SQL>@ E:/script/createAT.sql其中E:/script/為腳本路徑,createAT.sql為腳本文件名。
有些海洋數據是多維的,如潮流、潮汐、海流等海洋要素,其屬性隨著經度、緯度、水深、時間等的不同而變化,不同的維度會組合出大量的數據,若仍采用對象關系表進行數據組織,會造成大量的數據冗余,其數據組織采用文件存儲模型比較適宜。本文將引入一種網絡通用數據格式NetCDF,利用它可以對網格數據進行高效的存儲、管理、獲取和分發。
NetCDF是由美國國家科學委員會資助開發的一種通用的數據存取方式,數據的形狀包括單點的觀測值、時間序列、規則排列的網格、以及人造衛星或雷達之影像檔案。它是一種面向數組型數據的描述和編碼標準,目前廣泛應用于大氣科學、水文、海洋學、環境模擬、地球物理等諸多領域。用戶可以借助多種方式方便地管理和操作NetCDF數據集。
NetCDF具有如下特性:
1)自描述特性,即NetCDF數據文件包含自身的描述信息;
2)平臺無關性,即支持在異構的網絡平臺間進行數據傳輸和數據共享;
3)易用性,存在多種方便的途徑來管理和操作NetCDF數據;
4)高可用性,表示其較高的數據壓縮比,以及基于數組下標的線性存儲實現的高效存取。
從數學上來說,NetCDF存儲的數據就是一個多自變量的單值函數。用公式來說就是f(x,y,z…)=value,函數的自變量x,y,z等在NetCDF中叫做維或坐標軸,函數值value在NetCDF中叫做變量,而自變量和函數值在物理學上的一些性質,比如計量單位、物理學名稱等在NetCDF中就叫屬性。NetCDF文件結構如下所示:

NetCDF接口函數庫有四大類函數:1)文件處理函數;2)變量處理函數;3)維數處理函數;4)屬性處理函數。
下面將以海流要素為例,分別介紹使用文本文件、普通二進制文件、NetCDF文件格式存儲海流數據的方法,并對其性能進行比較分析。
海流數據是以網格數據形式提供的,在經度、緯度、層深三個維度上發生變化。其數據海區范圍是:115-130°E,18-32°N,水平分辨率為10′×10′。層深分別取10、20、30、50、75、底層幾個離散的值。
1)文本文件格式
文件采用.dat擴展名,每一行存儲一條記錄。根據水平分辨率和層深,可以計算出總的網格數(經向×緯向×垂向)=91×85×6=46410,則文件共有46410行記錄,數據按照經度、緯度、層深的維度變化順序進行存儲,經度從115°開始遞增到130°,緯度從32°遞減到18°,變化間隔為10′,層深則從10m開始取離散值。
2)二進制文件格式
文件采用.dat擴展名,每條記錄長度為4個字節。數據按照經度、緯度、層深的維度變化順序進行存儲,經度從115°開始遞增到130°,緯度從32°遞減到18°,變化間隔為10′,層深則從10m開始取離散值。每條記錄對應一個標號,如:(115°,32°,10m)對應的 num 值為 1,(115.1667°,32°,10m)對應的num值為2,按照前面所述的維度變化規則依次類推。
3)NetCDF文件格式
海流網格數據模型包括區域左下角經緯度坐標、網格行列數、網格行寬、列寬、網格點流速、流向等信息。除此之外,還存儲了創建時間、坐標單位、精度等屬性信息。按照NetCDF標準,建立海流網格數據模型的NC文件。C++環境下的代碼如下:


在Windows平臺下和Visual C++6.0編程環境下,采用海流網格數據作為實驗數據,分別創建出文本格式、二進制格式、NC格式的數據模型,從文件的存儲大小、存儲時間、讀取時間、檢索時間四種量化指標對三種格式性能進行衡量,如圖3所示。

圖3 三種格式文件的量化指標對比
從圖中可以看出,NC格式在前三項上,效率和另外兩種格式差不多,但在檢索時間上,效率明顯優于另兩種格式。這是因為NC格式文件只要確定出經緯度值、層深值,即可快速的檢索出該處的流速、流向值;而對于文本文件,則需要根據其存儲規律和相應的經緯度、層深值獲得待查詢記錄所在文本文件的行數,再得到其流速、流向值;對于二進制文件,則需要在文件中定位偏移量大小,再得到流速、流向值。在執行效率上,體現了NC格式在存儲網格數據方面的優越性。
本文介紹了海洋環境數據存儲的兩種技術,Oracle數據庫存儲技術和基于NetCDF格式的文件存儲模型。Oracle數據庫存儲技術適用于點的特性較為明顯的海洋數據,而NetCDF文件模型在存儲網格數據方面具有很大的優越性。
[1]徐武.Visual C++與Oracle數據庫編程案例[M].北京:電子工業出版社,2004:35-58.
[2]鮑永剛.SQL語言及其在關系數據庫中的應用[M].北京:科學出版社,2007:26.
[3]何明.從實踐中學習Oracle/SQL[M].北京:清華大學出版社.2004:25.
[4]王曉玢.海洋環境要素區劃技術研究[J].中國航海,2006,4:23-25.
[5]許兆新.美國海軍海洋環境信息應用系統綜述[J].艦船電子工程學報,2005,25(4):25-29.
[6]查石祥.NetCDF數據的編程式訪問[J].氣象科技,2004,32:1-2.
[7]賈俊濤.基于NetCDF的海底地形網格數據模型創建與調度[J].海洋測繪,2007,27(5):134-135.
[8]劉文軍.基于NetCDF數據模型的氣象資料存儲設計[J].安徽農業科學,2009,37(3):1370-1371.
[9]許兆新.基于國際標準的電子海圖顯示系統設計[J].計算機與數字工程,2005,33(9):93-96.
[10]孟嬋媛.S-57數據的組織與實現[J].測繪學院學報,2003,20(4):275-278.
[11]劉文軍.基于NetCDF數據模型的氣象資料存儲設計[J].安徽農業科學.2009,37(3):1370-1371.