CN101763416A - 一种数据库空间栅格对象存取方法 - Google Patents

一种数据库空间栅格对象存取方法 Download PDF

Info

Publication number
CN101763416A
CN101763416A CN200910244117A CN200910244117A CN101763416A CN 101763416 A CN101763416 A CN 101763416A CN 200910244117 A CN200910244117 A CN 200910244117A CN 200910244117 A CN200910244117 A CN 200910244117A CN 101763416 A CN101763416 A CN 101763416A
Authority
CN
China
Prior art keywords
piecemeal
grid
database
row
file
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN200910244117A
Other languages
English (en)
Other versions
CN101763416B (zh
Inventor
谢炯
陈振
陈荣国
周成虎
熊伟
李飞
程昌秀
张明波
林永恒
景宁
朱自军
费春霞
王超
冯登国
张敏
陈驰
徐震
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Institute of Software of CAS
National University of Defense Technology
Institute of Geographic Sciences and Natural Resources of CAS
Original Assignee
Institute of Software of CAS
National University of Defense Technology
Institute of Geographic Sciences and Natural Resources of CAS
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Institute of Software of CAS, National University of Defense Technology, Institute of Geographic Sciences and Natural Resources of CAS filed Critical Institute of Software of CAS
Priority to CN2009102441173A priority Critical patent/CN101763416B/zh
Publication of CN101763416A publication Critical patent/CN101763416A/zh
Application granted granted Critical
Publication of CN101763416B publication Critical patent/CN101763416B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

一种向数据库存入空间栅格对象的方法,包含:创建具有栅格列的用户主表和支持行内与行外两种存储模式的栅格分块附属结构;创建新的空间栅格对象,指定存储模式,并插入到用户主表的栅格列中;导入像元数据,由分块写入驱动程序根据存储模式分发执行行内分块写入或行外分块写入;创建栅格金字塔;相应的读取方法为:访问用户主表的栅格列,读取出空间栅格对象,包括存储模式;由分块读取驱动程序根据存储模式分发执行行内分块读取或行外分块读取。本发明方法通过设计数据库环境下具有对等结构的分块记录表和分块文件树,实现了像元数据基于行内和行外的对等存取框架,解决了空间栅格数据采用数据库方式存储访问效率不佳的难题。

Description

一种数据库空间栅格对象存取方法
技术领域
本发明属数据库与地理信息系统交叉的信息领域,特别涉及一种在数据库管理系统内核中实现的空间栅格对象存取方法。
背景技术
近年来,采用数据库方式存储和管理空间数据获得了快速发展。“关系型数据库+空间数据引擎”和“扩展对象关系型数据库”是当前工业界所采用的两种主流技术。前者是经典GIS领域所采用的技术体系,其核心是利用高效的空间数据引擎(中间件)来组织空间数据在关系型数据库中的存储和调用(以下简称“寄存模式”);后者是IT数据库厂商所采用的技术体系,其核心是在数据库管理系统(DBMS)内核增加空间数据类型、空间索引及空间SQL语言(以下简称“内置模式”),从而形成空间数据库管理系统(spatial DBMS,SDBMS)。
内置模式由于将空间数据的管理与通用数据库系统融为一体,空间数据按对象存取,可在数据库内核中实现空间操作和处理,并提供统一的SQL接口,已成为当前的发展方向。但由于内置模式直接与数据库内核捆绑,实现难度较大,加之起步较晚,相比已较为成熟的寄存模式,内置模式在不同空间数据的种类支持、海量空间数据的访问和操作性能等诸多方面咎待提高。
空间栅格数据作为空间数据的一个重要组成部分,目前尚未以一种原生数据类型得到数据库平台厂商的普遍支持。其中的重要原因之一是空间栅格数据采用文件还是数据库方式管理尚存在争议。文件方式的优势在于:
Figure G2009102441173D00011
栅格应用以只读访问居多,而栅格基于数据库方式的访问效率要低于文件方式;
Figure G2009102441173D00012
栅格数据与身俱来具有数据结构简单但数据量大的特点,其很多数据写入操作(如镶嵌、金字塔创建等)往往由于更新数据量大无法在单个事务中完成,因此事务模型并不能充分保证数据的ACID特性;
Figure G2009102441173D00013
某些栅格文件格式可以内置金字塔和高效压缩算法,同样可以支持大数据量的存储和访问。
但数据库方式管理也存在其优势,这主要体现在:
Figure G2009102441173D00014
可支持更大规模数据量的栅格对象进行统一管理;
Figure G2009102441173D00015
对不同空间数据的访问、操作和分析都归结于统一的SQL接口;
Figure G2009102441173D00016
有利于矢量、栅格等不同空间数据类型在数据库环境下实现一体化空间检索、分析和操作;
Figure G2009102441173D00021
数据的更高安全性。
以上,栅格数据基于数据库方式存储存在访问效率上的不足仍是问题的焦点。常规SDBMS系统一般采用将空间栅格对象的像元值矩阵划分为多个栅格分块(block),每个栅格分块存储为分块数据表中的一行,并采用普通字段记录栅格分块的序号和金字塔级别,并采用二进制大对象类型(BOLB)存储栅格分块像元值的方法来存储和管理空间栅格对象。我们称这种将栅格分块存储于表,并按行组织和访问的方式为栅格数据的行内(inline)存取模式。与之对应,将栅格分块存储于行外文件系统,并通过在行内存储文件系统的定位标识的方式称为行外(outline)存取模式。由于基于行内模式的栅格分块存取涉及分块数据表查询计划的执行、数据库页面调度和并发事务管理等,其访问效率降低成为必然。
如何针对栅格数据的自身特点,扩展SDBMS所常规采用的行内分块存取模式,实现数据库环境下基于表和基于文件的一体化管理,融合文件方式只读访问的高效性和数据库方式集成一体化管理、高安全等优点,是本发明提出的初衷。
发明内容
本发明要解决的技术问题是:针对空间栅格数据采用数据库方式存储访问效率不佳的事实,提出了一种支持行内和行外两种存储模式的数据库空间栅格对象存取方法,通过在数据库环境下引入一种内置的栅格文件系统,实现栅格数据只读访问效率的优化,并通过构建行内基于表和行外基于文件的对等存取框架,实现上层SQL函数的透明化访问。
本发明解决其技术问题所采用的技术方案:
一种向数据库存入空间栅格对象的方法,包含如下步骤:
(1)创建栅格空间表方案,包含具有栅格列的用户主表和支持行内与行外两种存储模式的栅格分块附属结构,其中行内模式采用数据库表的方式存储栅格分块,行外模式则采用数据库文件系统的方式存储栅格分块,且两者具有对等结构,即均可存储来自用户主表中的0~n个空间栅格对象的不同栅格分块;
以上所创建的栅格空间表方案中,用户主表的栅格列以数据库原生的栅格类型字段进行定义,其每一行记录一个空间栅格对象,保存空间栅格对象的元数据信息,而栅格分块附属结构保存空间栅格对象的像元信息,两者通过定位标识关联。
以数据库表的方式存储栅格分块,可采用分块记录表方案:分块记录表包含指定的表名,表中的每一行记录一个栅格分块,其中所属栅格对象的ID、栅格分块序号、栅格分块的金字塔级别联合作为行记录的索引项存储,栅格分块所含像元的序列化值采用数据库的二进制大对象类型存储。
以数据库文件系统方式存储栅格分块,可采用数据库内置的分块文件树结构:分块文件树包含指定的根目录,该根目录的路径名等效于分块记录表的表名;分块文件树的根目录下可包含0~n棵分块文件子树,对应存储来自0~n个空间栅格对象的不同栅格分块。其中,分块文件子树可采用扩展的四叉树金字塔模型进行构建:分块文件子树的根目录采用空间栅格对象的ID进行命名,向下按四叉树方式进行递归划分,每个子目录包含该级金字塔当前区域上的系列分块文件,以及下一级金字塔的4个子目录,其中分块文件在分块文件子树中的目录深度可换算栅格分块的金字塔级别,分块文件名记录栅格分块的序号,分块文件的内容记录栅格分块所含像元的序列化值。
(2)创建新的空间栅格对象,以创建选项指定该空间栅格对象采用行内或行外存储模式,以创建参数指定栅格分块附属结构的定位标识——即存储栅格分块的数据库表名或数据库文件系统的路径名,并将以上创建选项和创建参数作为该空间栅格对象元数据的一部分保存至用户主表的栅格列中;
(3)输入像元值到新插入的空间栅格对象中,由栅格分块写入驱动程序根据该对象已指定的存储模式,分发执行像元值的行内分块写入或行外分块写入,保存至对应的栅格分块附属结构中;
其中,行内分块写入包含如下步骤:
①根据分块附属结构的定位标识,打开分块记录表;
②对当前栅格分块所含像元值执行序列化操作,得到像元的序列化值;
③构建当前栅格分块的行记录,其中空间栅格对象的ID、栅格分块序号、栅格分块的金字塔级别联合作为当前行记录的索引项存储,栅格分块所含像元的序列化值作为二进制大对象类型存储;
④插入当前栅格分块的行记录到分块记录表。
与行内模式对等,行外分块写入包含如下步骤:
①根据分块附属结构的定位标识,定位到分块文件树的根目录;
②对当前栅格分块所含像元值执行序列化操作,得到像元的序列化值;
③构建当前栅格分块的分块文件,其中分块文件的内容为栅格分块所含像元的序列化值,分块文件的路径根据栅格分块的属性推算;
④写入当前栅格分块的分块文件到分块文件树。
以上分块文件路径的推算可采用进制转换与按位分解的方法:记当前栅格分块所属空间栅格对象的最高金字塔级别为MaxPydLevel,所属空间栅格对象的ID为RID,当前栅格分块所处金字塔级别为PydLevel,波段、行、列维序号分别为bbnd、brow、bcol,则根据以上属性,当前分块文件的路径推算包含如下步骤:
①计算该分块文件在分块文件子树中的四叉树深度:
QuardDepth=MaxPydLevel-PydLevel+1,其中QuardDepth≥1,PydLevel≥0;
②将十进制的brow和bcol转换为具有QuardDepth位的二进制值browII和bcolII
③计算四进制的Morton码:MortonIV=2*browII+bcolII
④将MortonIV按位分解为分块文件子树路径,例如,MortonIV为032,则为0\3\2;;
⑤以bbnd_brow_bcol方式构建分块文件名;
⑥构造最终路径:分块文件树根目录\RID\分块文件子树路径\分块文件名。
(4)以输入的像元值为塔底数据,创建栅格金字塔。
以金字塔底数据为基础,按指定的抽样算法,以一定的倍率生成各级金字塔,并采用同样的存储模式写入分块记录表或分块文件树,写入原理同上。
与以上写入方法相对应,一种从数据库读取空间栅格对象的方法,包含如下步骤:
(a)接受SQL函数的访问请求,执行仅用户主表读取或“用户主表+分块附属结构”的联合读取;
仅用户主表读取。对于获取空间栅格对象元数据的SQL函数,由于不涉及像元数据的访问,只要读取用户主表中的栅格类型字段即可。
“用户主表+分块附属结构”的联合读取。对于获取空间栅格对象像元数据的SQL函数,首先访问用户主表获取空间栅格对象的元数据,进一步根据存储模式,对等访问行外或行内的栅格分块。
(b)对于“用户主表+分块附属结构”的联合读取,首先访问用户主表的栅格列,读取出当前栅格对象的元数据,包括存储模式及栅格分块附属结构的定位标识;
(c)进一步根据已确定的存储模式,由分块读取驱动程序分发执行行内分块读取或行外分块读取,得到栅格分块所含的像元值。
将当前SQL函数对像元信息的访问请求,通过像元至分块的映射关系,分解为对栅格分块的读取操作,即向分块读取驱动程序发出请求,并由分块读取驱动程序根据当前空间栅格对象的存储模式,分发执行行内分块读取或行外分块读取。其中,行内分块读取包含如下步骤:
①根据分块附属结构的定位标识,打开分块记录表;
②根据当前栅格分块的索引项查询到栅格分块的行记录;
③读取当前栅格分块的行记录,从二进制大对象类型中获取出当前栅格分块所含像元的序列化值,并执行反序列化操作还原出像元值。
与行内模式对等,行外分块读取包含如下步骤:
①根据分块附属结构的定位标识,定位分块文件树的根目录;
②根据当前栅格分块的属性,采用前述的进制转换与按位分解的方法,快速推算出对应分块文件的路径;
③读取当前栅格分块的分块文件,从文件内容中获取出当前栅格分块所含像元的序列化值,并执行反序列化操作还原出像元值。
本发明与现有技术相比所具有的优点是:本发明针对空间栅格数据结构简单、数据量大、以只读访问应用为主的特点,对常规空间数据库管理系统单纯基于数据库表的方式存取栅格分块进行了扩展,引入了高效的行外分块存储结构——分块文件树,从而形成栅格像元数据基于行内与行外的两种并行存取框架。其中,分块文件树可采用数据库内置的扩展四叉树金字塔模型进行构建,分块文件通过进制转换和按位分解的逻辑运算快速定位,实验表明可提高数据存取效率达2倍以上,其次,所提出的行内分块记录表和行外分块文件树设计具有对等结构,可存储0~n个空间栅格对象的不同栅格分块,从而保证了数据库逻辑视图对栅格分块数据的对等存取,有利于上层SQL函数对底层像元数据的透明化访问。综上,本发明方法综合了文件方式的存取高效性和数据库方式有利于矢栅一体化管理、高安全等两者优点,解决了空间栅格数据采用数据库方式存储访问效率不佳的难题。
附图说明
图1为本发明的数据库存入空间栅格对象的流程图;
图2为本发明的数据库读取空间栅格对象的流程图;
图3为本发明中的栅格空间表组织方案(schema)示意图;
图4为本发明中的分块文件树组织结构示意图;
图5为本发明中的空间栅格对象Subset查询示意图。
具体实施方式
结合本发明方法,给出以下实施例:向用户主表Tu的栅格列存入三行记录,对应保存空间栅格对象R1、R2和R3,数据源来自三张GeoTiff影像GTiff1、GTiff2、GTiff3,并以典型的数据子集截取操作Subset进行读取,以说明整个数据存取流程。
本发明提出的向数据库存入空间栅格对象的方法,其流程如图1所示,包含如下步骤:
(1)创建栅格空间表方案Schemar
创建包含栅格列的用户主表Tu及其分块附属结构,形成栅格空间表方案:Schemar={Tu,Tbr,Tbf},如图3所示。其中:
①Tu={C1,C2,...,Cn,RASTER}(n≥0),为包含栅格列的用户主表表结构,由用户创建,其中Ci表示非栅格列,RASTER表示栅格列。假设本实施例Tu表的创建语句为:CREATETABLE Tu(oid INT,srcfile VARCHAR(30),rast RASTER)。其中,oid字段保存空间栅格对象的序号,srcfile记录栅格源文件名,而rast字段的每一行,存储一个空间栅格对象。
②Tbr={Ci,Cp,Cbb,Cbr,Cbc,Cv},为存储Tu表rast列行内分块信息的分块记录表方案,其每一元组存储对应空间栅格对象的一个栅格分块。其中:Ci为栅格分块所属空间栅格对象的唯一标识,记RID;Cp为栅格分块的金字塔级别;Cbb、Cbr、Cbc为栅格分块所在波段维、行维和列维的序号;Cv为栅格分块所含像元的序列化值,可取BLOB类型,并联合Ci、Cp、Cbb、Cbr、Cbc建立基于B树的分块索引Ib。Tbr可以在Tu创建时同时创建,假设记该表名为Tbr-name。
③Tbf表示存储Tu表rast列行外栅格分块信息的分块文件树,其结构范例如图4所示。Root为分块文件树的根结点,对应存储分块文件树的根目录;Root结点下可包含多个分块文件子树,对应存储多个空间栅格对象的栅格分块文件,且每一分块文件子树可组织为扩展的四叉树金字塔模型,其根目录为RID结点,以唯一区分下属栅格分块的空间栅格对象归属,并向下按四叉树方式进行递归划分,使每个子目录存储该级金字塔当前区域上的分块文件,以及下一级金字塔的4个子目录。其中,分块文件在分块文件子树中的目录深度QuardDepth(≥1)与金字塔级别PydLevel(≥0)的换算关系为:
PydLevel=MaxPydLevel-QuardDepth+1
例如,图4中包含三个金字塔级别数据,最高金字塔级别为2(假设0级为原始图像),则中间层分块文件的金字塔级别为2-2+1=1。同时,假设记栅格分块在波段维、行维和列维的序号为bbnd,brow和bcol,则分块文件名可通过“bbnd_brow_bcol”方式构造,从而与分块记录表中的Cbb、Cbr和Cbc形成等效结构。Tbf可以在主表Tu创建时同时创建,但由于分块文件子树与具体空间栅格对象相关,Tbf的创建实际为Tbf的根目录创建,假设记该路径为Tbf-root。
(2)创建新的空间栅格对象R1、R2和R3,指定各自存储模式及栅格分块附属结构的定位标识,并将以上定义作为空间栅格对象元数据的一部分插入到已创建的用户主表中;
结合实施例,分别执行以下SQL语句创建并插入R1、R2和R3
INSERT INTO Tu VALUES(1,′GTiff1′,ST_Create(′Tbr-name′,′inline=true;interleave=BSQ;…′));
INSERT INTO Tu VALUES(2,′GTiff2′,ST_Create(′Tbr-name′,′inline=true;interleave=BSQ;…′));
INSERT INTO Tu VALUES(3,′GTiff3′,ST_Create(′Tbf-root′,′inline=false;interleave=BSQ;…′));
其中,ST_Create函数实例用于创建空间栅格对象,其第一个参数指定栅格分块附属结构的定位标识,第二个参数指定各创建选项,包括存储模式,具体实现步骤为:
①假设用户主表Tu的RASTER列采用二进制格式进行存储,则根据预定义的存储格式创建R1、R2和R3的二进制实例,首先生成RID值写入二进制实例;
②根据创建选项中的inline=true,将R1、R2指定为行内模式存储,其定位标识指向分块记录表Tbr-name;根据inline=false,将R3指定为行外模式存储,其定位标识指向分块文件树Tbf-root;将以上存储模式及定位标识信息写入二进制实例;
③解析其他创建选项,如像元交叉类型interleave=BSQ等,并进一步读取GeoTiff数据源,通过调用其它SQL函数设置空间栅格对象的其它元数据项,对应写入二进制实例,完成R1、R2和R3的元数据定义。
(3)分别导入GTiff1、GTiff2、GTiff3的像元值到新插入的R1、R2和R3中,由栅格分块写入驱动程序根据对象已指定的存储模式,分发执行像元值的行内分块写入或行外分块写入,保存至对应的栅格分块附属结构中;
结合实施例,分别执行以下SQL语句导入数据:
UPDATE Tu SET rast=ST_Import(rast,GTiff1)WHERE oid=1;
UPDATE Tu SET rast=ST_Import(rast,GTiff2)WHERE oid=2;
UPDATE Tu SET rast=ST_Import(rast,GTiff3)WHERE oid=3;
其中,ST_Import函数实例用于导入外部栅格数据源的像元值,其第一个参数指定栅格列名,第二个参数指定数据源路经。导入包含逻辑分块的生成和物理分块的写入两部分:
首先,读取GTiff1、GTiff2、GTiff3的像元值,根据R1、R2和R3的元数据定义,各自遍历生成统一格式的逻辑分块序列。其中,逻辑分块结构与分块的存储模式及其格式无关,如采用RastBlock结构类型,伪定义为:Struct RastBlock{int rid,int pyd_level,BlockSN bsn,booliscompr,ComprPara cmpr_para,MBR mbr,size_t bytes,char*cell_values}。其中,rid为所属空间栅格对象的ID;pyd_level为栅格分块的金字塔级别;bsn为栅格分块的序号;iscompr表示是否压缩;cmpr_para为压缩参数;mbr为栅格分块的外包矩形;bytes为像元值的总字节数;cell_values为像元值。
然后,将生成的每一个逻辑分块(即RastBlock实例),交由分块写入驱动程序负责分发写入。结合实施例,R1和R2的行内分块写入包含如下步骤:
①根据R1和R2分块附属结构的定位标识,打开分块记录表Tbr-name;
②对R1和R2的每一个逻辑分块执行像元值的序列化操作,即根据RastBlock的iscompr以及cmpr_para,对块的像元值进行压缩处理,并根据像元深度是否小于单字节,进行字节打包处理,最终形成分块所含像元的序列化值。例如,采用BlockSerl结构类型,伪定义为:Struct BlockSerl{size_t size,unsigned char*rlob},其中,size为rlob序列化字节流总长;rlob为字节流首地址,而字节流的具体格式和实现相关,并需要符合指定字节序;
③构建当前栅格分块的行记录,将RastBlock的rid对应Ci、pyd_level对应Cp、bsn对应Cbb、Cbr、Cbc,并将rlob绑定到Cv
④插入当前栅格分块的行记录到分块记录表。
与行内模式对等,R3的行外分块写入包含如下步骤:
①根据R3分块附属结构的定位标识,搜索到分块文件树的根目录Tbf-root;
②对R3执行同样的像元值的序列化操作,得到BlockSerl的实例;
③如图3所示,已知R3的RID=3,假设R3的最高金字塔级别MaxPydLevel=2,已知当前待写入栅格分块的PydLevel=0(原始层级)、bbnd=0、brow=3、bcol=2,则当前分块文件的路径推算步骤为:
Figure G2009102441173D00081
计算该分块在分块文件子树中的四叉树深度:QuardDepth=MaxPydLevel-PydLevel+1=2-0+1=3;
将十进制的brow和bcol转换为位数为3的二进制值browII和bcolII,即011和010;
Figure G2009102441173D00083
计算四进制的Morton码:MortonIV=2*browII+bcolII,即022+010=032;
Figure G2009102441173D00084
将MortonIV按位分解为分块文件子树路径,即0\3\2;
Figure G2009102441173D00085
根据bbnd_brow_bcol构建块文件名为0_3_2;
Figure G2009102441173D00086
最终路径为Tbf-root\RID\分块文件子树路径\分块文件名,即:Tbf-root\3\0\3\2\0_3_2。
而分块文件的内容为像元的序列化值,即BlockSerl的rlob。
④写入当前栅格分块的分块文件到分块文件树。
(4)以导入的像元值为塔底数据,创建栅格金字塔。
以金字塔底数据为基础,按指定的抽样算法,以一定的倍率生成各级金字塔,并采用同样的存储模式写入分块记录表或分块文件树,写入原理同上。
结合以上实施例,进一步说明本发明提出的向空间数据库读取空间栅格对象的方法,其流程如图2所示。假设执行以下SQL语句查询Tu表:SELECT Width(rast),Height(rast),Subset(rast,Win(50 120,120 170),pyd(1))FROM Tu WHERE oid<4,以获取R1、R2和R3的高度、宽度,并读取第1级金字塔数据与窗口Win(50 120,120 170)相交的像元子集,包含如下步骤:
(a)根据SQL函数Width、Height和Subset的访问请求,区分两类读取操作:仅用户主表读取和“用户主表+分块附属结构”的联合读取;
以上查询实例涉及两类SQL函数,其中Width、Height为获取空间栅格对象元数据的SQL函数,由于不涉及像元值的访问,故只需读取用户主表Tu中的栅格列即可;Subset由于需要获取像元值,故同时需要访问用户主表Tu以及分块附属结构。
(b)读取用户主表Tu的空间栅格列;
由于查询SQL函数是对主表Tu进行访问,故SQL执行器首先定位符合WHERE字句请求的每一个空间栅格对象,即本例中的R1、R2和R3,然后读取空间栅格列的物理存储字节序列,并根据不同函数请求,读取不同的元数据信息:
对于Width函数:解析二进制实例,读取出空间栅格对象的宽度值,并返回结果;
对于Height函数:解析二进制实例,读取出空间栅格对象的高度值,并返回结果;
对于Subset函数:解析二进制实例,读取出Subset运算所需的元数据信息,包括存储模式及其定位标识,进入下一步。
(c)进一步根据已确定的存储模式,由分块读取驱动程序分发执行行内分块读取或行外分块读取,并返回查询结果。
参考图5所示,假设Subset的查询窗口与R1和R3相交,并通过坐标运算,相交部分像元值正好落于R1的B2分块和R3的B3分块,则分块读取驱动程序将根据R1和R3的存储模式,分发执行行内分块读取和行外分块读取。其中,针对R1的读取步骤为:
①根据分块附属结构的定位标识,打开分块记录表Tbr-name;
②假设B2分块的rid=1、pyd_level=1、bbnd=0、brow=1、bcol=1,则由此构建行记录的索引项(Ci,Cp,Cbb,Cbr,Cbc)=(1,1,0,1,1),并通过检索表Tbr上的B树索引Ib,查询到B2对应的行记录;
③读取当前栅格分块的行记录,获取出其中的BLOB字段值,实例化生成BlockSerl结构,并执行像元值的反序列化操作,生成B2对应的逻辑分块结构RastBlock,并返回与查询窗口相交的像元值。
针对R3的读取步骤为:
①根据分块附属结构的定位标识,找到分块文件树的根目录Tbf-root;
②假设B3分块的rid=3、pyd_level=1、bbnd=0、brow=1、bcol=0,则与写入时的路径推算方法同,可快速求得该分块文件的路径为Tbf-root\3\0\2\0_1_0;
③读取当前栅格分块的分块文件,并与行内模式同,执行像元值的反序列化操作,生成B3对应的逻辑分块结构RastBlock,并返回与查询窗口相交的像元值。
分析以上实施例,本发明方法首先分解空间栅格对象为元数据和像元数据两部分,其中元数据采用二进制方式存储,提高了数据存取效率,而像元数据则根据应用所需,可在对象一级指定采用行内或行外存储,其中行内模式由于涉及分块记录表的搜索和并发读写,数据一致性好但存取效率稍差,而行外模式虽适合于只读访问与独占更新,但由于采用了数据库内置的扩展四叉树金字塔模型,分块文件通过进制转换和按位分解的逻辑运算快速定位,实验表明可提高数据存取效率达2倍以上。其次,通过设计数据库环境下具有对等结构的分块记录表和分块文件树,实现了像元数据基于行内和行外的对等存取框架,从而保证了数据处理流程的逻辑一致性,其中分块存取驱动程序的引入,也进一步使上层SQL函数对存储模式保持了透明。
本发明未详细阐述部分属于本领域公知常识。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (10)

1.一种向数据库存入空间栅格对象的方法,其特征在于:该方法包含如下步骤:
(1)创建栅格空间表方案,所述栅格空间表方案包含具有栅格列的用户主表和支持行内与行外两种存储模式的栅格分块附属结构,其中行内模式采用数据库表的方式存储栅格分块,行外模式则采用数据库文件系统的方式存储栅格分块,且两者具有对等结构,即均可存储来自用户主表中的0~n个空间栅格对象的不同栅格分块,n为正整数;
(2)创建新的空间栅格对象,以创建选项指定该空间栅格对象采用行内或行外存储模式,以创建参数指定栅格分块附属结构的定位标识——即存储栅格分块的数据库表名或数据库文件系统的路径名,并将以上创建选项和创建参数作为该空间栅格对象元数据的一部分保存至用户主表的栅格列中;
(3)输入像元值到新插入的空间栅格对象中,由栅格分块写入驱动程序根据该对象已指定的存储模式,分发执行像元值的行内分块写入或行外分块写入,保存至对应的栅格分块附属结构中;
(4)以输入的像元值为塔底数据,创建栅格金字塔。
2.如权利要求1所述的一种向数据库存入空间栅格对象的方法,其特征在于:所述步骤(1)中以数据库表的方式存储栅格分块,可采用分块记录表方案,分块记录表包含指定的表名,表中的每一行记录一个栅格分块,其中所属栅格对象的ID、栅格分块序号、栅格分块的金字塔级别联合作为行记录的索引项存储,栅格分块所含像元的序列化值采用数据库的二进制大对象类型存储。
3.如权利要求1所述的一种向数据库存入空间栅格对象的方法,其特征在于:所述步骤(1)中以数据库文件系统方式存储栅格分块,可采用数据库内置的分块文件树结构,分块文件树包含指定的根目录,该根目录的路径名等效于分块记录表的表名;分块文件树的根目录下可包含0~n棵分块文件子树,对应存储来自0~n个空间栅格对象的不同栅格分块。
4.如权利要求3所述的一种向数据库存入空间栅格对象的方法,其特征在于:所述数据库内置的分块文件树结构中,所述的分块文件子树可采用扩展的四叉树金字塔模型进行构建:分块文件子树的根目录采用空间栅格对象的ID进行命名,向下按四叉树方式进行递归划分,每个子目录包含该级金字塔当前区域上的系列分块文件,以及下一级金字塔的4个子目录,其中分块文件在分块文件子树中的目录深度可换算栅格分块的金字塔级别,分块文件名记录栅格分块的序号,分块文件的内容记录栅格分块所含像元的序列化值。
5.如权利要求1所述的一种向数据库存入空间栅格对象的方法,其特征在于:所述步骤(3)中的行内分块写入实现如下:
(5.1)根据分块附属结构的定位标识,打开分块记录表;
(5.2)对当前栅格分块所含像元值执行序列化操作,得到像元的序列化值;
(5.3)构建当前栅格分块的行记录,其中空间栅格对象的ID、栅格分块序号、栅格分块的金字塔级别联合作为当前行记录的索引项存储,栅格分块所含像元的序列化值作为二进制大对象类型存储;
(5.4)插入当前栅格分块的行记录到分块记录表。
6.如权利要求1所述的一种向数据库存入空间栅格对象的方法,其特征在于:所述步骤(3)中的行外分块写入包含如下步骤:
(6.1)根据分块附属结构的定位标识,定位到分块文件树的根目录;
(6.2)对当前栅格分块所含像元值执行序列化操作,得到像元的序列化值;
(6.3)构建当前栅格分块的分块文件,其中分块文件的内容为栅格分块所含像元的序列化值,分块文件的路径根据栅格分块的属性推算;
(6.4)写入当前栅格分块的分块文件到分块文件树。
7.如权利要求6所述一种向数据库存入空间栅格对象的方法,其特征在于:所述步骤(6.3)中分块文件的路径根据栅格分块的属性推算,可采用进制转换与按位分解的方法,即记当前栅格分块所属空间栅格对象的最高金字塔级别为MaxPydLevel,所属空间栅格对象的ID为RID,当前栅格分块所处金字塔级别为PydLevel,波段、行、列维序号分别为bbnd、brow、bcol,则根据以上属性,当前分块文件的路径推算包含如下步骤:
(7.1)计算该分块文件在分块文件子树中的四叉树深度:
QuardDepth=MaxPydLevel-PydLevel+1,其中QuardDepth≥1,PydLevel≥0;
(7.2)将十进制的brow和bcol转换为具有QuardDepth位的二进制值browII和bcolII
(7.3)计算四进制的Morton码:MortonIV=2*browII+bcolII
(7.4)将MortonIV按位分解为分块文件子树路径;
(7.5)以bbnd_brow_bcol方式构建分块文件名;
(7.6)构造最终路径:分块文件树根目录\RID\分块文件子树路径\分块文件名。
8.一种从数据库读取空间栅格对象的方法,其特征在于步骤如下:
(a)接受SQL函数的访问请求,执行仅用户主表读取或“用户主表+分块附属结构”的联合读取;
(b)对于“用户主表+分块附属结构”的联合读取,首先访问用户主表的栅格列,读取出当前栅格对象的元数据,包括存储模式及栅格分块附属结构的定位标识;
(c)进一步根据已确定的存储模式,由分块读取驱动程序分发执行行内分块读取或行外分块读取,得到栅格分块所含的像元值。
9.如权利要求8所述的一种向数据库读取空间栅格对象的方法,其特征在于:所述步骤(c)中的行内分块读取步骤如下:
(9.1)根据分块附属结构的定位标识,打开分块记录表;
(9.2)根据当前栅格分块的索引项查询到栅格分块的行记录;
(9.3)读取当前栅格分块的行记录,从二进制大对象类型中获取出当前栅格分块所含像元的序列化值,并执行反序列化操作还原出像元值。
10.如权利要求8所述的一种向数据库读取空间栅格对象的方法,其特征在于:所述步骤(c)中的行外分块读取步骤如下:
(10.1)根据分块附属结构的定位标识,定位分块文件树的根目录;
(10.2)根据当前栅格分块的属性,采用所述的进制转换与按位分解的方法,快速推算出对应分块文件的路径;
(10.3)读取当前栅格分块的分块文件,从文件内容中获取出当前栅格分块所含像元的序列化值,并执行反序列化操作还原出像元值。
CN2009102441173A 2009-12-29 2009-12-29 一种数据库空间栅格对象存取方法 Expired - Fee Related CN101763416B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN2009102441173A CN101763416B (zh) 2009-12-29 2009-12-29 一种数据库空间栅格对象存取方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN2009102441173A CN101763416B (zh) 2009-12-29 2009-12-29 一种数据库空间栅格对象存取方法

Publications (2)

Publication Number Publication Date
CN101763416A true CN101763416A (zh) 2010-06-30
CN101763416B CN101763416B (zh) 2011-07-20

Family

ID=42494580

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009102441173A Expired - Fee Related CN101763416B (zh) 2009-12-29 2009-12-29 一种数据库空间栅格对象存取方法

Country Status (1)

Country Link
CN (1) CN101763416B (zh)

Cited By (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102368272A (zh) * 2011-11-15 2012-03-07 中国科学院地理科学与资源研究所 一种数据库系统实现栅格数据类型的方法及其系统
CN102831605A (zh) * 2012-07-31 2012-12-19 武汉大学 用于大型影像的多尺度图像分割结果快速可视化方法
CN102902724A (zh) * 2012-09-05 2013-01-30 重庆市勘测院 海量栅格瓦块地图发布方法
CN103544315A (zh) * 2013-11-05 2014-01-29 北京建筑大学 一种摄影测量立体影像库的构建方法
CN103870602A (zh) * 2014-04-03 2014-06-18 中国科学院地理科学与资源研究所 数据库空间分片复制方法及系统
CN103902623A (zh) * 2012-12-26 2014-07-02 财团法人工业技术研究院 用于在存储系统上存取文件的方法和系统
CN104217023A (zh) * 2014-09-25 2014-12-17 山东康威通信技术股份有限公司 一种利用打包技术解决地图瓦片存储的方法
CN106954068A (zh) * 2017-03-09 2017-07-14 广东南方数码科技股份有限公司 一种影像数据存储、读取方法及系统
CN109947705A (zh) * 2017-11-28 2019-06-28 中国石油化工股份有限公司 一种石油工程数据的存取系统与方法
CN112015929A (zh) * 2019-05-30 2020-12-01 阿里巴巴集团控股有限公司 栅格数据访问方法、装置、电子设备及计算机存储介质
CN113377721A (zh) * 2021-07-02 2021-09-10 电信科学技术第五研究所有限公司 一种数据库中存储文件的文件表设计方法
CN117931810A (zh) * 2024-03-21 2024-04-26 成都歧明通信息科技有限公司 一种空间影像数据的结构化管理方法及系统

Cited By (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102368272A (zh) * 2011-11-15 2012-03-07 中国科学院地理科学与资源研究所 一种数据库系统实现栅格数据类型的方法及其系统
CN102368272B (zh) * 2011-11-15 2013-07-24 中国科学院地理科学与资源研究所 一种数据库系统实现栅格数据类型的方法及其系统
CN102831605B (zh) * 2012-07-31 2014-10-22 武汉大学 用于大型影像的多尺度图像分割结果快速可视化方法
CN102831605A (zh) * 2012-07-31 2012-12-19 武汉大学 用于大型影像的多尺度图像分割结果快速可视化方法
CN102902724B (zh) * 2012-09-05 2015-04-29 重庆市勘测院 海量栅格瓦块地图发布方法
CN102902724A (zh) * 2012-09-05 2013-01-30 重庆市勘测院 海量栅格瓦块地图发布方法
CN103902623A (zh) * 2012-12-26 2014-07-02 财团法人工业技术研究院 用于在存储系统上存取文件的方法和系统
US9043334B2 (en) 2012-12-26 2015-05-26 Industrial Technology Research Institute Method and system for accessing files on a storage system
CN103902623B (zh) * 2012-12-26 2017-10-13 财团法人工业技术研究院 用于在存储系统上存取文件的方法和系统
CN103544315A (zh) * 2013-11-05 2014-01-29 北京建筑大学 一种摄影测量立体影像库的构建方法
CN103870602A (zh) * 2014-04-03 2014-06-18 中国科学院地理科学与资源研究所 数据库空间分片复制方法及系统
CN103870602B (zh) * 2014-04-03 2017-05-31 中国科学院地理科学与资源研究所 数据库空间分片复制方法及系统
CN104217023A (zh) * 2014-09-25 2014-12-17 山东康威通信技术股份有限公司 一种利用打包技术解决地图瓦片存储的方法
CN104217023B (zh) * 2014-09-25 2017-11-17 山东康威通信技术股份有限公司 一种利用打包技术解决地图瓦片存储的方法
CN106954068A (zh) * 2017-03-09 2017-07-14 广东南方数码科技股份有限公司 一种影像数据存储、读取方法及系统
CN109947705A (zh) * 2017-11-28 2019-06-28 中国石油化工股份有限公司 一种石油工程数据的存取系统与方法
CN109947705B (zh) * 2017-11-28 2021-03-16 中国石油化工股份有限公司 一种石油工程数据的存取系统与方法
CN112015929A (zh) * 2019-05-30 2020-12-01 阿里巴巴集团控股有限公司 栅格数据访问方法、装置、电子设备及计算机存储介质
WO2020238749A1 (zh) * 2019-05-30 2020-12-03 阿里巴巴集团控股有限公司 栅格数据访问方法、装置、电子设备及计算机存储介质
US11907283B2 (en) 2019-05-30 2024-02-20 Alibaba Group Holding Limited Multi-resolution raster data access method, apparatus, electronic device, and computer storage medium
CN112015929B (zh) * 2019-05-30 2024-07-05 阿里云计算有限公司 栅格数据访问方法、装置、电子设备及计算机存储介质
CN113377721A (zh) * 2021-07-02 2021-09-10 电信科学技术第五研究所有限公司 一种数据库中存储文件的文件表设计方法
CN117931810A (zh) * 2024-03-21 2024-04-26 成都歧明通信息科技有限公司 一种空间影像数据的结构化管理方法及系统
CN117931810B (zh) * 2024-03-21 2024-05-31 成都歧明通信息科技有限公司 一种空间影像数据的结构化管理方法及系统

Also Published As

Publication number Publication date
CN101763416B (zh) 2011-07-20

Similar Documents

Publication Publication Date Title
CN101763416B (zh) 一种数据库空间栅格对象存取方法
CN100557609C (zh) 一种持久层生成方法及装置
CN104866608B (zh) 一种数据仓库中基于连接索引的查询优化方法
Stadler et al. Making interoperability persistent: A 3D geo database based on CityGML
CN101727320B (zh) 用于识别数据库更改对应用的影响的方法和系统
CN102368272B (zh) 一种数据库系统实现栅格数据类型的方法及其系统
CN101699444B (zh) 基于形式概念分析的遥感信息处理服务分类本体构建方法
CN103559189B (zh) 基于元数据集成模型的电力仿真培训资源管理系统及方法
Piórkowski Mysql spatial and postgis–implementations of spatial data standards
CN101853305A (zh) 一种构建综合农业环境信息数据库的方法
CN107977446A (zh) 一种基于数据分区的内存网格数据加载方法
CN101520801A (zh) 一种数据库空间几何对象存取方法
CN101630259B (zh) 透明ejb支持和水平数据分割
Li et al. Method for managing and querying geo-spatial data using a grid-code-array spatial index
Tiwari et al. Pattern warehouse: context based modeling and quality issues
Daylight et al. Memory-access-aware data structure transformations for embedded software with dynamic data accesses
Zhang et al. Fusion OLAP: Fusing the Pros of MOLAP and ROLAP Together for In-memory OLAP
Nativi et al. Unidata’s common data model mapping to the ISO 19123 data model
CN109739863A (zh) 电能表数据管理方法
Roumelis et al. Bulk-loading and bulk-insertion algorithms for xBR^+-trees xBR+-trees in Solid State Drives
CN101876896B (zh) 一种提升信息化技术的电子政务开发系统
CN104361090A (zh) 数据查询方法及装置
CN113485638A (zh) 一种面向海量天文数据的存取优化系统
CN104239008A (zh) 并行数据库管理系统及设计方案
Revathi et al. Auto JSON: An Automatic Transformation Model for Converting Relational Database to Non-relational Documents

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110720

Termination date: 20181229

CF01 Termination of patent right due to non-payment of annual fee