基于HBase分布式存储的空间矢量数据索引与查询方法转让专利

申请号 : CN202111184720.4

文献号 : CN113626448B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴杰尹心亮陈奇

申请人 : 武大吉奥信息技术有限公司

摘要 :

本发明适用于地理信息技术领域,提供一种基于HBase分布式存储的空间矢量数据索引与查询方法,所述方法包括:建立空间数据库元表,空间数据库元表中每条记录对应一张空间矢量数据集表;每个服务端节点根据查询条件进行查询空间矢量数据集表,并将查询结果返回至客户端。本发明以分区、空间、属性、对象ID等组成的RowKey索引,可以有效改善矢量空间数据的组织方式,从而避免数据冗余存储;同时还自定义了分区策略,可以使数据自动均匀分布到各个服务端节点上,让集群各节点的资源利用率相对均衡;此外本发明还采用了基于XZ‑Ordering思想的空间编码方法,可以有效解决线、面要素跨地理格网的问题。

权利要求 :

1.一种基于HBase分布式存储的空间矢量数据索引与查询方法,其特征在于,所述方法包括下述步骤:

步骤S1、建立空间数据库元表,空间数据库元表中每条记录对应一张空间矢量数据集表,其中空间矢量数据集表中每行数据头部为RowKey索引,剩余部分为Value值,所述RowKey索引包括分区编码、空间编码、属性编码和ID编码,所述Value值包括空间信息Geometry和属性信息Attribute;

步骤S2、接收输入的查询条件并推送至HBase集群各服务端节点,每个服务端节点根据查询条件进行查询空间矢量数据集表,并将查询结果返回至客户端;其中所述步骤S2具体包括:

接收输入的查询条件,所述查询条件包括空间条件、属性条件、对象ID条件和对象池大小,将查询条件推送至HBase集群各服务端节点;

每个服务端节点根据查询条件进行内部查询;

将空间矢量数据集表中Value中的Geometry对象与输入的空间条件进行精确比较过滤,得到准确结果;

最后输出小于或等于对象池大小的查询结果,如果已到对象池尾部,则标识已到尾部;

如果未到对象池尾部,则标识此次查询结果最后一行的RowKey值;

向客户端返回查询结果并汇总保存至结果集中。

2.如权利要求1所述基于HBase分布式存储的空间矢量数据索引与查询方法,其特征在于,所述分区编码用于定义数据的分区策略,不同的分区对应不同的HBase集群服务端节点,分区编码方式如下:

Partition(x)=∣Hash(x)∣% RegionSize,x=FeatureID其中RegionSize为分区个数,FeatureID为数据的唯一ID,∣Hash(x)∣表示取x的哈希值然后取绝对值,∣Hash(x)∣% RegionSize表示∣Hash(x)∣对RegionSize取余。

3.如权利要求1所述基于HBase分布式存储的空间矢量数据索引与查询方法,其特征在于,所述空间编码用于索引数据在地理空间上的分布情况,如果数据的几何类型为点,则采用Z‑Ordering编码,如果数据的几何类型为线或面,则采用XZ‑Ordering编码。

4.如权利要求1所述基于HBase分布式存储的空间矢量数据索引与查询方法,其特征在于,所述属性编码均使用8个字节描述,数值或日期类型均转换成Long或Double类型对应的字节编码;如果是变长类型则取其Hash值。

5.如权利要求4所述基于HBase分布式存储的空间矢量数据索引与查询方法,其特征在于,每个服务端节点的内部查询方式如下:根据空间条件、属性条件和对象ID条件生成查询策略;

获取当前服务端节点的RegionKey信息,将空间条件转换为GeoCode编码,生成包含RegionKey和GeoCode的字节序列,并根据所述字节序列扫描服务端节点上的RowKey索引,得到查询结果;

通过比较属性条件以及对象ID条件过滤查询结果。

说明书 :

基于HBase分布式存储的空间矢量数据索引与查询方法

技术领域

[0001] 本发明属于地理信息技术领域,尤其涉及一种基于HBase分布式存储的空间矢量数据索引与查询方法。

背景技术

[0002] 时空大数据是大数据的重要组成部分,也是基础性信息资源。随着国家大数据战略逐步落地,政府部门的数据资产日益完善,使得时空大数据的数据总量在不断提高。
[0003] 传统的关系型数据库已经难以满足海量时空大数据的存储、管理及查询应用等需求。因此,亟需突破关系型数据库在海量数据存储管理与检索方面的性能瓶颈问题。近些年
在大数据存储领域涌现出了一批优秀的NoSQL(Not Only SQL,不仅仅是SQL)分布式数据
库,其中最具代表性的就是HBase数据库。
[0004] HBase数据库原生并不支持空间数据索引及检索。它是一个Key/Value(键/值)数据库,众所周知,基于Key/Value的数据组织中Key即是数据索引,其核心在于如何将空间数
据中的空间、时间、属性、ID等多维信息映射成一维Key。所以,基于HBase数据库的RowKey
(行键)设计,成为了空间数据组织与索引的关键问题。
[0005] 尽管近些年在国内外有一些优秀项目在这方面取得了一定进展,但在实际应用中仍然存在着一些问题:(1)数据查询仅支持空间索引,不支持属性索引,导致在复杂场景下
的多条件查询性能低下,无法满足实际应用场景的性能需求;(2)为满足复杂场景下的多种
条件查询需求,简单的通过数据冗余存储方式组织数据,虽然在功能上可以满足应用需求,
但这种组织方式会大量浪费存储空间,也不便于数据管理与应用;(3)简单地使用HBase表
存储数据,无法充分利用HBase分布式特性,导致在实际应用中数据读/写的效率较低。

发明内容

[0006] 鉴于上述问题,本发明的目的在于提供一种基于HBase分布式存储的空间矢量数据组织与索引方法,旨在解决现有HBase数据库的查询索引方法性能低、浪费空间、资源利
用率不高的技术问题。
[0007] 所述基于HBase分布式存储的空间矢量数据索引与查询方法包括下述步骤:
[0008] 步骤S1、建立空间数据库元表,空间数据库元表中每条记录对应一张空间矢量数据集表,其中空间矢量数据集表中每行数据头部为RowKey索引,剩余部分为Value值,所述
RowKey索引包括分区编码、空间编码、属性编码和ID编码,所述Value值包括空间信息
Geometry和属性信息Attribute;
[0009] 步骤S2、接收输入的查询条件并推送至HBase集群各服务端节点,每个服务端节点根据查询条件进行查询空间矢量数据集表,并将查询结果返回至客户端。
[0010] 进一步的,所述分区编码用于定义数据的分区策略,不同的分区对应不同的HBase集群服务端节点,分区编码方式如下:
[0011] Partition(x)=∣Hash(x)∣% RegionSize,x=FeatureID
[0012] 其中RegionSize为分区个数,FeatureID为数据的唯一ID,∣Hash(x)∣表示取x的哈希值然后取绝对值,∣Hash(x)∣% RegionSize表示∣Hash(x)∣对RegionSize取余。
[0013] 进一步的,所述空间编码用于索引数据在地理空间上的分布情况,如果数据的几何类型为点,则采用Z‑Ordering编码,如果数据的几何类型为线或面,则采用XZ‑Ordering
编码。
[0014] 进一步的,所述属性编码均使用8个字节描述,数值或日期类型均转换成Long或Double类型对应的字节编码;如果是变长类型则取其Hash值。
[0015] 进一步的,所述步骤S2具体包括:
[0016] 接收输入的查询条件,所述查询条件包括空间条件、属性条件、对象ID条件和对象池大小,将查询条件推送至HBase集群各服务端节点;
[0017] 每个服务端节点根据查询条件进行内部查询;
[0018] 将空间矢量数据集表中Value中的Geometry对象与输入的空间条件进行精确比较过滤,得到准确结果;
[0019] 最后输出小于或等于对象池大小的查询结果,如果已到对象池尾部,则标识已到尾部;如果未到对象池尾部,则标识此次查询结果最后一行的RowKey值;
[0020] 向客户端返回查询结果并汇总保存至结果集中。
[0021] 进一步的,每个服务端节点的内部查询方式如下:
[0022] 根据空间条件、属性条件和对象ID条件生成查询策略;
[0023] 获取当前服务端节点的RegionKey信息,将空间条件转换为GeoCode编码,生成包含RegionKey和GeoCode的字节序列,并根据所述字节序列扫描服务端节点上的RowKey索
引,得到查询结果;
[0024] 通过比较属性条件以及对象ID条件过滤查询结果。
[0025] 本发明的有益效果是:本发明中以分区、空间、属性和对象ID等组成的RowKey索引,可以有效改善矢量空间数据的组织方式,从而避免数据冗余存储,大幅降低存储资源的
投入和数据维护的难度;同时本发明还自定义了分区策略,可以使数据自动均匀分布到各
个服务端节点上,让集群各节点的资源利用率相对均衡,大幅提升数据读/写的效率;此外
本发明还采用了基于XZ‑Ordering思想的空间编码方法,可以有效解决线、面要素跨地理格
网的问题。

附图说明

[0026] 图1是本发明实施例提供的基于HBase分布式存储的空间矢量数据索引与查询方法的流程图;
[0027] 图2是本发明实施例提供的空间矢量数据集表的示意图;
[0028] 图3是本发明实施例提供的分区示意图。

具体实施方式

[0029] 为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并
不用于限定本发明。
[0030] 为了说明本发明所述的技术方案,下面通过具体实施例来进行说明。
[0031] 图1示出了本发明实施例提供的基于HBase分布式存储的空间矢量数据索引与查询方法的流程,为了便于说明仅示出了与本发明实施例相关的部分。
[0032] 如图1所示,本发明实施例提供的基于HBase分布式存储的空间矢量数据索引与查询方法包括下述步骤:
[0033] 步骤S1、建立空间数据库元表,空间数据库元表中每条记录对应一张空间矢量数据集表,其中空间矢量数据集表中每行数据头部为RowKey索引,剩余部分为Value值,所述
RowKey索引包括分区编码、空间编码、属性编码和ID编码,所述Value值包括空间信息
Geometry和属性信息Attribute;
[0034] 本发明方法主要有两个步骤。一是建立矢量空间数据索引结构,二是根据查询条件,HBase集群各服务端节点进行空间矢量数据查询。
[0035] 在步骤S1中,本发明设计空间数据库元表,用于记录空间数据库的基本信息,以及空间数据库中各类空间数据集的基本信息,包括但不限于:数据集名称、数据集类型、数据
集字段定义、数据集空间参考、数据集空间范围、数据集分区信息等。其中,数据集类型在本
发明中是固定值,即是空间矢量数据集。
[0036] 空间数据库元表的每条记录对应一张HBase表作为空间矢量数据集表。空间矢量数据集表的基本信息用一个Key/Value结构定义,其Key值为数据集名称,Value值为数据集
的基本信息,采用JSON结构。如图2所示,空间矢量数据集表的结构中每行数据表头为
RowKey索引,剩余部分为Value值。所述RowKey索引包括分区编码、空间编码、属性编码和ID
编码。所述Value值包括空间信息Geometry和属性信息Attribute。其中,Geometry仅包含一
个存储几何信息,而Attribute包含1个或多个属性,其个数由数据本身的属性列决定。
[0037] 下面对RowKey索引的四个组成部分具体描述。
[0038] (1)分区编码
[0039] 分区编码用于定义数据的分区策略,不同的分区对应不同的HBase集群服务端节点。如图3所示,根据分区编码Partition值,数据自动分配至HBase集群的四个服务端节点
中。分区编码占用1个字节,取值范围为0‑127。基于分区编码实现数据的负载均衡,因此,分
区编码需要具有离散特性,分区编码方式如下:
[0040] Partition(x)=∣Hash(x)∣% RegionSize,x=FeatureID
[0041] 其中RegionSize为分区个数,FeatureID为数据的唯一ID,即ID编码,∣Hash(x)∣表示取x的哈希值然后取绝对值,∣Hash(x)∣% RegionSize表示∣Hash(x)∣对RegionSize取余。
[0042] (2)空间编码
[0043] 空间编码用于索引数据在地理空间上的分布情况,空间编码占用8个字节,即是一个长整型。本发明根据不同几何类型的数据集,选择不同的索引方式。
[0044] 如果数据的几何类型为点,则用Z‑Ordering编码。其原理是基于地理格网思想,用一个数字标识某个地理格网,即代表了一个地理范围。当数字标识与要素关联,即标识这个
要素属于某个地理格网。地理格网越密,索引越精确。
[0045] 如果数据的几何类型为线或面,则采用XZ‑Ordering编码。其原理是多分辨率格网组成的编码体系,并且每个格网编码表示的地理范围是由基础格网向X轴和Y轴方向各延伸
一个格网。同时,让几何对象的最小外接矩形MBR(Minimum Bounding Rectangle)唯一落入
到某个级别的某个格网中。
[0046] (3)属性编码
[0047] 属性编码均使用8个字节描述,数值或日期类型均转换成Long或Double类型对应的字节编码;如果是变长类型则取其Hash值。
[0048] (4)ID编码
[0049] ID编码占用8个字节,即是1个长整型。
[0050] 步骤S2、接收输入的查询条件并推送至HBase集群各服务端节点,每个服务端节点根据查询条件进行查询空间矢量数据集表,并将查询结果返回至客户端。
[0051] 本发明采用的是自定义数据分区策略,打乱了HBase原有策略。因此,查询空间矢量数据也需要遵循自定义分区规则,本发明提供了一种联合HBase集群服务端节点与客户
端的查询逻辑。具体过程如下:
[0052] S21、接收输入的查询条件,所述查询条件包括空间条件、属性条件、对象ID条件和对象池大小,将查询条件推送至HBase集群各服务端节点。
[0053] S22、每个服务端节点根据查询条件进行内部查询。
[0054] 每个服务端节点的内部查询过程是一致的。具体过程如下:
[0055] a、根据空间条件、属性条件和对象ID条件生成查询策略;查询策略的优先顺序从高到低为对象ID条件、空间条件、属性条件。
[0056] b、获取当前服务端节点的RegionKey信息,将空间条件转换为GeoCode编码,生成包含RegionKey和GeoCode的字节序列,并根据所述字节序列扫描服务端节点上的RowKey索
引,得到查询结果。
[0057] 在RowKey索引结构中,RowKey的第一个字节是分区编码,与服务端节点的RegionKey一一对应。将空间条件转换为GeoCode编码,即可生成RowKey的查询条件,即是
RegionKey+GeoCode的字节序列。最后扫描HBase集群服务端节点上的RowKey,即可得到查
询结果。
[0058] c、通过比较属性条件以及对象ID条件过滤查询结果。
[0059] 本步骤通过属性条件和对象ID条件进行过滤。
[0060] 对于比较属性条件,将属性条件转换为字节比较器,通过简单的偏移计算得到偏移量Offset=9+AttributeIndex*8,可快速获取数据的值进行值域比较,这里
AttributeIndex为属性编号。
[0061] 对于比较对象ID条件,将对象ID条件转换为字节比较器,通过简单的偏移计算得到偏移量Offset=Length(RowKey)‑8,可快速获取数据的值进行值域比较,这里Length
(RowKey)‑8的含义是取RowKey的后8字节得到8字节FeatureID。
[0062] 本步骤S22将属性条件、对象ID条件等条件转换为HBase的过滤器,用于过滤RowKey的属性部分。由于RegionKey和GeoCode可能会存在多个值,所以,将各条件组合即形
成一个查询集合,并进行迭代扫描。
[0063] S23、将空间矢量数据集表中Value中的Geometry对象与输入的空间条件进行精确比较过滤,得到准确结果。
[0064] 在步骤S22中的查询结果是一个粗略结果,并不能准确判断空间关系。因此,需要获取Value中的Geometry对象与输入的空间条件进行精确判断,并得到准确结果。因此本步
骤通过Geometry再次过滤。
[0065] S24、最后输出小于或等于对象池大小的查询结果,如果已到对象池尾部,则标识已到尾部;如果未到对象池尾部,则标识此次查询结果最后一行的RowKey值。
[0066] 最后经过多次过滤后的查询结果保存在本地对象池中,如果已到对象池尾部,直接标识已到尾部,否则标识查询结果最后一行的RowKey值。
[0067] S25、向客户端返回查询结果并汇总保存至结果集中。
[0068] 所有的查询结构最终汇总保存在结果集中。判断是否已经到达结果集尾部,如果否,则可继续查询;如果是,则退出查询逻辑。
[0069] 综上,本发明在RowKey中加入分区编码,实现数据均衡策略,可有效利用各集群节点的资源,大大提升数据读/写的IO性能,将属性编码和ID编码集成到RowKey中,用于提升
复杂场景中多条件联合查询的效率低下问题;同时采用了基于XZ‑Ordering思想的空间编
码,可有效解决线、面要素跨地理格网问题;最后本发明引入对象池和尾部标记实现分批次
数据获取策略,用于解决单次查询返回数据过大的问题。
[0070] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。