一种数据库空间几何对象存取方法

文档序号:6483658阅读:197来源:国知局
专利名称:一种数据库空间几何对象存取方法
技术领域
本发明属数据库与地理信息系统交叉的信息领域,特别涉及一种在数据库管理系统内核 中实现的空间几何对象存取方法。
背景技术
海量地理空间数据的高效组织和管理是下一代地理信息系统(GIS)平台所要解决的关键 技术。"关系型数据库+空间数据引擎"和"扩展对象关系型数据库"是当前工业界所采用的 两种主流技术。前者是经典GIS领域所采用的技术体系,其核心是利用高效的空间数据引擎 (中间件)来组织空间数据在关系型数据库中的存储和调用(以下简称"寄存模式");后者是 IT数据库厂商所采用的技术体系,其核心是在数据库管理系统(DBMS)内核增加空间数据 类型、空间索引及空间SQL语言(以下简称"内置模式"),从而形成空间数据库管理系统(spatial DBMS, SDBMS)。
内置模式由于将空间数据的管理与通用数据库系统融为一体,空间数据按对象存取,可 在数据库内核中实现空间操作和处理,并提供统一的SQL接口,已成为未来的发展方向。但 由于内置模式直接与数据库内核捆绑,实现难度较大,相比已较为成熟的寄存模式,内置模 式在海量空间数据的操作和分析方面性能仍有待提高。
空间数据类型作为SDBMS表达和操作空间几何对象的一种抽象接口,其底层实现机制 直接影响数据存取效率。由于空间几何对象与身俱来具有大对象(largeobject, LOB)特征, 故常规SDBMS —般直接沿用已有的LOB体系结构,并借助空间索引来存取空间几何对象, 如具代表性的SDBMS平台PostgreSQL/PostGIS、 MySQL Spatial Extensions, Ingres Spatial Library等。其中,空间索引主要用于快速定位目标空间几何对象,而命中对象数据的本身存 取则借助LOB机制实现。LOB机制的设计初衷主要用于存取非结构化的"串"型数据,如 多媒体数据流、Word文档等大值数据, 一般包含二进制大对象类型(BLOB类型)和文本大 对象类型(如CLOB类型)。由于LOB列单个对象的数据量可以高达GB级,故一般支持LOB 列数据的行内(inline)或行外(out-of-ine)的组合存储,即LOB列行内可以只存储辯向外 部值的一个定位指针,而实际LOB值存储于行外页面或操作系统文件中。
由于LOB机制的设计初衷针对的是普通非结构化数据,未考虑空间几何对象所具有的空间非结构化特征及其数据操作的特殊性,故其数据组织和存取框架并不适合空间几何对象。 这主要表现在以下两方面
(1) 空间几何对象具有空间几何特征。空间几何对象的最小外包矩形、面积、周长等 虽然不属于空间几何对象本身,但对于空间索引创建、空间关系判断、空间统计等常规操作 具有重要意义。LOB机制由于在主表行内一般只存储指向真正LOB值的定位指针,故以上
特征值往往需要读取行内定位指针后,进一步通过访问行外值后实时计算获取,且即使已在 行外值中预存有相关几何特征值,但往往也会存在行外的二级访问开销。
(2) 空间几何对象具有空间关系特征。不同于普通大对象,空间几何对象的操作一般 具有单个对象整体存取(而不是局部存取,如CLOB串的Substring操作)和空间邻近对象同 时存取(如常规的开窗査询)的特点,故存在几何对象值的空间聚集存储和统一访问需求, 而普通LOB机制不支持LOB值的空间排序,对象之间的空间无序存储往往带来额外的I/O 开销。
以上分析可知,采用常规LOB机制存取空间几何对象存在不必要的I/O开销,而I/O又 是影响数据库性能的敏感参数(尤其针对存取大值数据),故迫切需要针对空间数据特征,设 计针对性的数据存取方法,以提高内置模式下海量空间数据的查询与分析^r率。

发明内容
本发明要解决的技术问题是针对基于常规LOB机制存取空间几何对象I/O响应效率不 高的问题,提出一种数据库空间几何对象存取方法,根据空间几何对象的空间几何特征和空 间关系特征存入空间几何对象值,以尽可能减少数据读取时不必要的行外访问过程,并在必 须介入行外访问时,实现如何提高行外数据访问的I/O效率。
本发明解决其技术问题所采用的技术方案 一种向数据库存入空间几何对象值的方法, 其特征在于包含如下步骤
(1) 创建包含几何列的数据库空简表; 根据数据库空间表所要存储的空间几何对象的几何特征,将几何列的列数据类型定义为
相应的几何数据类型,如点、线、面等,并同时创建必要的索引附属结构。
(2) 接收消息方式的空间几何对象实例,提取空间几何特征值并初始化几何列的行内 指示器,包含如下步骤
① SDBMS接收结构化查询语言、编程访问接口等方式发送的空间几何对象值,从消息 格式转换为SDBMS内部逻辑表达结构待处理。
② 从空间几何对象实例中提取出与常规空间査询与分析操作密切相关的几何特征值集 合A (Ap A2, ..., An) (n20),可以包含但不仅限于空间几何对象的最小外包矩形、面积、周长。
③初始化定位指针P,并联合几何特征值集合A,构成几何列的行内物化存储项{ A, P }, 可称之为几何列行内指示器。其中,定位指针P主要用于描述几何对象序列化后的存储信息, 可包含如下子项{PLen, OBID, OBLen, flags},其中,PLen为定位指针结构的总长;OBID 用于唯一标识空间几何对象实例;OBLen为几何对象序列化值的长度;flags为存储标志,用 于标识如序列化值的行内或行外存储、是否压縮等信息。
(3) 计算并为每一个空间几何对象赋空间排序码,包含如下步骤
① 获取当前空间表的空间区域范围和四分深度n (nd),选取一种空间填充曲线算法对 本表所属空间区域范围进行格网编码,使每一网格具有唯一码值代表行号,j代表列号)。 其中,空间填充曲线算法可以采用但不仅限于如下方法Hilbert曲线、Z序曲线、格雷码、 Morton编码等。
② 根据空间几何对象的空间分布特征,将基于空间填充曲线计算获得的网格编码进一步 转换为对象编码,从而使每一个待存入的几何对象对应一个空间排序码值(spatial sorting code, SSC),用于后续建立几何对象的分块聚集索引。
将网格编码进一步转换为对象编码的方法是对于点状对象,若其落入某一个网格内, 则其空间排序码为此网格编码;若其落在格网的边线上,则任取一个以该边线为边的网格编 码。对于线状、面状对象,通过对象的最小外包矩形特征值快速概算其与格网的相交关系, 若最小外包矩形完全落入某一网格内,则对象的空间排序码为此网格编码,若其占据了多个 网格,则取所占网格数最多、最临近树底层的网格编码,并在其后补0,形成与叶子节点位 数相同编码后,将其作为此对象的空间排序码。
(4) 写入几何列的行内指示器及其他行内数据,包含如下步骤
① 将空间几何对象从逻辑表达结构进一步转换为序列化存储结构,形成物理存储的序列 化值。序列化值是对逻辑表达结构作数据简化、压縮(如必要),并进行流化处理的结果,与 具体实现相关。
② 判断当前几何对象的序列化值采用几何列的行内或行外存储。根据给定的几何列的行 内阈值以及空间几何对象的空间几何特征,决定当前序列化值采用行内或行外存储,即如果 当前序列化值小于或等于给定的行内阈值,或对应空间点类型,则进行行内存储;当序列化 值大于给定的行内阈值时,则将该值移出空间表,并采用步骤(5)所给出的分块聚集索引组 织方法写入行外页面。
③ 根据几何对象序列化值的长度,更新行内指示器中的OBLen,并根据行内或行外存
储、是否压縮等信息填写flags标识,最后联合行内序列化值(当采用行内存储时) 一并写入
6空间表页面。
(5) 采用几何对象的分块聚集索引方法写入几何列的行外数据,包含如下步骤
① 如果当前空间表的行外值存储结构未创建,则创建用于组织和存储行外值的、与空间 主表关联的二级表。如已创建,则直接进入以下第②步。
② 将当前几何对象的序列化值分解为n个(nSl)数据子块,数据子块尺寸不能超过数 据库页面大小,从而便于将子块标识为数据库常规元组的一部分。每一子块对应二级表中的 —个元组,可包含如下属性(OBID, BLKID, SCC, BLKLen, flag, BLK},其中,OBID用 于唯一标识当前子块所归属的空间几何对象实例;BLKID为当前子块在序列化值中的序号; SCC为当前子块所属空间几何对象实例的空间排序码(参考步骤G)); BLKLen为当前子块 中存储数据的长度;flag为块标志,如块数据是否压缩等;BLK为当前数据子块内容。
③ 循环写入每一个子块记录到二级表,并基于子块的SCC属性作为二级表的聚集键进 行组织和存储,从而形成分块聚集索引组织表,实现对象内部和对象之间分块结构的空间邻 近到物理聚集的映射,即归属同一个空间对象的子块SCC值相同,故自动写入聚集页面(即 这些页面物理邻近存储),而空间邻近对象的子块SCC值邻近,故同样自动写入聚集页面。
(6) 创建或更新空间索引。 根据几何对象行内特征值之一的最小外包矩形,创建或更新空间索引,无需额外访问行外值。
本发明的技术方案还包括一种向数据库读取空间几何对象值的方法,其特征在于包含 如下步骤
(a)根据当前空间操作类型和几何对象序列化值的存储类型,确定几何对象值的读取类
型;
读取类型划分为以下三种
仅行内访问。对于只需要获取几何特征值的空间操作,如常见的空间索引创建或更新操 作、基于面积或周长的运算操作等,或所需几何对象值为行内存储时,读取几何列指定空间 几何对象实例的行内值,不再访问行外值。
延迟行外访问。对于需要行内几何特征值作概算的空间操作,如常见的Intersects、 Touches、 Overlaps等空间关系判断操作,则先读取几何列指定空间几何对象实例的行内几何 特征值作概算,判断其是否满足逻辑计算需求如满足,则规避访问行外值来提高读取效率; 如不满足,则再根据行内定位指针P访问行外值并实例化整个对象。
行内并行外访问。对于几何对象编辑、下载等需要直接获取整体几何对象的操作,且对 象本身长度超过行内阈值的,先读取几何列的行内值,再根据定位指针P进一步访问行外值(b)读取几何列指定空间几何对象实例的行内值;
无论哪种类型的读取操作,都必须访问几何列的行内值,但如果读取为仅行内访问或延 迟行外访问类型,则直接返回行内指示器和序列化值(当阈值内)。 (C)如必要,再读取几何列指定空间几何对象实例的行外值;
对于延迟行外访问一级概算不满足需求的,或执行的是行内并行外访问类型时,取当前 几何列指示器的定位指针P,根据其所存储的OBID值,找到行外匹配的所有聚集子块,读 取这些子块,并根据子块的BLKID属性进行有序合并,从而还原出对象的整体序列化值返回。
本发明与现有技术相比所具有的优点是本发明一方面针对空间几何对象的几何特征值 在逻辑运算中的重要性,在几何对象的存入阶段进行了几何特征值的快速提取,并通过物化 缓存到几何列的行内,实现了传统LOB机制所不具备的、空间几何对象的行内和行外的两级
访问过程,从而尽可能规避空间索引生成、空间关系查询过程中不必要的行外访问过程,从
逻辑上提高数据读取的响应效率;另一方面,针对空间操作一般具有单个几何对象整体存取
和空间邻近几何对象同时存取的特点,在几何列行外值的写入过程中进行了序列化值的子块 分解和聚集排序,实现了单个几何对象到多个空间邻近几何对象分块值的聚集存取,从而进
一步实现了几何列行外值I/0访问的最小化。基于1GB 20GB的分级测试结果表明,本方法
较传统LOB访问机制空间査询效率平均提高约25%~30%。


图1是数据库存入空间几何对象值的流程图; 图2是数据库读取空间几何对象值的流程图; 图3是空间表组织结构方案(schema)示意图; 图4是空间表行内与行外组织结构示意图; 图5是空间排序码生成示意图; 图6是空间査询结果示意图。
具体实施例方式
结合本发明方法,给出以下实施例向空间表lg的几何列(假定列名为geom)存入4 个几何对象G产(POINT(l 2)} 、 G2={POLYGON(0 0.9,., 1.3 0.9, 1.3 2, 0 2)}、 GH環EST腿G(1.5 1,2.5 1,2.3 2.3)}、 G4={POLYGON(2.8 1,3.6 1,3.6 1.8,2.8 1.8)},并以典
型的空间关系査询为例进行读取,以说明整个数据存取流程。
本发明提出的向数据库存入空间几何对象值的方法,其流程如图1所示,包含如下步骤
(1 )创建包含几何列的空间表Tg;
创建包含几何列的空间表Tg时,同时构建其附属结构和关联关系,形成组织结构方案Schemag={Tb,Ts,Ibs,RbS},如图3所示。其中
① Tb={d, C2,..., Cn, Cg}(n^)),为包含几何列的主表表结构,Cj表示非几何列,Cg表示 几何列,并假设列名为geom。几何列的字段类型一般为数据库所定义的几何数据类型,如参 照ISO SQL/MM-Spatial标准所给出的ST—Geometry类型体系。本例中,假设列geom为 ST—Geometry类型,可存储点、线i面等不同类型几何数据。
② Ibs表示建立在Tb表Cg列上的空间R树索引,用于快速定位目标几何对象记录。
③ Ts={Ci, Cs, Ch, Cf, Cv},为存储Tb表Cg列行外值的二级表表结构范例,其每一元 组存储几何对象序列化值的一个子块记录。其中Ci为子块所属几何对象的唯一标识;Cs为
当前数据子块在整个序列化值中的序号,可联合Ci建立唯一索引快速检索所需序列化值;Ch 为子块所属几何对象的空间排序码,可定义为固长字符类型;Q表示子块数据的实际长度; Cf表示数据存储状态;Cv表示子块的数据值,可定义为指定长度的变长字节类型,如本实施 例中,假设块长为60字节(实际实现建议使用较大数值提高性能),则类型定义可为 Varbyte(60)。 Ts的每一元组记录主表中特定空间几何对象中的一个数据子块,两者具有相同 的Ci值。
L表示建立在Ts表Ch列上的B树聚集索引,如图3中箭头所示,索引邻近对象映射 到物理邻近的子块记录。
⑤Rbs表示主表Tb和二级表Ts的对应关系,可通过命名规则或元数据标定。 (2)接收消息方式的空间几何对象实例,提取空间几何特征值并初始化行内指示器; 结合实施例包含如下步骤
① 以G2的插入为例(其它同理),假设执行以下SQL语句"INSERT INTO Tg(geom) VALUES('POLYGON(O 0.9, 1.3 0.9, 1.3 2,0 2)')",则SDBMS首先需要将G2从消息文本格式 'POLYGON(0 0.9,1.3 0.9,1.3 2,02),,解析并转换为内部表达结构g={P; null;l; (0,0.9) (1.3, 0.9) (1.3,2) (0,2) }。其中g采用了 Polygon结构类型,伪定义为Struct Polygon {type, srid, nrings,pointarray},其中,type记录几何类型,srid记录坐标系统,nrings记录多边形环的个 数,pointarray为点集的二维数组。
② 从内部表达结构g中提取出与常规空间查询与分析操作密切相关的JL何特征值集合, 包括计算g的最小外包矩形Am-((0,0.9)(1.3,2",其中(0,0.9)和(1.3,2)分别为最小 外包矩形的两个对角点坐标;周长Af4.8;面积Afl.46。
③ 初始化行内指示器P-(Pa,PJ,如图4所示,其中Pa^Am,A,,AJ,记录以上几何特
征值集合;Pp-(Pi,Pi,Pt,Pf),记录定位指针。仍以g为例,定位指针Pp中P尸16,表示定
位指针总长为16字节;P尸21,表示G2的唯一标识符为21; P产0,即G2尚未序列化,暂无法确定序列化后数据总长;P产0,表示的是存储相关信息,由于此时存储方式未确定,同样 用0表示。
(3) 计算并为每一个空间几何对象赋空间排序码;结合实施例包含如下步骤-
① 对g所在的区域范围He={(0, 0), (4, 4)}作四分深度&={4}的格网划分,同时采用 Hilbert空间填充曲线对格网进行编码,如图5所示。He被划分成16个网格,按照Hilbert空 间填充曲线顺序,形成16个三级网格GT,, GT2, ......, GTI6, 4个二级网格GS" GS2, GS3,
GS4和1个 一 级网格GF!;其中GT,, GT2 , GT3 , GT4组成二级网格GS,,即 GS产(GT!,G丁2,GT3,GT4〉,同理GS2={GT5,GT6,GT7,GT8} , GSffGT^GT^GT^GTn}, GS4={GT13,GT14,GTI5,GT16}; GS,, GS2, GS3, GS4组成一级网格F。
② 计算可以获得g与三级网格T,, T2, T3, T4, 二级网格S,和一级网格F,相交,g没 有完全落入任意一个三级网格中,但是完全落入了二级网格中,因此将的网格编号作为 g的空间排序码,因为S,是二级网格,因此需要补0,即H-(OIOO〉。
(4) 写入几何列的行内指示器及其他行内数据;结合实施例包含如下步骤
① 将g进一步转换为序列化存储结构Gs,如采用GeoSerl结构类型,伪定义为Struct GeoSerl {int size, unsigned char *glob},其中,size为glob序列化字节流总长,假设对于G2 为85字节;gbb为字节流首地址,而字节流的具体格式和实现相关,如可以采用开放空间信 息协会(OGC)标准的WKB格式,数据可压縮等,不再展开。
② 假设列geom的行内阈值取K-50字节(实际一般大于此值),由于g不属于空间点类 型,且序列化后长度大于阈值K,因此采用行外存储策略。
(D更新定位指针PP中Pt=85,表示序列化后数据总长度为85字节;更新定位指针Pp中 P产2,表示采用行外存储;将指示器进行序列化后写入主表页面作为行内存储项。
(5) 采用几何对象分块聚集索引组织方法写入行外数据;结合实施例包含如下步骤
① 与主表相关联的二级表Ts已经创建,直接转入到第②步。
② 如图4所示,行外数据被储存到二级表Ts中。由于步骤(1)中已定义Ts的子块长度 为60字节,而g的序列化格式Gs其长度Pt大于60,因此Gs需要分为多个子块进行存储, 即将Gs分解为长度分别为60和25的两块Gsl和Gs2,分别构建数据子块储存记录R,-(Pi, Nh Hg, L!, f!, Gs"和R2-{Pi, N2, Hg, L2, ft, Gs2},其中:P产21是G2的唯一标识符;N产l和N2=2 分别表示两子块数据在Gs中的序号分别为1和2; Hg=0100表示G2的空间排序码;L产60和 L2=25表示两子块数据实际长度分别60和25; f产l和f2-l表示两子块数据不作压缩;Gsl和 G。分别表示Gs的序列化值。
③ 将和R2以空间排序码值Hg为聚集键值写入到二级表Ts中。
10(6) 更新空间索引; 根据已计算获得的几何对象外包框Am值更新空间索引Ibs。 同理存入空间几何对象G,、 G3和G4。
结合以上实施例,进一步说明本发明提出的向空间数据库读取空间几何对象值的方法, 其流程如图2所示。假设执行以下SQL语句查询并读取空间几何对象"select st一overlap(geometry, ,POLYGON(1.5 0.5, 3 0.5, 3 2),) from Tg where geom mbrintersect ('RECT(O 0, 4 4),),,,并记多边形GP={(1.5,0.5) (3,0.5) (3,2)},查询矩形Gr={(0,0) (4,4)}。解析 此查询请求,这是一个典型的空间关系判断查询,要求判断在Gr空间范围内的所有几何对象 与Gp是否存在overlap关系,包含如下步骤
(a) 借助空间索引定位目标几何对象;
首先执行谓词操作符mbrintersect (外包矩形相交),即借助已建立的空间R树索引Ibs, 过滤出外包矩形与Gr相交的所有几何对象,从图6可见,本实施例中的4个几何对象将全部 命中,并作为下一步overlap关系判断的候选。
(b) 根据当前空间操作类型和几何对象序列化值的存储类型,确定空间几何对象值的读 取类型
对于G,,由于是空间点类型,其数据全部存储在行内,只需要对行内数据进行访问获取 几何对象作空间关系判断即可,属行内访问类型。
对于具有行外存储的,G2、 G3和G4,由于overlap分析操作可以先基于行内的外包矩形进 行概算,如必要,再作精确比较,故属于延迟行外访问类型。
(c) 读取几何列指定空间几何对象实例的行内值;
对于G!,直接读取行内值,并与Gp作overlap的空间关系判断,得出FALSE返回。 对于G2,首先通过读取行内特征值,获得G2的最小外包矩形G2m={(0,0.9) (1.3,2)},快
速判断即可得知'G2m和Gp不存在overlap的空间关系,得出FALSE返回',不再需要访问行外值。
对于G3,首先通过读取行内特征值,获得G3的最小外包矩形G3nH(1.5,l)(2.3,3",快 速判断即可得知G加和Gp存在overlap的空间关系,因此需要进一步获取行外值作精确判断。 对于G4,过程同G3,需要进一步获取行外值作精确判断。
(d) 如必要,再读取几何列指定空间几何对象实例的行外值;
如图6所示,由于G3和G4为空间邻近对象,故典型情况下,其行外值的各数据子块处 于聚集存储状态,本例中即聚集于同一页面。这样,根据定位指针中的对象唯一标识Pi,借
助二级表上所建立的唯一索引可以快速定位到子块所在的行外页面,且本实施例中,将只发
11生一次二级表页面的读取即可把G3和G4的行外值读取到内存,并进一步通过子块序号N和 每块的实际长度L读取出每一个分块值Gs作有序合并,形成完整的序列化值。最后,通过 overlap的精确比较,结果均返回TRUE。
分析以上实例可见,在常规LOB机制下,以上查询操作需要访问行外数据4次,即每次 读取操作都需要对应读取完整的行外数据,才能判断几何对象的overlap关系,同时,虽然所 读取的4个几何对象空间邻近,但由于行外数据未采用分块聚集存储机制,故序列化值往往 分布于不同页面、并处于无序状态(如图6虚线箭头所示),从而导致行外页面I/0次数增加; 而本实例中,通过区分行内访问和延迟行外访问,首先通过读取行内特征值避免了两次不必 要的行外数据访问过程,同时,进一步通过行外值的分块聚集存储,将两次行外访问对应到 1次页面I/0 (如图6实线箭头所示),从而进一步提高了数据的读取效率。基于1GB 20GB 的数据量所进行的空间关系查询分级测试表明,本方法较传统LOB访问机制效率平均提高约 25%~30%。
权利要求
1、一种向数据库存入空间几何对象值的方法,其特征在于该方法包含如下步骤(1)创建包含几何列的数据库空间表;(2)接收消息方式的空间几何对象实例,提取空间几何特征值并初始化几何列的行内指示器;(3)计算并为每一个空间几何对象赋空间排序码;(4)写入几何列的行内指示器及其他行内数据;(5)采用几何对象的分块聚集索引方法写入几何列的行外数据;(6)创建或更新空间索引。
2、 如权利要求1所述的一种向数据库存入空间几何对象值的方法,其特征在于所述步 骤(2)中提取的空间几何特征值,可以包含但不仅限于空间几何对象的最小外包矩形、面积、 周长,并联合定位指针P,构成几何列的行内物化存储项。
3、 如权利要求l所述的一种向数据库存入空间几何对象值的方法,其特征在于所述步 骤(3)计算并为每一个空间几何对象赋空间排序码的方法,包含如下步骤-(3.1) 获取当前空间表的空间区域范围和四分深度,选取一种空间填充曲线算法对本表 所属空间区域范围进行格网编码,使每一网格具有唯一码值;(3.2) 根据空间几何对象的空间分布特征,将基于空间填充曲线计算获得的网格编码进 一步转换为对象编码,从而使每一个待存入的几何对象实例对应一个空间排序码值,用于后 续建立几何对象的分块聚集索引。
4、 如权利要求3所述的计算并为每一个空间几何对象赋空间排序码的方法,其特征在于 所述步骤(3.2)中将网格编码进一步转换为对象编码的方法是对于点状对象,若其落入某 一个网格内,则其空间排序码为此网格编码;若其落在格网的边线上,则任取一个以该边线 为边的网格编码;对于线状和面状对象,通过对象的最小外包矩形特征值快速概算其与格网 的相交关系,若最小外包矩形完全落入某一网格内,则对象的空间排序码为此网格编码,若 其占据了n个网格,其中11>1,则取所占网格数最多、最临近辨底层的网格编码,并在其后 补0,形成与叶子节点位数相同编码后,将其作为此对象的空间排序码。
5、 如权利要求l所述的一种向数据库存入空间几何对象值的方法,其特征在于所述步 骤(4)中,根据给定几何列的行内阈值及空间几何特征来判定几何对象的序列化值采用行内 或行外存储,即如果当前序列化值小于或等于给定的行内阈值,或对应空间点类型,则进行行内存储;当序列化值大于给定的行内阈值时,则将序列化值移出空间表。
6、 如权利要求l所述的一种向数据库存入空间几何对象值的方法,其特征在于所述步 骤(5)采用几何对象的分块聚集索引方法写入几何列的行外数据,包含如下步骤(6.1) 如果当前空间表的行外值存储结构未创建,则创建用于组织和存储行外值的、与 空间主表关联的二级表;如己创建,则直接进入以下第(6.2)步;(6.2) 将当前空间几何对象实例的序列化值分解为m个小于数据库页面大小的数据子 块,其中m》1,每一子块标识有权利要求1歩骤(3)中所给出的空间排序码属性;(6.3) 循环写入每一个子块记录到二级表,并基于子块的空间排序码属性作为二级表的 聚集键进行组织和存储,从而形成分块聚集索引组织表,实现对象内部和对象之间分块结构 的空间邻近到物理聚集的映射。
7、 如权利要求l所述的一种向数据库存入空间几何对象值的方法,其特征在于所述步骤(6)根据几何对象行内特征值之一的最小外包矩形值,创建或更新空间索引,无需额外访问行外值。
8、 一种向数据库读取空间几何对象值的方法,其特征在于该方法包含如下步骤(a) 根据空间操作类型和几何对象序列化值的存储类型,确定几何对象值的读取类型;(b) 读取几何列指定空间几何对象实例的行内值;(c) 如必要,再读取该几何对象实例的行外值。
9、 如权利要求8所述的一种向数据库读取空间几何对象值的方法,其特征在于所述步 骤(a)根据空间操作类型和几何对象序列化值的存储类型判定空间几何对象实例的读取类型 有仅行内访问对于只需要获取几何特征值的空间操作,或所需几何对象值为行内存储时, 读取几何列指定空间几何对象实例的行内值,不再访问行外值;延迟行外访问对于需要行内几何特征值作概算的空间操作,可采用延迟行外访问,即 先读取几何列行内几何特征值作概算,判断其是否满足逻辑计算需求如满足,则规避访问 行外值来提高读取效率;如不满足,则再根据行内定位指针P访问行外值并实例化整个对象。行内并行外访问对于需要直接获取整体几何对象的操作,且^t象本身长度超过行内阈 值的,先读取几何列的行内值,再根据定位指针P进一步访问行外值。
10、 如权利要求8所述的一种向数据库读取空间几何对象值的方法,其特征在于所述 步骤(C)读取几何列指定空间几何对象实例行外值的方法是根据当前几何列行内指示器的 定位指针P找到行外二级表中匹配的所有聚集子块,读取这些子块,并对子块进行有序合并, 从而还原出对象的整体序列化值返回。
全文摘要
一种向数据库存入空间几何对象值的方法,包含创建包含几何列的数据库空间表;接收消息方式的空间几何对象实例,提取空间几何特征值并初始化几何列的行内指示器;计算并为每一个空间几何对象赋空间排序码;写入几何列的行内指示器及其他行内数据;采用几何对象的分块聚集索引方法写入几何列的行外数据;创建或更新空间索引;相应的读取方法为根据当前空间操作类型和几何对象的存储类型,确定几何对象值的读取类型;读取几何列指定空间几何对象实例的行内值;如必要,再读取行外值。本发明方法提高了几何对象数据读取的响应效率,进一步实现了几何列行外值I/O访问的最小化。
文档编号G06F17/30GK101520801SQ200910076928
公开日2009年9月2日 申请日期2009年1月14日 优先权日2009年1月14日
发明者冯登国, 卢战伟, 周成虎, 敏 张, 张明波, 震 徐, 宁 景, 林永恒, 伟 熊, 程昌秀, 炯 谢, 赵彦庆, 振 陈, 驰 陈, 陈宏盛, 陈应东, 陈荣国, 勋 颜 申请人:中国科学院地理科学与资源研究所;中国科学院软件研究所;中国人民解放军国防科学技术大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1