钱金戈,董 潇
(南京工业大学 测绘学院,江苏 南京 210009)
空间数据库在.NET环境下的性能分析
钱金戈,董潇
(南京工业大学 测绘学院,江苏 南京 210009)
摘要:空间数据库是存储与管理空间数据的主要方式,也是影响地理信息应用系统性能的重要因素。介绍空间存储技术的概念与分类,以及.NET开发环境下连接空间数据库的发展历程;进而探讨不同的连接驱动类库在空间加载、数据新增以及空间查询方面的应用性能;设计三组空间数据库操作试验,对目前常用空间数据库连接方案的性能进行对比分析。
关键词:空间数据库;.NET平台;驱动类库;空间查询
空间数据库(Spatial Database, SDB)以其强大的空间数据存储与管理功能被广泛应用到地理信息系统软件开发领域。同时,作为当前空间数据引擎最主要载体的关系型数据库Oracle只能够通过连接驱动类库实现与.NET应用程序的相互通信,因此,选择不同的类库有可能会对应用程序的性能产生影响。由于.NET连接Oracle方式较多,性能差异较为明显,本文从地理信息系统使用角度出发,针对要素类加载、空间数据记录插入以及空间查询等多个方面设计相应的实验,分别对连接Oracle Spatial的三种典型驱动(Oracle Client、OLEDB和ODP.NET)以及ArcSDE For Oracle进行测试,并对比分析在.NET开发环境下,不同空间数据库连接方案的性能。
1空间数据库
1.1空间数据库的发展与分类
空间数据库是指以空间数据作为目标对象的专业数据库,用于存储一定范围内与空间地理相关且反映某一主题的数据集合,是GIS的核心技术[1]。同时它作为地理信息系统重要的组成部分之一,致力于解决在大数据量情况下空间数据与属性数据的集成管理问题。属性数据也称非空间数据,是一类结构化的且明显区别于空间数据的空间实体描述信息。从空间数据库概念提出至今,围绕空间数据与属性数据集成存储方案的更迭,空间数据库技术从总体上经历了多个发展阶段。从早期的文件系统到如今的对象关系型空间数据库管理模式,伴随每次管理方式的变革,空间数据库存储体系结构也发生了根本性的变化[2]。
空间数据引擎,或者说是全关系型空间数据库管理模式,其本质是介于用户和关系数据库管理系统之间的中间件技术[3]。以ESRI公司的ArcSDE为例,该方案是将空间数据作为一个二进制的数据类型,交由关系数据库管理系统进行存储;而ArcSDE则提供一组空间数据操作函数用于空间数据的转换、空间查询以及存储管理[4]。因此,在空间数据引擎模式下的关系型数据库仅作为存放空间数据的容器,而引擎本身则是空间数据进出该容器的转换通道。
对象关系型空间数据库管理模式是至今最新的空间数据存储方案,该模式出现的直接动力源自对象关系映射理论在商用数据库中的应用与发展。基于对象关系数据库管理技术,主流数据库生产商分别在数据库系统中进行扩展,使之能够直接存储与管理非结构化的空间数据,比较普及的有Oracle公司的Oracle Spatial、微软的SQL Server Spatial以及开源的PostGIS等,这些空间数据库具有相似的体系结构。在这种结构下,数据库提供对空间数据类型、函数与空间索引的支持,基于这种模式开发的地理信息应用程序具备通过空间结构化查询语言(spatial structured query language,SSQL)访问空间数据的能力[5]。
目前,空间数据管理主要是以空间数据引擎为主,但对象关系型空间数据库作为数据库提供商提出的解决空间数据存储的技术方案可以充分利用关系型数据库的内核,获得性能更加优异的管理效率。因此,对象关系型空间数据库管理模式具有很强的应用前景。
1.2.NET连接Oracle类库介绍
Oracle是较早实现对象关系型空间数据存储方案的数据库管理系统。从Oracle 11g版本发布开始,Oracle Spatial针对存储在Oracle中的空间数据,提供了一套从空间数据常规操作到空间计算处理的完整的函数集。与空间数据引擎ArcSDE For Oracle相比,利用Oracle Spatial进行地理信息系统应用程序的开发不需要借助额外的开发工具包,只需借助Oracle连接驱动类库配合空间结构化查询语言即可实现.NET平台下的开发工作[6]。
.NET应用程序采用驱动类库的方式实现与Oracle数据库交互由来已久。在早期的.NET FrameWork2.0中,微软将System.Data.OracleClient.dll类库添加进程序集中作为.NET平台连接Oracle的默认驱动;随后System.Data.OleDb.dll的引入标志着微软将通向不同数据源的底层应用程序接口置于.NET应用开发体系中[7]。Oracle公司方面则在不久之前发布了经过底层优化的托管型驱动类库,Oracle.ManagedData.dll致力于成为.NET开发Oracle应用程序的标准驱动。毫无疑问,选择不同的驱动类库将对.NET平台下开发基于Oracle Spatial应用程序的性能产生影响[8]。本文的多组实验项目旨在对比并分析不同驱动类库对于空间数据库应用程序造成的性能差异。
1.3空间查询
空间查询是地理信息系统应用中最重要的一项环节。所谓空间查询,也叫做空间检索,就是从空间数据库中获取满足某一条空间查询条件的要素集合的功能,其广泛出现在以土地利用、环境监测、城市规划设计、灾害评估等为主题的地理信息系统应用中[9]。
空间查询是对分析空间数据的多项功能的统称,包括拓扑关系分析、缓冲区分析、网络分析以及统计图表分析等[10]。本文第三组实验设计在不同的数据库模式与驱动类库的条件下实现应用程序根据拓扑关系的查询功能,对比其空间查询性能。
2对比试验
如图1所示,本实验为Visual CJHJ配合Oracle驱动开发的地理信息系统应用程序;采用基于客户端/服务器模式,即程序前端发出任务,通过驱动访问运行在后台的空间数据库。设计三组实验项目分别用于测试不同的驱动类库在空间要素加载、空间数据新增与空间查询的时间开销,对比驱动选择对于空间数据库应用程序性能的影响。与此同时,采用ArcObject10.2连接空间数据引擎执行相同的实验项目,横向对比空间数据引擎与对象关系型空间数据库两种方案在开发应用程序时的优缺点。运行在后台的关系数据库为Oracle11g,对象关系型空间数据库组件和空间数据引擎分别采用Oracle11g自带的Oracle Spatial以及ArcSDE10.2 For Oracle;从“国家基础地理信息系统”官方网站下载全国1:400万矢量地图,并从中选取“县级行政区域”与“一级河流”两个要素类作为实验数据。
由于应用程序进程在运行时存在一定程度上的不确定性,而这种不确定性会增加程序的时间消耗。为保证实验结论的可靠性,每组实验均连续多次执行,从中选取稳定的若干次结果进行对比分析。
图1 空间数据库应用程序的组织架构
2.1空间要素加载
本组实验的目的是测试不同组合方案下加载多个空间要素类的性能。Oracle Spatial的空间要素类加载实质上就是顺序遍历图层内的所有记录并以图表的方式展示在应用程序前端。实验所加载的数据为一级河流与县级行政区域,分别为线和面类型的要素。实验结果如图2所示。
图2 空间要素展示功能时耗曲线
2.2空间数据新增
空间数据新增实验通过连续向空间数据库新增1 000个和10 000个点要素,检测4种方案在大数据量插入环境下,在性能上产生的差异。对于ArcSDE For Oracle,使用ArcObject10.2提供的相关接口,而3种Oracle Spatial方案采用空间结构化查询语句实现空间数据的新增。实验结果如图3所示。
图3 空间数据新增功能时耗曲线
2.3空间查询
本实验以线要素类与面要素类的相交运算为依据分析不同组合方案下应用程序的空间查询性能。ArcSDE For Oracle的空间查询采用ArcObject10.2的查询接口;Oracle Spatial则直接将对应查询语句以字符串形式直接提交到空间数据库中。实验结果如图4所示。
图4 空间查询时耗曲线
2.4实验分析
表1为采用驱动类库Oracle Client、OleDb与ODP.NET连接Oracle Spatial以及ArcObject10.2连接ArcSDE For Oracle 4种方案的三组实验的平均时间消耗。
通过对Oracle Spatial与ArcSDE For Oracle诸多连接方案的三组实验过程与结果的综合分析,得出以下结论:
1)从空间数据库管理系统层面看,以Oracle Spatial为代表的对象关系型空间数据库在常规的数据操作(如图层加载、数据新增等)上强于以ArcSDE为代表的空间数据引擎;但是空间数据引擎在空间查询方面表现出强大的远超于对象关系型空间数据库的性能。
2)OracleClient方案仅作为其余两种驱动连接方式的参照实验,在实际的开发工作不应被考虑。实验过程中采用OracleClient方案的应用程序做统计查询时多次报出溢出错误,这说明System.Data.OracleClient.dll驱动存在缺陷。事实上作为.NET平台的开发商,微软公司也不推荐开发人员采用OracleClient驱动连接与Oracle相关的数据库。
表1 实验平均时间消耗对比
3)从驱动类库的选择角度上看,采用Oracle.ManagedData.dll连接Oracle Spatial的ODP.NET方案并非在任何情况下都表现出Oracle公司为连接.NET应用程序所做底层优化的特质。在另外一组新增1 000个点要素的实验中,采用ODP.NET的连接比.NET平台内置的驱动(OracleClient、OleDb)在时间上要多出一倍。这表明Oracle.ManagedData.dll具有一种渐进性的高效率,即随着空间数据量的增大,ODP.NET方案的应用程序性能的优异性越明显。
3结束语
驱动类库配合对象关系型空间数据库的连接模式相比于以传统的空间数据引擎为核心的连接方式,具有更加灵活且能够充分利用关系型数据库存取效率的特点;该模式在空间数据查询需求较小的地理信息系统开发中具有极高的应用价值;但由于该模式的空间数据查询性能远低于空间数据引擎,导致在高查询需求的地理信息系统中无法取代空间数据引擎。因此,在目前的实际开发中,要根据项目的具体需求,合理地选择连接方式。
参考文献
[1]肖邱勇,李光强.空间数据库性能对比实验分析[J].计算机工程与应用,2014,50(21):139-142.
[2]龚健雅.空间数据库管理系统的概念与发展趋势[J].测绘科学,2001,26(3):4-9.
[3]张垠. 基于ArcSDE的GIS空间数据存储分析[D].上海:华东师范大学,2005.
[4]程秀昌.空间数据库管理系统概论[M].北京:科学出版社,2012.
[5]徐承志,许承瑜,钱铁云. 基于GIS系统的空间查询语言[J].计算机科学,2010,6:206-210.
[6]王宝武,董慧君. 基于Oracle Spatial的Web实现方案[J]. 信息技术与信息化,2007,5:123-125.
[7]方华,盛蕾. 基于ODP.NET的Oracle数据库访问优化[J]. 计算机与数字工程,2006,8:142-144.
[8]蔡勇,邓跃进,余旭. 基于.Net的WebGIS服务开发[J]. 黑龙江工程学院学报(自然科学版),2004(3):14-16.
[9]李元文,耿富强.基于ODP.NET访问Oracle空间数据[J].矿山测量.2014,6(3):3-6.
[10] 何原荣,李全杰,傅文杰.Oracle Spatial空间数据库开发应用指南[M].北京:测绘出版社,2008.
[责任编辑:郝丽英]
Performance analysis for spatial database in .NET environment
QIAN Jinge,DONG Xiao
(School of Surveying and Mapping, Nanjing Tech University,Nanjing 210009,China)
Abstract:Spatial database is the primary manner to store and manage the spatial data, also as one of the most important factor to affect the performance of geographic information system. After introducing the concept and classification for spatial data storage technology, this paper discusses the development process to connect spatial database under the .NET environment. In order to analyze the connecting capacities that include feature class loading, features inserting and spatial querying, four experiments are designed and applied to comparing these capacities.
Key words:spatial database; .NET framework; class library; spatial querying
中图分类号:P208
文献标识码:A
文章编号:1671-4679(2016)01-0015-04
作者简介:钱金戈(1990-),男,硕士研究生,研究方向:地理信息系统开发与应用.
收稿日期:2015-10-11