1. 引言
NetCDF (Network Common Data Format,网络通用数据格式)是一种网络通用的数据文件格式,也是支持这种数据格式的一套软件库(Software Library)的通称。它是由NSF (National Science Foundation,美国国家科学基金会)资助项目Unidata计划执行过程的开发成果,设计之初的目的是为该计划下的各种应用提供通用的数据访问方法,NetCDF所涉及的资料的类型包括单点的观测值、时间序列、规则排列的网格数据以及卫星或雷达的图像数据存储与交换。
NetCDF数据文件具有自我描述、平台无关、支持随机访问、支持追加、共享性好、版本延续性好的优点 [1] ,而且能够存储海量的面向阵列(array-oriented)数据,现在已经成为许多数据采集软件生成文件的标准格式,被广泛用于陆地、海洋和大气科学。
目前,NCEP(National Centers for Environmental Prediction,美国国家环境预报中心)发布的再分析资料,NOAA (National Oceanic and Atmospheric Administration,美国国家海洋和大气管理局)发布的COADS (Comprehensive Ocean-Atmosphere Data Set,海洋与大气综合数据集)均采用NetCDF作为标准 [2] ,NetCDF已成为一种跨学科的标准数据格式 [3] 。
2. 问题描述
尽管NetCDF是为了网络文件共享的目标所设计,但实际上更多的应用还是利用网络这个途径使用ANSI或UNICODE编码的文件进行数据交换,这样的数据文件一般以“.nc”为扩展名,可以通过HTTP或FTP等方式下载并在本地进行应用。
由于NetCDF文件具有广泛的适应性和良好的扩展性,近年来网络上以NetCDF为格式共享的文件持续呈爆发性增长。在IPCC (Intergovernmental Panel on Climate Change,海洋与大气综合数据集)第五次评估报告(AR5)的CMIP (Coupled model Intercomparison Project,耦合模式比较计划)中,各模式数据中心贡献了超过1.5 PB的NetCDF数据 [4] 。以Unidata网站上的NetCDF样例数据为例,NetCDF数据文件的大小从2.8~281.4 M不等。而实际应用中,一些模式输出的NetCDF文件可以达到2G甚至更大,或者是输出一系列的几百M字节的数据文件。当这些数据文件通过网络进行发布的时候,用户需要将NetCDF文件的下载到本地,然后利用NetCDF程序包扩展开发的各类应用软件对文件进行操作,100 M以内的数据文件操作尚可,过大的文件操作就显得非常不方便。
为了解决海量数据应用和单个及系列大文件使用的矛盾,NetCDF的应用人员和技术人员已经使用了很多先进的方法提高数据用户的应用体验。早期的NetCDF数据发布往往利用关系型数据库对网络的NetCDF文件发布过程进行处理,将NetCDF文件根据其变量、维度和数据内容拆分成不同的数据表,并提供了数据库接口用于远程调用,用户也可以利用接口抽取一部分数据,从而避免了大数据量下载所带来的等待和延迟等问题。但是这种方法也具有相当的缺点,首先,NetCDF的原始资料多种多样,维数多且结构复杂,使用数据库进行管理很困难;其次,气象水文资料的数据量大,关系型数据库难以满足网络环境下大量的多维数据存取的要求;最后,许多用户在下载数据后,还要手工把这些数据再转换成NetCDF格式才能在自己的模式或应用中使用,使用过程非常不方便。
XML结构的元数据的出现也为NetCDF的应用提供了一定的便捷途径。用户上传成果数据的同时发布系统就在后台对文件进行解析,在生成数据表索引的同时将变量、维度和数据的说明抽取到一个结构相对简单的XML文件中作为元数据,更进一步的也可以抽取部分样例数据或生成NetCDF数据的缩略图。这种方式可以让用户对要下载的NetCDF文件具有一个清晰和直观的认识,清华大学地球系统科学研究中心的数据共享发布系统就采用了类似方法来提高用户体验 [5] ,但这种方式没有从本质上解决NetCDF文件的下载到应用的瓶颈问题。
借鉴互联网上媒体文件(如电影等媒体)发布的技术和文件下载技术,也有人探索使用SM (Stream Media,流媒体技术)和P2P (Point to Point,对等互联网技术)来提高NetCDF文件使用过程中的下载速度。
Unidata组织也在NetCDF的网络应用上也进行了扩展开发,最典型的就是利用OPeNDAP (Open-Source Project for a Network Data Access Protocol,开放网络数据访问协议)协议支持获取数据子集的特性,通过Web应用系统对NetCDF等结构文件的支持,用户可以使用检索字符串在服务器端完成对NetCDF文件的抽取并获取需要的数据 [1] 。这种方式可以让专业的数据使用人员快速熟悉并获取数据,但不完全适合非计算机专业的人员在应用系统开发过程中的应用。
3. 解决方法
互联网云服务技术的发展为海量大型NetCDF文件的存取技术提供了新的思路,NetCDF的数据获取服务和对数据更进一步的应用服务可以归为云SaaS (Software as a Service,软件即服务)这一层次中。
借鉴成熟系统设计的经验,NetCDF数据发布和应用系统在获取新的数据发布时首先要生成各个NetCDF文件的索引和元数据进行发布,在实际应用过程中利用Java的Web Service服务技术和多线程技术在云端对大型的NetCDF文件进行预处理并提供一定的网络服务接口。接口可以根据用户请求内容在云端对数据文件直接进行处理和抽取并返回信息,其处理和抽取过程可以是同步的,也可以是异步的。
一个典型的NetCDF的发布、检索和应用流程如图1所示:成果发布用户上传的文件经预处理后形成数据库中的表索引,以及原始文件和3类辅助性文件,成果应用用户可以由“Web检索页面”进入并检索数据,通过HTTP/FTP服务获取XML格式的元数据文件,实际使用和分析可以直接通过HTTP和FTP方式获取较小的NetCDF样例文件。当服务器的NetCDF文件过大或对数据结果不确认的情况下,则可以通过Web Service接口根据需要获取更详细的数据片段进行分析后再决定是否下载等操作。
为了更好的与互联网服务技术进行结合,需要确定适合NetCDF文件发布的Web Service及开发环境,以及与该开发环境匹配的NetCDF软件库。
3.1. NetCDF Java简介
如前所述,NetCDF也是一套支持NetCDF格式数据读写操作的软件包的名称,这套软件包提供了支持包括C、Fortran77、Fortran90、C++、Java和Python等多种语言的调用接口。

Figure 1. NetCDF file processing and publishing process diagram
图1. NetCDF文件处理和发布流程示意图
NetCDF Java库具备了对CDM (Common Data Model通用数据模型)的较为完整的支持,提供了一系列的Java API接口来实现对NetCDF、OPeNDAP和HDF5 (Hierarchical Data Format,层次数据结构)文件格式的处理,接口涵盖了我们对本地NetCDF文件操作时所需要的全部功能。NetCDF Java库仅支持对NetCDF-3格式文件的写入,如果要写入NetCDF-4格式的文件,还需要编译后的C程序包支持,TDS (THREDDS Data Server)等开源数据服务系统就是基于NetCDF Java所开发的 [6] 。
3.2. SOA和Web Service
SOA (service-oriented architecture,面向服务的体系结构)是一个组件模型,它将应用程序的不同功能单元通过服务之间定义良好的接口联系起来,接口采用中立的方式进行定义并独立于实现服务的硬件平台、操作系统和编程语言,这种具有中立的接口定义的特征称为服务之间的松耦合 [7] 。
Web Service技术是SOA的具体实现。Web Service是自描述、自包含的可用网络模块,可以包含一个或多个具体的业务功能。Web Service基于一些常规的产业标准以及已有的一些技术,如XML (Extensible Markup Language,可扩展标记语言)、SOAP (Simple Object Access Protocol,简单对象访问协议)、WSDL (Web Services Description Language,网络服务描述语言)和UDDI (Universal Description, Discovery and Integration,通用描述、发现与集成服务)等,容易部署和维护 [8] 。Web Service技术能使得运行在不同机器上的不同应用无须借助附加的、专门的第三方软件或硬件,就可相互交换数据或集成。随着互联网应用服务技术的发展,许多开源的Web Service支持平台已经被广泛应用于各类系统开发过程中,如JBoss SOA和Apache CFX等。
利用Web Service技术可以直接提供对单个NetCDF的数据获取操作,也可以将多个Web Service组合起来形成一个服务链来提供更多的应用支持,例如直接形成图件或加载在在线地理信息平台上。Web Service技术延续了NetCDF文件的自我描述和平台无关性等优点,使得对NetCDF文件的应用用户可以以较小的转换成本完成对数据文件的应用。此外,利用Web Service技术发布NetCDF数据,还可以使不熟悉NetCDF的通用软件开发人员直接利用原有的系统代码获取数据并在原有的平台上进行展示和操作,降低了NetCDF文件利用的技术门槛。
4. 应用实例
以混合坐标大洋环流模式(HYCOM)为例,水平方向采用麦卡托网格,分辨率为0.5˚的表层温盐场和流场全球模拟结果存储在服务器上的数据量达到7 G左右,模式成果数据的应用人员每次都要花费大量时间在数据下载和比较过程中。利用Apache Tomcat服务器作为载体,部署基于Servlet的Web应用程序和Apache CXF的Web Service服务,以Web页面提供查询入口,通过查询结果可以完成元数据查看和下载,也可以进入到Web Service的服务页面。每个(组) NetCDF文件的Web Service服务页面提供了一系列的接口方法支持用户以不同的方式和数据量获取与该文件相关的全部或部分数据,从而避免了大量的数据文件下载和挑选的过程,可以有效的提高NetCDF成果数据的应用效率。
在系统的接口定义过程中,需要先定义与NetCDF对应的类,并将NetCDF的操作分为面向“维(Dimensions)、变量(Variables)、属性(Attributes)和数据(Data)”四类接口(Interface),在每类接口下按“定义、查询、提取和写入”分别定义针对性操作方法(Function),典型代码如图2所示。

Figure 2. Web service interface code diagram for NetCDF
图2. NetCDF的网络服务接口代码示意图
5. 结论
应用实践证明,利用Web Service技术调用后台同步和异步的NetCDF文件操作,结合NetCDF数据文件和元数据索引技术提供数据的共享功能,可以有效的减少模式成果对比和应用过程中的数据传输量,加强了多模式输出数据的实际对比分析能力,可以一定程度上解决网络带宽对大型NetCDF数据发布和应用的限制,从而为海洋大气与水文环境等信息发布提供了新的方法和途径,也为海洋大气水文环境要素等数据密集型信息基础设施(CI, CyberInfrastructure)理念的实践提供了依据 [9] [10] 。