海量空间信息存储技术--基于多尺度空间信息的单精度空间数据库研究_空间数据库论文

海量空间信息的存储技术——基于多比例尺空间信息的单精度空间数据库研究,本文主要内容关键词为:空间论文,比例尺论文,信息论文,海量论文,精度论文,此文献不代表本站观点,内容供学术参考,文章仅供参考阅读下载。

1 引 言

当前,由于信息数据呈指数级增长,对海量信息数据的存储和处理的研究是当前信息科学急需解决的关键问题之一。而据统计,全世界所有的信息数据中,约70%皆为空间数据和知识,其基础性、区域性、综合性和分布性等特征使其应用几乎涉及社会经济的各个领域,是区域经济、资源、环境、人口、社会可持续发展决策的重要基础,是国民经济信息系统和国家信息基础设施的重要组成部分。较之传统的非空间数据,空间数据具有更丰富的语义,对现实世界的描述更准确,应用更为广泛,但其最大困难在于海量空间数据的存储与处理[1]。

本文提出基于多比例尺空间信息的存储技术来解决海量空间信息的存储问题。多比例尺空间信息的存储是以一个大比例尺单精度空间数据库为基础数据源,在一定空间区域内空间对象的信息量随比例尺的变化自动增减,从而使空间信息的压缩和复现与比例尺自适应的一种信息处理技术,应用所需的任意小比例尺空间数据从大比例尺空间数据自动派生生成[2],是数字地球的核心技术之一。

传统空间信息系统的空间数据组织方式存在严重的不足,无法满足多比例尺空间信息系统的要求[3]。本文提出了基于可扩展的关系对象型数据库系统建立多比例尺空间信息系统的大比例尺单精度空间数据库的思想,并给出了系统框架和原型实现。

本文第一节论述了空间数据库的概念和传统空间信息系统的空间数据组织策略,第二节论述了基于可扩展的DBMS的空间数据库系统,第三节论述了基于可扩展的DBMS建立多比例尺空间信息系统单精度空间数据库的思想,第四节给出了基于可扩展的对象关系型数据库系统PostgreSQL建立SDSDB原型系统的系统设计和实现,第五节进行了总结。

2 空间数据库的概念与传统空间信息系统的数据组织策略

空间数据库定义如下[4]:

(1)一个空间数据库系统是一个数据库系统。

(2)它在数据模型和查询语言中提供空间数据类型(Spatial Data Type,简称SDT)。

(3)它在实现中支持空间数据类型,至少提供空间索引(Spatial index)与高效的空间连接(Spatial join)算法。

定义的第一点中首先强调空间数据库系统是一个具有空间数据处理能力的通用数据库系统。

定义的第二点中强调SDT(如:POINT、LINE和 REGION等)是空间数据库的核心,SDT与它们之间的“关系”(Relationship,如:L intersects R)、“属性”(Property,如:area(R)>1000)和“操作”(Operation,如:intersection(L,R)提供了空间实体建模的基本抽象。在面向空间信息系统的空间数据库系统中,简单的SDT包括POINT、LINE和REGION,复杂的SDT包括POINTS、NETWORKS、PARTITIONS等。

定义的第三点中强调空间数据数据库必须提供空间索引支持,以保证快速的空间查询操作。此外,还必须支持高效的连接算法,通过某种空间关系(Spatial relationship)将不同种类的对象连接,而不至于直接对空间对象集合的笛卡尔积(Cartesian product)进行过滤,至少应支持所面向的应用中比较重要的空间关系。

目前空间信息系统的空间数据管理主要存在两种体系结构:层次体系结构(Layered architecture)与二元体系结构(Dual architecture)。

采用层次体系结构的方法是在已有的DBMS(一般是RDBMS)之上实现空间功能。其中有两种策略表达SDT值,但都存在严重不足:

(1)用一个元组(TuPle)表示一个点的坐标或一个线段的坐标,并且将SDT值分解成小碎片,而在高层中实现SDT操作。这种策略被应用于早期系统实现,存在很多缺点,进行操作之前要将SDT值必须重新构造,代价很高。

(2)将SDT值用DBMS的一个长字段(Long fields)来表达。这比将SDT值打碎处理要好,但仍存在明显缺点,即DBMS只能以不间断字符串的形式处理几何数据。

在二元体系结构中,处在上层的集成层集成两个独立的子系统:标准DBMS(一般是RDBMS)管理非空间数据,空间子系统存储和管理空间数据。使用这种方法,每个空间对象(具有SDT值的对象)被分成两部分:非空间属性数据存储在DBMS中,空间数据保存在基于文件系统的数据结构中。两部分之间通过逻辑指针连接。这种方法有很多优点,但其缺点也十分明显:

(1)基于文件系统的空间数据组织无法获得数据库系统所固有的优势:数据结构一体化,数据冗余度低,很好的数据完整性、安全性、独立性、一致性和共享性,统一的数据控制和数据操作,支持事务操作等。

(2)查询操作不得不分解成空间操作和非空间操作两部分,在复杂查询的情况下造成很大的系统开销,而且无法逆行全局查询优化。

3 基于可扩展DBMS的空间数据库

目前,空间数据库系统的研究集中于利用可扩展的对象关系数据库技术构建空间数据库系统,基于可扩展的DBMS实现的空间数据库系统是一种集成体系结构,包括以下特点[4]:

(1)标准数据类型(如:STRING,INT)与SDT(如:POINT,REGION)在概念上没有区别,这也包括它们的操作,如:连接两个STRING和求两个REGION的相交区域。系统以同样的方式处理它们。

(2)标准数据类型的二级索引(Secondary index)(如:B-tree)与空间数据的二级索引(如:R-tree)在概念上没有区别。

(3)标准数据类型与空间数据在排序、连接等方面在概念上没有区别,系统对它们同等对待。

(4)查询优化机制不被划分成空间部分和非空间部分分别进行。

显然,可以根据以上给出的集成体系结构的特点设计并实现一种全新的数据库系统,但其代价是很大的,而基于可扩展的DBMS实现它则会使代价大大减小。同时,基于可扩展的DBMS实现的空间数据库系统本身也是可扩展的,允许用户根据需求灵活定制,包括添加或删减数据类型、索引结构等。这种可扩展、可定制的性质是十分重要的,因为很难构造出一种能包含各种应用要求(如空间信息系统,CAD等)的空间代数实现的封闭的DBMS系统。典型的可扩展的DBMS在体系结构上应该能够提供一系列的插槽(Slots)和注册功能(Re空间信息系统tration facilities),要求能涵盖全部或大部分的扩展需求,如图1所示[4]。

图1 集成的与可扩展的空间数据库体系结构

目前已有的典型的可扩展的DBMS包括:PostgreSQL,Probe,Gral,Sabrina等等。

4 多比例尺空间信息系统 单精度空间数据库

多比例尺空间信息系统以一个大比例尺数据库作为基础数据源,信息综合是建立在此数据源基础之上的。面向多比例尺空间信息系统的大比例尺单精度空间数据库技术是多例尺空间信息系统的核心。

定义1 面向多比例尺空间信息系统的大比例尺单精度空间数据库描述如下:

(1)它是一个面向空间信息系统的空间数据库系统。

(2)它在数据模型、系统实现和查询语言中支持数据综合功能,包括支持综合功能的空间数据类型(SDT)和高效的综合算法。

(3)它只存储单一精度的大比例尺的空间数据,小比例尺数据通过大比例尺数据自动综合生成。

在本文中,面向多比例尺空间信息系统的大比例尺单精度空间数据库简称SDSDB(Single-Detailed Spatial Database)。

由以上定义可知,SDSDB是支持数据综合功能的、面向空间信息系统的、通用的空间数据库系统。实现SDSDB的技术核心是在空间数据库系统之上集成空间数据的综合功能,由此在空间数据库系统的模型、体系结构、数据组织、存储方式、索引结构和查询等方面都会引起相应的变化。从应用的角度看,SDSDB具有以下主要特点:

·SDSDB是一个面向空间信息系统的空间数据库系统,它具备一般空间数据库的全部特性,并支持额外的数据综合功能,主要包括支持综合的空间数据类型和高效的综合算法。

·SDSDB只存储单一精度的大比例尺空间数据,而小比例尺数据自动从大比例尺数据综合生成,从而克服了传统空间信息系统为满足不同需求和针对不同应用目的而不得不存储同一地理区域的不同比例尺的空间数据而造成的数据冗余、容易出现数据不一致、难于维护等缺点。

·SDSDB支持空间数据和属性数据的一体化存储和管理,克服了传统空间信息系统采用的层次结构或二元结构的存储策略存在的一系列缺点,有利于实现查询的全局优化。

与空间数据库系统实现的两种方法相类似:一种方法是根据SDSDB的特点设计并实现一种全新的数据库系统,但代价很大;另一种方法是基于可扩展的DBMS实现SDSDB,其开发代价大大减小。同时,基于可扩展的DBMS实现的SDSDB本身也是可扩展的,允许用户根据需求灵活定制,包括添加或删减数据类型、索引结构和综合算法等。

基于可扩展的DBMS实现SDSDB的核心是实现支持综合功能的空间数据类型和高效的综合算法,其体系结构与图1给出的集成的与可扩展的空间数据库体系结构是类似的。

5 基于可扩展的对象关系型数据库系统PostgreSQL建立SDSDB

PostgreSQL是由美国加州大学伯克利分校开发的著名的对象关系型数据库系统,它是Postgres的后续版本。PostgreSQL提供了对SQL92(SQL2)的完整支持和对SQL3的部分支持。与传统的关系数据库系统相比,PostgreSQL提供了对类(Class)、继承(Inheritance)、用户定义函数(User-Defined-Functions)、用户定义类型(User-Defined-Types)和规则(Rules)等的支持。此外,PostgreSQL还支持约束(Constraints)、触发器(Triggers)和事务完整性(Transaction integrity)等关系数据库的增强功能。PostgreSQL是一种典型的可扩展的对象关系型数据库系统。关于PostgreSQL的介绍及文档参见文献[5]。

5.1 支持综合功能的空间数据类型

SDSDB对综合功能的支持反映在空间数据类型上就是要求空间数据类型本身直接支持综合操作,即弧段数据组织成线综合的结构,多边形数据组织成多边形综合的结构。针对基于PostgreSQL的实现,需要借助PostgreSQL对用户定义函数、用户定义类型和复合类型的支持。

PostgreSQL支持两种类型的用户定义函数:SQL函数和编译语言函数。前者采用SQL命令编写;而后者则要求使用编译型语言如C语言编写并编译成共亨库(Shared library)的形式,通过PostgreSQL命令注册并嵌入PostgreSQL。

PostgreSQL的用户定义类型要求以C语言结构(struct)的形式定义。对于每一种用户定义类型,PostgreSQL要求至少同时给出此类型的输入函数(input)和输出函数(output)的定义。用户定义类型的C语言结构描述了数据类型在内存中的组织形式,而输入输出函数则描述了此数据类型的输入输出的字符串表达形式。用户定义类型的输入输出函数是PostgreSQL的用户定义函数。

例如,在我们的原型实现中,利用一种典型的线综合数据结构Strip-tree定义用户定义类型strip的C语言结构示意如下:

typedef struct strip{

/*strip的左右分裂点坐标*/

double xb,yb;

double xe,ye;

……

/*左右儿子指针*/

int lSon,rSon;

}strip;

用户定义类型strip的输入输出函数说明如下(函数代码略):

/*Input function:strip_in */

strip * strip_in(char*str);

/* Output Function:strip_ out*/

char * strip_out(strip*p);

在完成了用户定义类型strip的C语言结构和C语言输入输出函数的定义后,在Linux下使用GNUC编译器(gcc)将之编译为共享库(.so)目标代码,然后在PostgreSQL的控制台分别通过CREATE FUNCTION命令和CREATE TYPE命令将输入输出函数以及用户定义类型strip注册并嵌入到PostgreSQL中。其中CREATE FUNCTION命令是PostgreSQL的SQL扩展命令,CREATE TYPE命令是PostgreSQL支持的 SQL3命令。

/*Create User-Defined-Function ″strip_in″*/

CREATE FUNCTION strip_ in(opaque)

RETURNS strip

AS′/home/tp/pgsql/zgisdb/strip/strip.so′

LANGUAGE′ c′;

/*Create User-Defined-Function″strip_ out″ * /

CREATE FUNCTION strip_out(opaque)

RETURNS opaque

AS′/home/tp/pgsql/zgisdb/strip/strip.so′

LANGUAGE ′c′;

/*Create User-Defined-Type ″strip″* /

CREATE TYPE strip (

INTERNALLENGTH=124,

INPUT=strip_in,

OUTPUT=strip,out

);

成功运行以上注册命令后,输入“\dT”控制台命令,显示当前PostgreSQL的所有数据类型,可以看到strip已经出现在类型列表中。PostgreSQL把用户定义类型strip与系统内建类型(如int4)同等对待,包括直接在SQL命令中使用这些用户定义类型。

同样地定义多边形(Polygon2)、网络(Networks)、划分(Partitions)等空间数据类型。同时,针对不同的空间数据组织层次(如:弧段,多边形,划分,图层等),在进行空间数据库实现时全面地分析和评估,界定空间数据类型的实现方法(如:定长用户定义类型,变长用户定义类型,数组用户定义类型,数据库表记录以及数据库表等)。从而获得比传统空间数据库更大的灵活性、可扩展性和高效率。

5.2 综合算法

综合算法的实现建立在PostgreSQL对用户定义函数的支持上。PostgreSQL支持两种类型的用户定义函数:SQL函数和编译语言函数。前者采用SQL命令编写;而后者则要求使用编译型语言如C语言编写并编译成共享库(.so)的形式,通过PostgreSQL的SQL扩展命令CREATE FUNCTION将用户定义函数注册并嵌入PostgreSQL。

PostgreSQL的可扩展性在用户定义函数上的体现主要是支持编译型语言如C语言编写用户定义函数,这是一种十分强大的功能。就PostgreSQL内部的实现而言,PostgreSQL将基本类型(Base types)当作“内存团点”(blob of memory)处理,从属于某个用户定义类型的用户定义函数完全描述了对此类型的操作,PostgreSQL根据类型的输入、输出和操作函数向外存中保存、从外存中提取和处理此用户定义类型的数据。这也是PostgreSQL要求用户定义类型必须至少定义输入(input)函数和输出(output)函数的原因。当PostgreSQL首次运行用户定义函数时,会自动从函数注册时所指定的共享库中动态载入函数代码。

5.3 用户定义类型的二级索引

PostgreSQL提供内建的B-tree、R-tree和Hash三种索引方法,通过SQL扩展命令CRETAE INDEX为数据库表创建二级索引(缺省值为B-tree),其中Rtree是一种空间索引结构,这与PostgreSQL支持内建几何数据类型是一致的。同时,PostgreSQL的可扩展体系结构还支持用户定义索引,即支持为用户定义类型编写专用的二级索引访问方法,从而为实现高效的SDSDB用户定义空间数据类型的空间选择操作提供了支持。

5.4 其他

(1)用户定义类型的运算符。SDSDB的实现要求根据SQL查询命令中条件,完成计算并返回综合结果,这需要在SQL查询命令的WHERE子句中使用用户定义类型,从而需要实现用户定义类型的运算符。PostgreSQL的用户定义类型运算符通过用户定义函数实现并通过CREATE OPERATOR命令注册并嵌入PostgreSQL中。

(2)空间数据与属性数据的一体化存储。基于可扩展的DBMS实现的空间数据库系统的一个重要目标是要实现空间数据与属性数据的一体化存储、管理和操作,从而克服传统空间信息系统采用的层次体系结构和二元体系结构存在的一系列缺陷。PostgreSQL作为一种可扩展的对象关系型数据库,提供了完整的关系数据库系统的功能。而实现空间数据与属性数据的一体化存储、管理和操作,可以通过PostgreSQL对类(class)和继承(inheritance)的支持实现。

(3)服务端编程接口(Server Programming Interface,简称SPI):PostgreSQL的服务端编程接口支持在使用C语言编写的用户定义函数中运行SQL查询。它通过提供一个SPI函数接口集合实现对服务端编程接口的支持,使用户能够访问PostgreSQL的分析器(Parser)、规划器(Planner)、优化器(Optimizer)、执行器(Exeutor)和内存管理。PostgreSQL对SPI的支持进一步增强了用户定义函数的功能。对于基于 PostgreSQL实现SDSDB而言,SPI使在通过用户定义函数实现的综合算法中直接使用SQL命令操作数据库的空间数据集合成为可能。

(4)事务完整性支持:事务是数据库应用中完成单一逻辑功能的操作集合,是一个既具有原子性又具有单一性的单元,典型的是由若干条SQL命令组成。PostgreSQL支持事务完整性。PostgreSQL对事务完整性的支持使当故障发生时,数据库能通过回滚(Rollback)恢复操作,从而保持数据库数据的完整性和一致性。

(5)数据远程访问接口:SDSDB是多比例尺空间信息系统的核心,也是作为多比例尺空间信息处理所依赖的基础技术平台的Web空间信息系统服务器端的中心部件。在Internet和Web的分布式计算环境下具体实施的多比例尺空间信息系统采用客户机-服务器(C/S)计算模式,SDSDB能否提供标准的(远程)数据访问接口成为一个重要的技术环节。PostgreSQL支持ODBC(Open Database Connectivity,开放数据库连接)、JDBC(Java Database Connectivity,Java数据库连接)等数据库访问接口,为远程客户端访问SDSDB提供了直接的和标准的接口支持,特别是对JDBC的支持,使开发基于Java的跨平台多比例尺空间信息系统的客户端成为可能。

表1 输出图幅数据统计

5.5 基于PostgreSQL的SDSDB体系结构设计

作为一种先进的、可扩展的对象关系型数据库系统,PostgreSQL在体系结构上提供了一系列的插槽和注册功能,使用户可以通过用户定义类型、用户定义函数等对PostgreSQL进行扩展。基于PostgreSQL的SDSDB体系结构如图2所示,图中的SDSDB系统可分为以下四个层次:

图2 基于可扩展的ORDBMS PostgreSQL的SDSDB体系结构

(1)最底层的PostgreSQL,为SDSDB提供了基本的实现平台。

(2)系统中间层是SDSDB的主体,它包括一系列面向多比例尺空间信息系统的、支持数据综合的空间数据库组件,包括支持综合的用户定义空间数据类型、基于用户定义函数的综合算法、用户定义类型的运算符、用户定义类型的二级索引访问方法和一系列空间数据类(表)等等。这一层是面向系统的,其内部实现对SDSDB的最终用户是不可见的。当然,它本身也是可扩展的。

(3)应用中间层是面向具体应用的,它主要实现空间数据与属性数据的一体化存储和管理,其他还包括索引、触发器等。

(4)应用层是面向最终用户的。用户通过SQL命令操作空间数据,得到综合处理后的查询数据结果集,其综合过程是对用户透明的。

6 应用实例

本文提出的基于多比例尺单精度空间数据库的体系结构、数据组织和设计思想在国家863项目“时空一体化智能城建信息系统”中得到了成功的应用,用它实现的空间数据库中多边形图层的化简和综合,获得比传统空间数据库更大的灵活性、可扩展性和高效率。如图3所示,利用SDSDB对综合功能的支持,运用我们的研究算法(参见文献[6])对多边形图层进行综合处理。设图3(a)比例尺为M,在输出比例尺为0.6M、0.3M、0.15M条件下,其综合结果分别见图3中的(b)、(c)、(d)。各输出图幅多边形统计数据见表1。

图3 多比例尺综合输出的小比例尺图幅

7 结束语

本文给出了基于多比例尺空间信息的单精度空间数据库的体系结构,目的在于解决海量空间数据的储存处理问题。目前,Web技术与组件技术等的发展相对成熟,特别是组件化的空间信息系统产品已经获得了成功应用,所以对空间信息数据库而言,其核心与研究工作的重点仍然是SDSDB。就本文的研究而言,尚有大量工作需要继续深入研究与探讨,如支持综合的空间数据类型的二级存储策略与二级索引访问方法的研究与实现,以支持高效的查询与连接操作;多比例尺空间数据库在并行机环境中的实现,以从硬件上更高效地实现海量空间数据的存储处理等等。

标签:;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  ;  

海量空间信息存储技术--基于多尺度空间信息的单精度空间数据库研究_空间数据库论文
下载Doc文档

猜你喜欢