海洋环境数据存储技术的研究与实现*
2012-07-11赵美珍
赵美珍
(中国舰船研究设计中心 武汉 430064)
1 引言
随着海洋科学技术的发展与进步,海洋数据采集技术也日新月异,所能获取的海洋数据类型也更加多样化。要将类型纷繁复杂的海洋数据投入到实际的应用当中,就要对其进行有效的管理。海洋数据的存储是数据管理中较为重要的一个环节。因此,建立科学有效的海洋数据存储模型,是一项迫在眉睫的任务。
不同类型的海洋数据具有不同的特点,有些数据点的特性较为明显,采用对象关系表组织比较适宜,有些数据其属性值和空间位置时刻都在发生变化,表现出了很强的时空动态性,采用对象关系表进行数据组织会造成大量数据的冗余,其数据组织采用文件层次模型比较适宜。本文将介绍基于Oracle的数据库存储技术和基于NetCDF格式的文件存储模型及其在海洋环境数据存储中的应用。
2 海洋环境数据特点分析
2.1 海洋环境数据类型分析
海洋宏观环境包括海洋地理环境、海洋水文环境、海洋气象环境、海洋生物环境等。本文中研究的海洋环境特指海洋水文环境与海洋气象环境,以下简称海洋环境。
海洋环境数据根据来源可划分为历史统计数据、数值模式数据、海军出版发行的港口潮汐及电子海图数据、艇载传感器实测数据等。根据存在状况可划分为静态和动态数据。从学科上又可分为气象、水文、海底地理数据。
学科分类法是最常用的。按照这种方法划分,海洋环境信息系统中所用到的数据类型有:海温,盐度,海水密度,海水声速,海洋声道,温、盐、密、声跃层,水色和透明度,风浪、涌浪,热带气旋,潮汐,潮流,海流。
在我们的海洋环境信息系统中,按照其数据来源和格式的不同,将十二种海洋环境信息要素划分为背景场数据、模式预报数据及实测数据三类,其中背景场数据又可分为历史统计数据和客观分析数据,具体如图1所示。
图1 海洋环境数据系统要素分类图
2.2 海洋环境数据主要特点
海洋环境信息与陆地信息相比有许多不同之处,概括起来,海洋环境信息主要具有如下特点:
1)具有陆地地貌信息的复杂性和流体信息的独特性双重特点;
2)海洋环境信息获取难度大,数据更新困难;
3)分布分散;
4)数据量庞大,数据标准不统一,完善的数据库建设困难大;
5)海洋环境信息多样性,数据类型和格式复杂;
6)具有变化尺度多样性的特点;
7)海洋边界信息的模糊性;
8)数据表达有2D、2.5D、3D、4D等不同形式,对海洋环境数据分析意义重大。
3 基于Oracle数据库的海洋环境数据存储技术
对于一些离散的,点的特征较为明显的海洋数据,采用数据库存储技术比较适宜。采用数据库存储数据,数据的共享性高、关联性比较强、独立性强,且可以对数据进行统一控制。
3.1 数据库建模理论
1)数据库设计的任务
数据库设计的基本任务是:根据用户的信息需求、处理需求和数据库的支持环境,设计出数据模式以及典型的应用程序。
2)数据库设计方法和设计步骤
数据库设计步骤可以分为下面几步:
(1)需求分析;
(2)概念设计;
(3)逻辑设计;
(4)物理设计;
(5)数据库的实施、运行和维护。
数据库的详细设计流程如图2所示:
图2 数据库设计流程图
3)关系规范化理论
关系数据库的设计主要是关系模式的设计。一个好的关系模式除了满足用户对信息的存储和查询以外,还应该以下面的要求作为衡量的标准。
(1)元组的每个分量(属性)必须是不可分割的数据项;
(2)数据库中的数据冗余应尽可能的少;
(3)不会出现修改异常;
(4)不会出现插入异常;
(5)不会出现删除异常;
(6)考虑到查询的要求,组织数据的合理性。
3.2 Oracle数据库开发技术
1)Oracle数据库
Oracle数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库,它实现了分布式处理功能。Oracle作为主流大型数据库,其具有功能强大、性能稳定、使用灵活、易于管理、开放性、可伸缩性、非常好的平行性,以及最高级别的安全认证、使用风险低、存储数据量大等优点。
2)MFC ODBC数据库开发技术
ODBC是一个应用广泛的数据库访问应用编程接口,使用标准的SQL作为其数据库访问语言。ODBC的设计是建立在客户机/服务器体系结构基础之上的。ODBC使开发者避免了与数据源连接的复杂性。ODBC数据库访问接口是用C语言编写的,可以更好的访问多种关系型数据库系统。
Visual C++中提供了MFC ODBC类,封装了ODBC API,使得利用MFC来创建ODBC的应用程序非常简便。
3.3 海洋环境数据库结构设计
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为脚本文件名。
4 海洋环境数据文件存储模型
有些海洋数据是多维的,如潮流、潮汐、海流等海洋要素,其属性随着经度、纬度、水深、时间等的不同而变化,不同的维度会组合出大量的数据,若仍采用对象关系表进行数据组织,会造成大量的数据冗余,其数据组织采用文件存储模型比较适宜。本文将引入一种网络通用数据格式NetCDF,利用它可以对网格数据进行高效的存储、管理、获取和分发。
4.1 NetCDF特点
NetCDF是由美国国家科学委员会资助开发的一种通用的数据存取方式,数据的形状包括单点的观测值、时间序列、规则排列的网格、以及人造卫星或雷达之影像档案。它是一种面向数组型数据的描述和编码标准,目前广泛应用于大气科学、水文、海洋学、环境模拟、地球物理等诸多领域。用户可以借助多种方式方便地管理和操作NetCDF数据集。
NetCDF具有如下特性:
1)自描述特性,即NetCDF数据文件包含自身的描述信息;
2)平台无关性,即支持在异构的网络平台间进行数据传输和数据共享;
3)易用性,存在多种方便的途径来管理和操作NetCDF数据;
4)高可用性,表示其较高的数据压缩比,以及基于数组下标的线性存储实现的高效存取。
4.2 NetCDF文件结构和接口函数
从数学上来说,NetCDF存储的数据就是一个多自变量的单值函数。用公式来说就是f(x,y,z…)=value,函数的自变量x,y,z等在NetCDF中叫做维或坐标轴,函数值value在NetCDF中叫做变量,而自变量和函数值在物理学上的一些性质,比如计量单位、物理学名称等在NetCDF中就叫属性。NetCDF文件结构如下所示:
NetCDF接口函数库有四大类函数:1)文件处理函数;2)变量处理函数;3)维数处理函数;4)属性处理函数。
4.3 三种格式文件的比较
下面将以海流要素为例,分别介绍使用文本文件、普通二进制文件、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格式在存储网格数据方面的优越性。
5 结语
本文介绍了海洋环境数据存储的两种技术,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.