hbase中空间数据存储中的主键设计
对于空间大数据的存储,本文探讨了对与空间大数据的分布式存储,在Hadoop平台上安装Hbase数据库将点状空间数据导入到Hbase数据库中采用简单高效的数据模型进行存储管理,对于海量的空间数据查询,为提高空间数据的检索效率以Hilbert曲线对空间进行划分建立空间索引。本文主要讨论了,在分布式文件系统Hadoop平台上建立Hbase数据库集群,设计空间点数据在Hbase数据库存储模型,并用Hilbert曲线把空间划分为网格,建立Hbase行键索引。
系统架构设计
空间填充曲线是一种重要的近似表示方法,将数据空间划分成大小相同的网格,在根据一定的规则将这些网格编码,每个格指定一个唯一的编码,并在一定的程度上保持空间临近性,即相邻的网格的编号也相邻,一个空间对象由一组网格组成。这样可以将多维的空间数据降维表示到一维空间当中,建立了N维空间与一维空间的一一映射。常见的空间填充曲线还有Z曲线、Gray曲线等。
Hilbert曲线是经典的空间填充曲线族的一种,由德国数据家希尔伯特1981年构造出该曲线。Hilbert曲线,该曲线被证明具有良好的空间聚集性,经常被用来划分空间数据为空间数据的检索建立索引,提高空间数据检索的效率。Hilbert填充曲线具有以下的特点:
Hilbert曲线将高维数据降为低维的一维连续直线对高维空间进行填充。对空间区域递归四分并唯一编码。
Hilbert曲线在空间是连续的,Hilbert空间编码的编码块在空间分布上一定是相邻的,这使得高维空间中聚集的数据,在填充曲线编码后的一维空间上仍然聚集的,可以有效的提高对空间数据的操作。
Hilbert曲线均匀的划分了空间区域,但是空间数据在空间区域中并不是均匀分布的,在一些空间网格中含有大量的数据,在另一些网格中含有较少的数据。这就造成的数据负载不均衡,影响查询的效率。因此,本文选取Hilbert作为空间点数据的索引。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-i2AmIHFp-1590303262905)(file:///C:\Users\Lenovo\AppData\Local\Temp\msohtmlclip1\01\clip_image001.png)]
图2 Hilbert曲线
Figure 2 Hilbert-curve
Hilbert码生成算法
1.计算Hilbert曲线的阶数。
本文采用样方分析方法来确定单元格的最佳个数,计算方法为Q=4A/n,Q为样方网格的个数,A为空间区域的面积,n为空间区域的点的数量;本文选取中过乡镇注记点数据为实验数据样方面积为960万平方公里,点数据为74.1636万个。则最佳网格数为:52,8阶Hilbert曲线的网格数据为64个,本实验中取8阶阶Hilbert曲线网格。
本文采用传统的基于Morton码上的二进制位操作来算法计算Hilbert曲线编码【22】生成的hilbert曲线编码:
图3 Hilbert曲线编码
Figure 3 Hilbert curve coding
2.根据经纬度划分中hilbert曲线的网格区域,并建立与hilbert曲线编码的对应。
表1Hilbert曲线编码
(经度)
表2 基于hilbert空间填充曲线的点数据索引结构
Hilbert所代表的网格区域 | 坐标点 | 特征ID | Key值 |
x1<x Y1<y | (x1,y1) (x1,y1)… | F0 …fi | Value1… |
x<x2<2x y<Y2<2y | (x1,y1) (x1,y1)… | Fi…fj | Value k… |
2x<x3<3x 2y<Y3<3y | (x1,y1) (x1,y1)… | Fj…fk | Value m… |
… |
1.3分布式列存储模型
Hbase表与关系型数据库中的表概念并不相同,Hbase表是一种持久化的、多维有序映射、稀疏的、分布式面向列存储的数据库。在HBase中, 数据表由行和列构成, 表中的Key有行键和列键,表的每一行具有唯一的行键 (Rowkey) 用于标识;而行中多个的列键组成列簇 (ColumnFamily) 的, 同一列簇中的列都具有相同的前缀,。行与列的交叉是单元格 (cell) , 它具有版本信息, 默认为数据插入单元格时的时间戳 (timestamp, Ts) 。HBase表中的数据由行键、列簇名、列名与时间戳唯一确定。行键(row key),唯一标识每一行,行键(row key)按其索引字典编码排序,提高数据的检索速度【15】。
在HBase的表结构基础上, 本文结合OGC的简单要素空间数据结构, 设计了空间数据的存储表结构。与传统的空间数据表类似, 把空间点状空间数据存储在hbase表中, 根据hilbert对空间区域的划分, 定义不同的列簇。列簇中的列由空间点位坐标和属性所构成, 每个空间网格对应一个行键, 由hilbert编码索引和要素标识符ID组合构成,每个点要素由hilbert编码和点要素标识符ID确定。
表3 Hbase数据存储模型
键值(key) | 列簇 | |||
几何字段(点坐标) | 属性1(id) | 属性 | 属性n | |
Value 1 | Ts:坐标点(xi,yi) Ts:坐标点(xk,yk) Ts:坐标点(xm,ym) | fi fj fk | Ts:属性 Ts:属性 Ts:属性 | … |
Value 2 | Ts:坐标点(xi,yi) Ts:坐标点(xk,yk) Ts:坐标点(xm,ym) | fm fn fp | Ts:属性 Ts:属性 Ts:属性 | … |
Ts:坐标点(xk,yk) Ts:坐标点(xm,ym) | fm fn fp | Ts:属性 Ts:属性 Ts:属性 | … | |
… | … | … | … | … |