王卫红 陈建华
1 成都理工大学地球科学学院 四川 610059
2 成都理工大学地球物理学院 四川 610059
从国内外研究进展来看,原生数据库环境下GML空间数据管理机制的研究还处于非系统化、非全面化、非应用化的部分内容研究、初始研究阶段。对原生模式GML空间数据管理机制系统、全面的研究还需深入、具体的开展。本文借鉴XML数据管理机制思想,提出了一种基于原生XML数据库的原生GML空间数据存储模型;提出了一种原生GML空间数据库系统架构体系,为原生GML空间数据库存储机制提供了一种方法。
原生XML数据库的基本(逻辑)存储单元是XML文档,正如同关系数据库中的基本(逻辑)存储单元是二维关系表中的一条记录一样(也即,原生XML数据库中数据的存储是文档进、文档出,而关系数据库中数据的存储是记录进、记录出)。一般,原生XML数据库都有集合(Collection)的概念,一个集合是若干XML文档(甚至包括其它嵌套集合)的群集,其功能和特征与关系数据库中的二维表、文件系统中的文件目录类似。集合的设计,确保对XML文档的操作(存储、索引、查询、更新、删除等)可以在一个文档群集中进行。与二维关系表都有一个模式与其对应不同,原生XML数据库中的集合可以没有与其对应的模式,也即,它是模式独立的(Schema-independent)。集合的模式独立性使得原生XML数据库拥有了很多灵活性,并且为应用开发提供了很多便利;如,XML文档的存入、读取无需对应的XML文档模式的支持即可实现。
原生模式GML空间数据存储时,其理想存储模型也应为GML文档。并支持文档集合以及集合的嵌套,如此对GML文档的存储、查询、更新、删除等都可以在一个文档群集中进行。并且集合支持模式独立性,以便于GML实例文档的灵活存入与读取。
在存储粒度上,一般XML数据库的存储粒度分为:(1)粗粒度存储;即XML数据的存储以整个文档为存储粒度,此存储粒度不利于XML文档的查询和粒状更新。(2)中粒度存储;即XML数据的存储以XML文档树中的子树(元素集合)为粒度,此存储粒度可方便实现XML文档的查询和粒状更新,但效果视具体应用而定。(3)细粒度存储;即XML数据的存储以XML文档中的元素为粒度,此存储粒度可最大限度的灵活实现XML文档的查询和粒状更新;不过,由于以元素为粒度,处理时具有一定的开销。
对于GML文档的存储,本文在充分考虑GML索引构建、GML空间/非空间数据查询所采用的机制、算法、策略等情况下,并结合一些原生XML数据库系统(如eXist)的存储特性,确定其存储粒度为细粒度,以便于原生GML空间数据库系统的设计、实现和应用。
在对XML、GML、经典关系型数据库系统、传统空间数据库系统、原生XML数据库系统等分析的基础上,本文提出了一种原生GML空间数据库系统架构体系(见图1),其涵盖内容如下。
图1 原生GML空间数据库系统架构体系
原生GML空间数据库系统是以GML文档为存储模型,对GML文档进行数据组织、索引构建、存储分配、查询处理的数据库系统。系统对GML文档的读、写采用文档进、文档出模式;系统查询语言采用支持空间数据的扩展XQuery语言,可进行GML空间与非空间数据的一体化查询与更新处理;系统支持多种GML数据访问的API;同时,系统也具备传统数据库系统所具有的多用户多任务并发、事务、回滚、访问控制、备份等机制,以支持在包括分布式网络在内的各种环境下的应用。
原生GML空间数据库系统中存储的数据主要是GML实例文档,而GML实例文档一般都有对应的GML应用模式文档,以约束、控制和校验GML实例文档的结构与内容。因此,GML数据管理模块涉及GML模式文档管理和GML实例文档管理。
GML模式文档管理负责:(1)采用GML解析器对GML模式文档进行解析,提取出与GML实例文档中元素对应的各种元素类型信息,并提交GML实例文档管理子模块,由其负责依据元素类型信息采用GML解析器对GML实例文档进行解析。(2)采用GML解析器对GML模式文档进行解析并构建节点树再提交GML存储管理模块进行存储。(3)建立、维护GML模式文档存储检索表,以备GML查询处理模块对GML模式文档进行全文查询。(4)响应GML查询处理模块对GML模式文档的查询请求,并返回目标模式文档。
GML实例文档管理负责:(1)采用GML解析器对GML实例文档进行解析、构建节点树,并提交GML索引管理模块以构建GML非空间数据索引。(2)接收GML模式文档管理子模块发送的GML实例文档元素类型信息,据此采用GML解析器对GML实例文档进行解析,以提取GML要素、几何、拓扑等对象,并提交GML索引管理模块实现对GML空间数据的索引构建。(3)原生GML空间数据库系统支持集合(以及集合的嵌套),因此,在将GML实例文档相关信息提交GML索引管理模块时,也提交关联集合的信息,以便于构建索引。(4)当不对GML实例文档构建索引时,采用GML解析器对GML实例文档进行解析并构建节点树再提交GML存储管理模块进行存储。(5)建立、维护GML实例文档存储检索表,以备GML查询处理模块对GML实例文档进行全文查询。(6)响应GML查询处理模块对GML实例文档或集合的查询请求,并返回目标实例文档或集合信息列表。
GML实例文档入库时分两种情况:有GML模式文档相伴和无GML模式文档相伴。当无GML模式文档相伴时,将无法有效的建立GML空间数据索引。
索引管理是一个数据库系统重要的功能模块。
GML文档向原生GML空间数据库存储时需对文档中的GML空间和非空间数据建立索引,以便高效进行GML空间数据的查询。与GML空间数据文档存储入库时不构建索引相比,存储时建立索引将耗费更多的时间;但是从数据库的整体操作、使用而言,一般遵从“操作局部性”(类似于计算机科学中的时间局部性原理和空间局部性原理),表现为通常对数据库中数据的增加、删除、修改、查询等操作,一般情况下局部化为查询操作。鉴于此,GML空间数据存储入库时因建立数据索引而额外耗费的时间,对于数据的后续操作和使用管理是非常有价值的。
GML索引管理包括:GML非空间数据索引管理和GML空间数据索引管理两个子模块。
GML非空间数据索引管理负责:(1)接收GML数据管理模块发送的GML实例文档解析、构建的节点树,并采用XML文档编码方案(如论文提出的Ex-Dewey前缀编码方案)对GML实例文档构建GML非空间数据索引。(2)接收GML数据管理模块发送的与GML实例文档关联的集合信息,以共同对GML实例文档构建GML非空间数据索引。(3)将构建的GML实例文档非空间数据索引信息数据提交GML存储管理模块进行存储,并同时提交GML实例文档节点树数据,对GML实例文档数据进行存储。(4)协调GML空间数据索引管理子模块对GML实例文档构建空间索引。(5)响应GML查询处理模块对GML非空间数据的查询请求,并返回相关索引信息数据。
GML空间数据索引管理负责:(1)接收GML数据管理模块发送的对GML实例文档解析后提取的GML要素、几何、拓扑等对象数据,并采用R树、R+树等经典空间数据索引算法实现对GML空间数据的索引构建。(2)接收GML数据管理模块发送的与GML实例文档关联的集合信息,以共同对GML实例文档构建GML空间数据索引。(3)将构建的GML实例文档空间数据索引信息数据提交GML存储管理模块进行存储。(4)与GML非空间数据索引管理子模块交互,完成对GML实例文档空间索引的构建。(5)响应GML查询处理模块对GML空间数据的查询请求,并返回相关索引信息数据。
由于GML实例文档索引的构建比较耗时,可采用后台服务进程/线程自动构建索引的方式,从而保证GML实例文档可以迅速存入GML空间数据库中。当GML实例文档索引后台自动构建还未完成时出现查询请求,可采取的策略是直接对GML实例文档进行检索。根据局部性原理,通常GML实例文档入库后不会很快出现大量、频繁的查询请求,此时直接检索GML实例文档是可行的,当索引构建完成后则可先查询索引,然后快速定位GML目标数据。
GML存储管理负责:(1)GML模式文档、GML实例文档、GML集合信息、GML实例文档非空间数据索引信息、GML实例文档空间数据索引信息的物理存储。(2)GML模式文档、GML实例文档、GML集合信息、GML实例文档非空间数据索引信息、GML实例文档空间数据索引信息的提取。(3)响应GML查询处理模块对GML空间、非空间数据的查询请求,并返回实际数据。
GML存储管理采用原生XML数据库系统(如eXist)已有的存储管理模块,实现对上述功能的支持。
GML查询处理既要实现一般XML数据的查询功能,又要实现GML所特有的空间数据查询功能。它包括:GML查询解析、GML查询执行、GML查询结果构造等子模块。
GML查询解析负责对GML查询语句(由XQuery查询语言增加空间扩展支持实现)进行解析,对查询语句结构、合法性等进行分析,如果语句不合法则返回错误信息,否则对查询语句进行分类(包括:GML模式文档全文查询、GML实例文档全文查询、GML集合信息查询、GML非空间数据查询、GML空间数据查询、GML 空间、非空间数据混合查询等),并将分类信息提交GML查询执行子模块进行查询执行。
GML查询执行负责根据查询语句分类信息进行数据的查询执行,并将查询结果提交GML查询结果构造子模块。之中:(1)对于GML模式文档全文查询、GML实例文档全文查询、GML集合信息查询直接访问GML数据管理模块,由其执行并返回结果。(2)对于GML非空间数据查询则先访问GML索引管理模块,由其返回与查询相关的索引信息数据,然后采用结构连接算法(如论文提出的ED-XQ-SJ算法)确定符合查询条件的节点信息,并进而依据索引信息中节点编码值所对应的节点物理存储地址,通过GML存储管理模块读取节点实际数据。(3)对于GML空间数据查询则先访问GML索引管理模块,由其返回与查询相关的索引信息数据,然后利用空间索引构建采用的算法(如R树算法)确定符合查询条件的GML要素信息,并进而依据索引信息中GML要素所对应的物理存储地址,通过GML存储管理模块读取GML要素的实际数据。(4)对于GML 空间、非空间数据混合查询,则先执行GML非空间数据查询,在其结果集上结合对应的空间索引信息以及非空间索引信息,进一步执行空间数据查询,并最终通过GML存储管理模块获取实际的GML数据。
GML查询结果构造负责将查询获取的目标原始数据,依据数据关系(如节点编码值等)进行GML格式的数据构造,并返回(对于GML模式文档全文查询、GML实例文档全文查询、GML集合信息查询则直接返回)。
为方便原生GML空间数据库的使用,需要构建各种GML数据访问的API,如:类似XML-RPC、XML:DB API的访问接口,能够通过SOAP、HTTP进行GML数据访问的接口等。GML数据访问API将可直接访问GML数据管理模块和GML查询处理模块。
一般数据库系统都具有多用户多任务并发、事务、回滚、访问控制、备份等机制,原生GML空间数据库系统也需具备上述特征,以便于在包括分布式网络在内的各种环境下使用。GML空间数据库将采用原生XML数据库系统(如eXist)已具备的上述机制实现对上述功能的支持。
将原生GML空间数据库构建于原生XML数据库系统之上,不仅可以充分利用XML数据库系统已有的成熟功能与机制,而且可以将XML文档、GML文档共储于同一数据库系统中,实现GML地理空间数据、XML普通事务数据的一体化存储;正如当前基于关系型数据库的地理空间数据库系统一样(如:Oracle Spatial)。
与XML数据存储类似,GML空间数据的存储方式也包括:文件存储管理方式、关系数据库存储管理方式和原生数据库存储管理方式。原生GML空间数据的存储构建于原生XML数据库之上是一种理想的选择。基于开源原生XML数据库(如:eXist)并充分考虑GML索引构建、GML空间、非空间数据查询所采用的机制、算法、策略等情况,原生GML空间数据的存储模型以细粒度(即,存储以GML文档中元素为粒度)为宜。本文进一步重点研究、设计了原生GML空间数据库系统架构体系,给出了系统定义、系统架构与系统模块的交互原理与技术方法;系统模块包括:GML数据管理、GML索引管理、GML存储管理、GML查询处理、GML数据访问API,以及多用户并发、事务、回滚等其它支撑模块。
[1] OGC. OpenGIS Geography Markup Language (GML) Encoding Standard (Version 3.2.1)[EB/OL]. http://www. opengeospatial.org/standards/gml.2007.
[2] W3C. eXtensible Markup Language (XML) 1.0 (Fourth Edition)[EB/OL]. http://www. w3.org/TR/2006/REC-xml- 20060816.2006.
[3] 兰小机,张书亮,刘德儿等.GML空间数据库系统研究[J].测绘科学.2005.
[4] 兰小机,闾国年,刘德儿.GML空间数据查询与索引机制研究[J].遥感学报.2006.
[5] 兰小机,刘德儿,闾国年.GML空间数据索引机制研究[J].计算机工程.2007.
[6] 兰小机,肖辉辉,段艳明,基于扩展NXD的GML空间数据库数据查询系统[J].大地测量与地球动力学.2008.
[7] 陈建华,王华军,苗放,等.XML/GML非空间数据查询的结构连接算法[J].计算机工程.2010.
[8] 陈建华,王卫红,苗放.基于Ex-Dewey前缀编码与R树的GML空间数据索引机制[J].地球信息科学学报.2010.