基金项目:云南省社会发展科技计划——社会事业发展专项“城市地震安全关键技术应用与示范研究”(2007CA002)资助.
(Earthquake Administration of Yunnan Province,Kunming,650224,Yunnan,China)
ShakeMap; data structure; secondary development; software integration
备注
基金项目:云南省社会发展科技计划——社会事业发展专项“城市地震安全关键技术应用与示范研究”(2007CA002)资助.
通过分析ShakeMap的软件组成、数据结构,探讨了ShakeMap的二次开发及该软件与国内现有强震动软件的集成方法,并针对ShakeMap二次开发后运行时的数据锁定问题(多用户模式下的数据锁定)给出解决方案。
Based on analysis of the data structure of ShakeMap,this paper discusses the secondary development of ShakeMap software and its integration method with other current domestic strong earthquaking software.Meanwhile the article lists a solution of the data locking problem(data locking in the process of multi-clients mode)at the secondary development stage of the software.
引言
震动图是描绘地震发生后地震动分布情况的一种工具,它显示的是地震产生的地面运动和可能的烈度破坏情况(泽仁志玛等,2006)。震动图软件(ShakeMap)是美国地质调查局在美国国家科学基金会资助下、于20世纪80年代开发的地震专业软件之一,目前仍然在升级完善中。ShakeMap由一系列Perl语言开发的软件模块组成,输出PostScript、JPEG、GIS等图形格式的地面震动图,这些图件通过Web网页和电子邮件的方式对外发布。该软件具有功能强大、自动化程度高、定位精确、响应即时等特点,但是其组成和数据结构复杂,给软件的使用者带来了不便,而且二次开发较为困难、与其它应用软件集成难度较大,故目前尚未在中国大陆得到普遍应用。本文分析了ShakeMap的软件组成、数据结构,研究了其二次开发方法、与第三方强震动软件集成方法和二次开发后的运行时的数据锁定问题(多用户模式下的数据锁定),并提出了数据锁定问题的解决方案。
破坏性地震发生后,迅速判明灾情及其分布范围是地震应急的前提。强震动强度及分布与地震灾情密切相关,ShakeMap软件可利用国家及全球的地震波形信息,结合地震灾区密集的强地面震动记录,快速确定地震的起始和终止时间、地点及能量释放的具体过程,并结合当地地质结构信息,对地面震动观测数据进行插值,得到地面震动强度的分布后,估计出各地区可能的受灾程度,为合理分配救灾资源提供第一手资料。利用ShakeMap软件系统,可在地震发生后的几小时内确定地震能量释放过程,形成地面震动理论评估图,按照灾情程度合理分配救灾资源,为抗震救灾提供科学的参考依据,极大提高破坏性地震的救灾效率(倪四道,2008)。
目前,我国大陆内还没有ShakeMap或类似的系统(俞瑞芳等,2008),但中国地震局已开展了地面震动图的研究工作,正稳步取得进展。5·12汶川地震发生后较短时间内,中科院地质地球物理所姚振兴院士研究组和中国地震局地球物理所陈运泰院士研究组,利用远震波形反演得到了汶川地震的震源破裂过程。倪四道(2008)则用基于USGS的震源模型,在地震一天后计算得到了地面震动理论评估图,其总体形状与实地考察得到的地震烈度有较好的对应。由此可见,我国大陆的地面震动理论评估图是利用震波反演、震源模型和相应的计算方法来进行计算,还没有类似的实用系统。我国台湾地区从20世纪90年代起,在强震地面观测站密度大幅度提高的基础上建立了相应的地面震动速报系统。
20世纪90年代,美国加州理工学院和美国地质调查局(USGS)合作建立了的快速地震播报系统。随着在后南加州高密度TriNet台网建立的基础上,加州理工学院和USGS又建立了更实用的地震信息播报系统,该系统在地震发生后几分钟内就可以把地面震动分布确定下来并通知各注册用户,对于救灾非常有用。日本也在同时期建立了类似的系统如SIGNAL、ROSE。与发达国家的地震后快速形成地震动分布评估图相比,我国有明显的差距。
ShakeMap主要是对密集的地面震动观测数据进行插值,得到地面震动强度的分布。“十五”期间,云南省建立了176个固定强震动台、40个流动台、50个地震动强度(烈度)速报台、1个活断层影响台阵、1个场地影响台阵和1个西南强震动观测中心(崔建文等,2006),并在此基础上建立了强震动台网监控系统(刘琼仙等,2008),因此,云南省可以以强震动台网为依托,以监控系统为基础,建立ShakeMap系统。
目前ShakeMap震动图的二次开发和集成应用存在一定的困难,一是工作涉及面广,包括强震台的数据实时接入的处理,数据集成和结果发布等; 二是集成技术复杂,涉及因特网、CDMA无线网络之间的数据传输,PERL开发语言和JAVA语言的软件集成,Linux和FreeBsd操作系统上的程序相互调用和自动响应等。
1 ShakeMap 组成分析
ShakeMap 由软件模块(Perl语言开发)和第三方软件包(C语言开发)组成。
ShakeMap 由一系列功能模块组成,系统自动依次调用模块实现地震事件的数据读取、震动图生成、地震事件通知、地震事件中止等功能。调用模块的顺序是:retrieve→pending→grind→tag→mapping→genex→shakemail→transfer→setversion→scfeed(表1)。
ShakeMap 的安装和运行依赖大量的第三方软件包,且大部份核心数据处理是在第三方软件包中完成的,如震动图的绘制调用了地理图形工具GMT来完成。第三方软件包主要由Perl语言解释器、GMT软件、Convert软件、Ghost软件、scriptmake软件、SCCS软件、C语言编译器、MySQL数据库、MP(元数据解析器)、ZIP软件、SSH软件等组成。为了实现ShakeMap的二次开发及该软件与现有强震动软件整合,必须了解第三方软件包的组成并在此基础上熟练应用。
2 数据结构分析
ShakeMap的数据结构主要有4个类型:XML文件数据结构、MySQL数据库数据结构、NetCDF数据结构和ASCII数据结构。
2.1 XML文件数据结构XML是一套定义语义标记的规则,这些标记将文档分成许多部件并对这些部件加以标识。它也是元标记语言,即定义了用于定义其他与特定领域有关的、语义的、结构化的标记语言的句法语言。在ShakeMap中,地震事件信息和强震动台站信息以XML文件格式保存。
(1)地震事件参数结构
地震事件参数保存在event.xml文件中,数据结构见表2。
(2)强震动台站参数结构强震动台站参数保存在“*_dat.xml”文件中,其中*代表具体的台站名称。数据结构见表3。
2.2 MySQL数据库数据结构MySQL是一个多用户、多线程、SQL(结构化查询语言)的数据库服务系统。它以客户机/服务器的结构实现。安装ShakeMap时,生成MySQL的强震动数据库(用户可以自定义数据库名称,表名为earthquake)。作用是用于存贮ShakeMap程序生成的地震数据和地震标识数据,数据结构见表4。
2.3 NetCDF数据结构强震动数据以网络通用数据类型NetCDF的数据格式提供给ShakeMap 进行计算和处理。NetCDF是一种二进制编码存贮、自我描述式的独立于计算机的科学数据的文件格式。它也是一个数据类库接口,这种格式的接口和类库都支持生成、访问和共享科学数据。许多国家的组织和科学机构都采用NetCDF作为一个表示科学数据的标准方式(白伟华等,2006)。NETCDF文件主要由4个部分组成:(1)Dimensions:主要是多维资料的结构,如经度、纬度、时间等;(2)Variables:各种变量,像温度等;(3)Attributes:一些辅助记忆的说明,如变量的单位等;(4)Data主要资料部分。
3 ShakeMap 二次开发
3.1 ShakeMap的新模块集成ShakeMap由一系列Perl开发的小型软件组成,程序运行时先执行主程序shake,通过shake调用各种功能的软件模块。根据ShakeMap的这种特点,在进行二次开发时,可以采用各种计算机语言,如C、PHP、JAVA甚至是Perl等,开发出用户所需的新功能模块。然后以shell方式挂接到shake主程序中,这样二次开发出来的新模块可以被ShakeMap主程序调用,并且成为ShakeMap整个程序运行流程的一个有机部份。
3.2 二次开发工具我们选用J2EE进行软件开发,以Eclipse3.2为开发工具。Eclipse是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它是一个框架和一组服务,用于通过插件组件构建开发环境。我们开发的程序在和shake集成后运行,需要在服务器上安装JAVA运行环境,即安装JDK软件包。JDK是Java开发工具包(Java Development Kit)的缩写。它是一种用于构建在Java平台上发布的开发环境,其中包括Java编译器、JVM、大量Java工具以及Java基础API里面的Java类库和Java语言规范(段洪杰等,2006)。
3.3 ShakeMap新模块的设计构架根据ShakeMap软件的特点和二次开发要求,我们采用J2EE技术,spring + hibernate 软件框架开发ShakeMap的新模块。采用此框架开发的ShakeMap的新模块将具有良好的开放性、扩展性、完善的系统功能,能全面满足用户在现实中的需要(冀旭钢,2005)。
二次开发选取的设计框架为spring+hibernate组合。它是J2EE领域目前最流行、最实用的软件构架组合之一。框架的技术特点是Spring(IoC模式和AOP设计模式)和Hibernate(JDO设计模式)(高昂,卫文学,2005)。
Spring(IoC模式和AOP设计模式):Spring实现了反转控制和面向方面编程。它是从实际软件开发项目中抽象出来的一个实用的设计模式(符培炯等,2006)。
Hibernate(JDO设计模式):是一种新的ORM映射工具,它不仅提供了从Java类到数据表之间的映射,也提供了数据查询和恢复机制。使用Hibernate,可以大大减少操作数据库的工作量(文志刚,2003)。
3.4 软件接口ShakeMap的数据以XML格式、ASCII码格式、NetCDF格式和MySQL数据库的方式保存。在进行二次开发时,新增软件模块可以直接读写这些数据,实现与ShakeMap数据共用的完全整合。实现软件接口的方式如下:
(1)XML数据的读写的方式:我们使用Jakarta Common Digester(Digester)作为XML的读取工具。Digester是一套 XML 转化为JAVA对象的API,它可以将XML文件转换为任意的Java对象,并且提供灵活的扩展接口。
(2)ASCII数据的读写的方式:Java的IO模型设计非常优秀,它使用Decorator模式,按功能划分Stream,通过动态装配这些Stream,实现对ShakeMap文体文件数据的读写。
(3)NetCDF格式数据读写方式:NetCDF提供了JAVA的接口,通过调用NetCDF的API实现NetCDF格式的读写。
(4)MySQL数据的读写方式:JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口。 ShakeMap新增模块,可以使用原有的ShakeMap数据库。
4 强震动应用系统软件集成
通过网络和计算机编程把ShakeMap、强震台网监控系统和西南强震动中心网站集成在一起,形成一个完整的强震动业务应用系统。
4.1 集成软件特点集成的软件有如下特点:(1)在FreeBDS操作系统平台,ShakeMap以shell的方式运行;(2)强震台网监控系统由JAVA语言开发,采用Struts框架设计; 在Linux操作系统平台,以Web服务方式运行;(3)西南强震动中心网站由JAVA语言开发,采用Struts+spring+hibernate框架设计; 在Linux操作系统平台,以Web服务的方式运行。
由于集成软件有上述复杂性,为了让集成的各个软件的独立性不被破坏,又要使之集成为一个完整的应用系统。根据软件特点从软件的表现层、业务逻辑层、数据处理底层等进行多层次深入编程和集成开发。
4.2 软件集成的实现方法根据上面所述的集成软件的特点,选用如下技术实现软件的集成。
(1)采用Portal技术进行二次开发,实现Web程序的集成。Portal是一个基于Web的应用,通常它提供个性化、单点登录、内容集成和显示等功能。Portal技术包括3个方面:Portal服务器、Portlet容器和Portlet。通过Portal的运用就可以把强震台网监控系统、西南强震动中心网站和ShakeMap的Web数据和图形整合在一起(娄锋,孙涌,2007)。
(2)选用Hessian技术来整合ShakeMap和Web程序业务逻辑层。分布式是近年提出的一种新计算方式。在两个或多个软件互相共享软件模块,这些软件模块既可以在同一台计算机上运行,也可以在通过网络连接起来的多台计算机上运行。Hessian是一种异构的分布式组件,可以同时用于C++、DELPHI、JAVA、PERL等开发的语言中,这些模块可以相互调用,解决了不同编程语言的程序间无法相互调用模块的难题。
(3)采用SHELL技术,把一个小型程序嵌入到另一个程序中。由于ShakeMap的每个软件模块都是独立运行的小程序。因此可以在其它程序中以Shell的方式控制和调用。
5 ShakeMap多用户模式下数据锁定问题和解决方案
数据锁定是应用程序开发中最复杂的问题,也是提高程序可靠性和程序性能的关键因素之一,在程序运行过程没有办法保证数据访问的排他性,就容易产生一些潜在危害。例如:当多个用户登录网站时,通过Web同时调用ShakeMap的一系列模块,这些模块在处理数据时所生产的中间数据会被另外的用户所修改或调用,即多个用户同时调用一个模块时,模块无法识别中间数据是哪个用户调用产生的,这样就无法保证程序运行结果的正确性。为了解决这个问题,就需要在程序中引入锁定机制,给指定的应用软件模块上锁。由于ShakeMap锁定机制采用PERL语言开发,在结合其它计算机语言的自开发模块后,其锁定机制无法起作用,因此需要实现自己的锁机制(毛启容等,2004)。ShakeMap锁定机制可能的设计方案有两种:
(1)悲观锁定:程序运行时对数据被外界(包括本系统当前的其他事务,以及来自外部系统的事务处理)修改持保守态度,在程序模块运行过程中,软件模块处于锁定状态。直到被锁定的模块运行完成后,这些锁定才会被解除。悲观锁定大多数情况保证软件模块操作最大程度的独占性。但随之而来的就是软件性能的降低,当一个用户调用程序时,其它用户只能处在等待状态。
(2)乐观锁定:程序运行时不锁定任何数据,而是维护正在使用的软件模块和数据的相关信息(通过版本控制技术实现)。这样在调用程序时,程序就知道这个用户操作的中间数据是否被另外的用户操作所修改。如果应用程序在更新数据时发现信息已经被其它用户更改,则不会进行更新。并通知用户需要重试其操作。
我们采用乐观锁定的方式对ShakeMap软件模块进行加锁,实现方案是自行开发一个版本控制模块(乐观锁定的一种),按照事务处理的粒度级别对ShakeMap实施版本控制。加锁定机制的引入,必将大大提高强震动应用程序的可靠性。
6 结论
我们在分析ShakeMap的软件组成、数据结构的基础上,采用Struts、Spring和Hibernate框架对ShakeMap进行二次开发,使用Portal、分布式组件(Hessian)和Shell技术与国内现有的强震动软件进行集成,最后针对ShakeMap在多用户环境下的数据锁定问题,提出了解决方案。
强震动数据实时采集、震动图自动绘制和强震数据处理是一门跨学科、多领域的技术创新工程。我国强震领域的软件开发与国外相比目前有较大的差距,ShakeMap在我国强震领域中的二次开发并和国内强震动软件集成应用尚属首次。ShakeMap的二次开发和软件集成对我国的强震技术发展将有很大的促进作用。
- 白伟华,孙越强,朱光武,等.2006.基于NetCDF的GPS数据预处理[C].//中国空间科学学会空间探测专业委员会第十九次学术会议论文集(下册).
- 崔建文,高东,李世成,等.2006.新的云南数字强震动观测网络[J].地震研究,29(增刊):453-458.
- 段洪杰,周挚.2006.云南省地震信息行业网的开发与实现[J].国际地震动态,(增刊):97.
- 符培炯,杜忠军.2006.Spring在实现MVC构架中的应用[J].计算机技术与发展,16(6):242-244,247.
- 高昂,卫文学.2005.基于Hibernate与Struts框架的数据持久化应用研究[J].计算机应用,25(12):101-104.
- 冀旭钢.2005.利用Struts框架进行Web应用开发的研究[J].微机发展,16(6):123-125.
- 刘琼仙,周兰江,崔建文等.2008.云南数字强震动台网监控系统的设计与实现[J].地震研究,31(3):274-278.
- 娄锋,孙涌.2007.轻量级IoC容器的研究与设计[J].计算机技术与发展,17(1):91-93,97.
- 毛启容,王进峰,詹永照.2004.相对位置乐观锁机制及在协同编辑中的应用[J].计算机辅助设计与图形学学报,(9):.
- 倪四道.2008.应急地震学的研究进展[J].中国科学院刊,23(4):311-316.
- 文志刚.2003.基于J2EE与UML的管理信息系统研究与应用[D].成都:西南交通大学.
- 徐静,丁巨伟,王寅峰,等.2007.一种低开销的网格软件共享系统Portal[J].华中科技大学学报(自然科学版),35(S2):101-104.
- 俞瑞芳,俞言详,肖亮,等.2008.利用国家数字地震台网记录计算汶川地震余震峰值加速度分布图[J].国际地震动态,(6):4-8.
- 泽仁志玛,陈会忠,何加勇,等.2006.震动图快速生成系统研究[J].地球物理学进展,21(3):133-137.
- 张伟,陈晓非.2004.并行计算在计算理论地震图中的应用——应用MPI/OpenMP在SMP-cluster机群采用三维有限差分计算地震图[C].//中国地球物理学会第二十届年会论文集.