关系数据库中海量要素存储的分区优化研究方法及系统与流程

文档序号:18464660发布日期:2019-08-17 02:20阅读:179来源:国知局
本发明涉及数据存储领域,更具体地说,涉及一种关系数据库中海量要素存储的分区优化研究方法及系统。
背景技术
::对于海量空间数据的高效存储、管理等问题的研究,已经发展了近半个世纪,国内外学者已经做了大量的研究工作,并取得了显著成果。如面向对象的关系型数据库,主要基于关系型数据库开发支持空间数据管理的扩展模块。再有就是空间数据引擎中间件技术,使得空间数据可以用关系型数据库进行存储并用于gis平台上的各种复杂查询与分析应用,能够与特定gis平台紧密结合,空间处理效率更高。后来,thomaskyte(2005)详细地阐述了关系数据库中分区的概念、策略、扩展及索引分区;目前关系数据库中的分区技术在管理关系型数据中应用较广泛,如徐畅等(2017)采用影像获取难易程度分区及统筹学的思想,设计第一次全国地理国情普查标准时点核准影像获取及覆盖方案,实现对普查标准时点核准遥感影像任务区的优化覆盖。而其在空间数据管理中应用较少,胡小彭等(2017)提出了一种基于分区存储技术的空间数据入库解决方案,并应用到安徽省地理国情普查中,验证了分区存储数据库的读取效率明显高于非分区存储数据库;张小文等(2011)以supermap地理信息系统控件为基础,设计与实现了分区技术的灵活管理,与预报员交互的预报流程和预报结果的web发布等功能。但是,当矢量图层要素量达到10万条时,数据库查询性急剧下降,管理负担增大。如何利用关系型数据库的分区技术管理大容量的空间数据尤其是要素量达到千万级别以上的矢量图层数据仍是困扰广大空间数据用户的主要问题之一。技术实现要素:为了克服上述现有技术的不足,本发明提供了一种采用不同管理方式、不同分区粒度(按省分区、按市分区、按县分区)、不同索引方式(全局空间索引、本地空间索引)及其组合的分区技术来系统地管理海量空间图层数据,最优分区方法的确定是通过采用不同分区机制来确立的。首先对存储海量要素图层数据的数据库大表进行分区拆分。其次,深入研究应用分区技术管理海量要素图层数据时的具体问题:分区键的确定、不同分区粒度的选择、空间索引的建立。然后,利用事件追踪查询时数据库内部的操作,结合前面的实验结果进一步研究不同的分区粒度及索引方式对查询效率的影响。最后,确定大表拆分方案。分区技术:数据分区技术是按照约定的方式从物理上划分库表结构,但分区表中的每个分区在逻辑上是独立的。如果选择合适的数据分区策略,会大大加快数据的查询速度。(1)分区存储管理构建:由于分区表不能通过arcgis等gis平台创建,因此需要先在数据库中建好表结构。构建过程如下:1)在gis平台创建企业级地理空间数据库(createenterprisegeodatabase),创建sde用户、sde表空间、安装sderepository(sde资料档案库,包含空间数据字典和arcsde软件程序包);2)在关系型数据库中创建数据存储所用表空间、用户并授权;3)在关系型数据库中创建分区表,并创建全局空间索引;4)在关系型数据库中创建分区表,并创建本地空间索引。5)按设置好的规则执行数据存储。(2)分区存储查询算法:将数据按照分区进行组织后,数据在逻辑上是同一张表,查询时表名没有区别,但实际数据存放在不同的分区中,可能存放于不同的服务器等存储设备上。在地图窗口进行查询浏览时是整张表同时展示在地图窗口中的,那么在执行空间查询如框选时数据库可能同时需要访问多个分区,需要考虑是否先找到与感兴趣区域相交的分区再进行查询;再到分区中执行相关查询返回需要的结果,或者直接就只使用感兴趣区域做为查询条件。分区的算法有3种,分别命名为part_query1、part_query2、part_query3,其伪代码分别为:1)part_query1:根据slfw(矢量范围底图),判断br(boundaryrectangle,范围矩形)与哪些矢量底图相交,得到相交矢量范围列表slfw_lists。将slfw_lists作为查询条件之一,sql语句样式如下:“selectshapefrompart_tabletwhereslfwdmin(slfw_lists)sdo_filter(t.shape,br))”;2)part_query2:将得到的矢量范围列表slfw_lists的过程内嵌到sql语句里,其样式如下:“selectshapefrompart_tabletwhereslfwdmin(selectslfwdmfromslfwtwheresdo_filter(t.shape,br));sdo_filter(t.shape,br))”;3)part_query3:仅使用br作为查询条件,sql语句样式如下:selectshapefrompart_tabletwheresdo_filter(t.shape,br));其中,part_query1、part_query2都是先用矢量范围底图与范围矩形进行相交查询首先获取目标要素所在的矢量范围代码,然后再到图层元数据表中根据矢量范围代码获取目标要素所在子表名然后再到相应的子表中做精准查找,而part_query1和part_query2的区别在于part_query2同样将表示在各个子表中查找的sql语句保存到一个总的sql语句中只执行一次在分表中的精准查找,尝试以此来提高效率;part_query3则是利用分区表向上只有一个图名、逻辑上不分离的特性不考虑子表直接做大表与br的相交查询直接得到目标结果要素。技术方案:(1)分区键的选择:分区时需要选择一个属性项作为分区作用对象来完成表的分区,即分区键。分区键的选择需要考虑被访问次数最多的哪些属性字段(例如属性字段“用途”访问次数最多,则把用途相似的要素放在同一分区中)、归档频率(归档数据显然使用时间字段实现范围分区是较好的选择)等。(2)分区粒度的选择:在确定了分区键之后,就需要考虑分区粒度的选择。分区粒度的选择没有固定的模式或者原则,比如:便于系统维护考虑的是多大的分区能够维护方便,比如银行系统的用户信息存储,按市分区比按省分区后期维护方便,则采用用户信息存储按市分区;便于归档考虑的是归档频率,比如对小区用户管理,按单元楼归档比按门牌号进行归档方便,不同目的采用的分区方法不同。(3)索引机制的构建:在分区之后再对数据创建索引双管齐下能够快速提提升查询检索效率。关系型数据库中管理空间数据使用较多的是四叉树索引和r树索引。与四叉树索引相比,r树索引更自动智能,具有较高的存储利用率。分区技术在对海量要素图层数据存储和查询具有优化作用,对矢量大数据的存储和管理研究具有重要意义,为更好的应用分区技术来解决实际遇到的存储与检索效率问题提供决策支持。实验结果得出:仅仅考虑查询效率时,如果在分区后各个子表中查询操作本身差别不大,在不使用分区键作为查询条件的查询情境中,则分区粒度越大则效率越高;仅仅考虑查询效率时,使用分区键作为查询条件时,则本地分区索引效率更高;否则全局空间索引在查询情景中表现更优等。附图说明下面将结合附图及实施例对本发明作进一步说明,附图中:图1是本发明的关系数据库中海量要素存储的分区优化研究方法的流程图。具体实施方式为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。本发明研究的海量要素图层,在其应用场景中,当在地图窗口中对这些矢量数据进行浏览或查询时,多数情况下其本质为对集中连片要素集合的访问,这些集中连片要素地理位置很接近,通常情况下归属于一个或几个行政单元。因此,考虑到若能够在进行矢量数据查询时,根据行政区化过滤和缩小数据库中检索范围,则能够起到访问较少数据而较快找到满足条件数据的效果;另外,在多用户并发访问场景下,同一时刻不同用户访问的数据通常是不同地理范围的,那么若不同地理范围的数据存放在不同的存储设备上,则能够起到io负载均衡的效果。因此,本发明选择以行政区代码作为分区键、将相同行政区代码的要素存放在同一个分区中的分区策略。(1)以地类图斑为测试数据,设计实验测试如何选择分区粒度。我国行政区划大致为可分为:国、省、市、县、乡镇五个级别,而分区是将分区后的数据分配单独的段,我国有40446个乡镇级别的区域,若将数据分成40446个,会导致分区数据过于分散、细致,数据的管理和查询功能性能降低,验证该种分区方案必要性不高。因此,本发明主要考虑验证“按省分区”、“按市分区”、“按县分区”这三种分区方式的效率。(2)为了模拟真实应用场景,提高查询检索效率,在对数据进行分区之后也为其创建空间索引,空间索引的类型均选择适合空间对象的r树索引,与表分区一样,索引也可以分区,索引分区方法有本地分区索引和全局分区索引。本地分区索引指的是每个表分区都有一个索引分区,而且只索引该表分区,是一对一的关系。全局分区索引指的是索引存储时整体按照范围或者散列进行分区。此时,一个索引分区可能指向任何(和所有)表分区,一个表分区的数据也可能存在于任何一个索引分区。此外,全局索引还可以不进行分区,整体存储在一个分区中。实施方案:(1)首先,为得到不同分区方案下的查询效率,将全国范围内的分别为千万级和亿级要素量的两组数据分别按照“未分区+空间索引”、“按县分区+本地空间索引”、“按县分区+全局空间索引”、“按市分区+本地空间索引”、“按市分区+全局空间索引”、“按省分区+本地空间索引”、“按省分区+全局空间索引”共七组。对于分组后的数据分别选取1:500、1:2000、1:10000、1:25000、1:50000、1:100000六个覆盖常用的大中小查询场景,针对全局和本地空间索引根据上述结论分别采用适合其的part_query3(全局空间索引)和part_query2(本地空间索引)算法在全国范围内随机生成各比例尺的查询范围,在oracle数据库中进行空间查询,记录查询耗时。最后,采用百分位数回归法计算平均值和第100位百分位数,并对查询结果做归一化处理(用不同分区方案的查询统计结果与当前比例尺下查询耗时最低值的比值表示)。得出结论:1)对于本发明的实验数据,“按县+全局”索引效率更高;2)全局索引比本地索引效率更高;3)索引为全局索引时,三种分区粒度的效率从高到低分别是:按县分区、按省分区、按市分区;4)索引为本地索引时,三种分区粒度的效率从高到低分别是:按省分区、按市分区、按县分区,分区粒度越大效率越高。(2)做索引方式和分区粒度对查询效率的影响分析,得出:1)对数据字典访问次数与索引分区的粒度线性相关,分区数越多,访问次数越多;2)索引分区与数据分区相似,均是在查询对象的数据量达到一定程度后,即索引分区是在要查询的索引池中数量达到影响查询效率时可以考虑进行索引分区;3)索引是提升查询效率最有效的方法。本发明实验是在普通查询环境下(即不以索引主键为查询条件)的查询效率分析如果查询条件中包含分区键使用本地空间索引将可以直接定位到相应的分区中,查询对象将仅限于那个子分区,这样的查询情景下本地空间索引将会有更高的查询效率。(3)综上,本发明在前人利用关系型数据库的分区技术不能有效的管理大容量的空间数据尤其是要素量达到千万级别以上的矢量图层数据的基础上,采用不同管理方式、不同分区粒度、不同索引方式及其组合的分区技术来系统管理空间大图层数据,并通过实验验证分区技术对海量要素图层数据的存储具有优化作用。并得出结论:1)分区技术在对海量要素图层数据存储和查询具有优化作用;2)仅仅考虑查询效率时,如果在分区后各个子表中查询操作本身差别不大,在不使用分区键作为查询条件的查询情境中,则分区粒度越大则效率越高;3)仅仅考虑查询效率时,使用分区键作为查询条件时,则本地分区索引效率更高;否则全局空间索引在查询情景中表现更优等。为更好的应用分区技术来解决实际遇到的存储与检索效率问题提供技术支持。基于上述研究,本发明所最终得出的关系数据库中海量要素存储的分区优化研究方法如图1所示,具体包含如下步骤:数据存储步骤,包含:s11、在gis平台创建企业级地理空间数据库,创建sde用户、sde表空间、安装sde资料档案库,sde资料档案库包含空间数据字典和arcsde软件程序包;s12、在关系型数据库中创建数据存储所用sde表空间及sde用户;s13、在关系型数据库中创建空间矢量数据库总表,并将待存储数据存储进入空间矢量数据库总表中;关系型数据库是指oracle关系型数据库;s14、在关系型数据库中创建分区表,在此按照设置好的最优的分区键、分区粒度将空间矢量数据库总表存储的待存储数据进行数据分区存储;优选地,分区存储时将“行政区代码”作为分区键,将相同行政区代码的要素存放在同一个分区中的分区策略,分区粒度选择“按县分区”;s15、对空间矢量数据库总表和分区表一起,整体建立r树空间索引,具体是指:建立利用空间实体外接矩形的r树空间索引;数据查询步骤,包含:s21、接收数据检索指令,开始数据检索;s22、采用sql语句的方式依据全局空间索引,做空间矢量数据库总表与需要查询区域的交集;s23、返回所述交集的结果,作为检索出的目标结果要素;s24、采用sql语句的方式统计查询时间。其中,步骤s22具体包括:利用分区表向上只有一个图名、逻辑上不分离的特性不考虑子表,通过初级相交查询运算符sdo_filter,直接将空间矢量数据库总表和分区表的范围矩形相交,得出目标结果要素即县级行政区。基于上述方法,本发明还提供了一种与上述方法对应的系统,即关系数据库中海量要素存储的分区优化研究系统,包含如下模块:数据存储模块,包含:gis处理单元,用于在gis平台创建企业级地理空间数据库,创建sde用户、sde表空间、安装sde资料档案库,sde资料档案库包含空间数据字典和arcsde软件程序包;关系型数据库处理单元,用于在关系型数据库中创建数据存储所用sde表空间及sde用户;关系型数据库是指oracle关系型数据库;总表处理单元,用于在关系型数据库中创建空间矢量数据库总表,并将待存储数据存储进入空间矢量数据库总表中;分区表处理单元,用于在关系型数据库中创建分区表,在此按照设置好的最优的分区键、分区粒度将空间矢量数据库总表存储的待存储数据进行数据分区存储;分区表处理单元中,分区存储时将“行政区代码”作为分区键,将相同行政区代码的要素存放在同一个分区中的分区策略,分区粒度选择“按县分区;索引建立单元,用于对空间矢量数据库总表和分区表一起,整体建立r树空间索引,具体是指:建立利用空间实体外接矩形的r树空间索引;数据查询模块,包含:检索指令接收单元,用于接收数据检索指令,开始数据检索;交集求取单元,用于采用sql语句的方式依据全局空间索引,做空间矢量数据库总表与需要查询区域的交集;结果返回单元,用于返回所述交集的结果,作为检索出的目标结果要素;查询时间统计单元,用于采用sql语句的方式统计查询时间。交集求取单元具体用于:利用分区表向上只有一个图名、逻辑上不分离的特性不考虑子表,通过初级相交查询运算符sdo_filter,直接将空间矢量数据库总表和分区表的范围矩形相交,得出目标结果要素即县级行政区。目前关系型数据库对包含海量要素的空间矢量图层数据的管理,通常是用一张大表或者拆分成多个子表来进行管理。然而,在现有技术条件下,当矢量图层要素量达到10万条或数据量达到2gb时,在某些场景下数据库查询性能会急剧下降,同时数据库可用性降低、管理负担增大等问题也随之出现。而使用将一张大表拆分成多个小的子表的方式管理时,由于拆分后表名不统一,物理上是多个图层,不能向上屏蔽拆分后表名的多样性与复杂性,导致对应用无法透明。因此,若要实现全国或者大区域内的无缝浏览,需要编程将多个图层抽象成逻辑上的一个图层方可实现,该方式复杂且低效。本发明采用分区技术来系统地管理海量要素图层数据。包含如下几个步骤:步骤1:使用arcgis平台创建企业级地理空间数据库(createenterprisegeodatabase),创建sde用户、sde表空间、安装sderepository(sde资料档案库,包含空间数据字典和arcsde软件程序包);步骤2:在oracle关系型数据库中创建数据存储所用的sde表空间及sde用户;步骤3:在oracle关系型数据库中创建空间矢量数据库总表并将待存储数据存储进入空间矢量数据库总表中;步骤4:在oracle关系型数据库中创建矢量要素图层数据分区表,分区存储时将“行政区代码”作为分区键,将相同行政区代码的要素存放在同一个分区中的分区策略,分区粒度选择“按县分区”;步骤5:并建立利用空间实体外接矩形的r树空间索引。步骤6:采用全局分区索引的方式对数据开始检索;步骤7:利用分区表向上只有一个图名、逻辑上不分离的特性不考虑子表,通过sdo_filter(初级相交查询)运算符,直接做大表与br(boundaryrectangle,范围矩形)相交,得出目标结果要素即县级行政区。步骤8:采用sql的方式分别统计大表和分区表的查询时间。在本实施例中,分区表的查询时间小于未分区表的查询时间。通过以上8个步骤,实现了利用系统的分区方法使得海量要素图层数据的存储和查询效率得以提升,管理得以优化。上面结合附图对本发明的实施例进行了描述,但是本发明并不局限于上述的具体实施方式,上述的具体实施方式仅仅是示意性的,而不是限制性的,本领域的普通技术人员在本发明的启示下,在不脱离本发明宗旨和权利要求所保护的范围情况下,还可做出很多形式,这些均属于本发明的保护之内。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1