基于Hilbert曲线与R-tree的HBase多维查询系统的构建及其查询方法

文档序号:6626702阅读:1313来源:国知局
基于Hilbert曲线与R-tree的HBase多维查询系统的构建及其查询方法
【专利摘要】本发明公开了一种基于Hilbert曲线与R-tree的HBase多维查询系统的构建及其查询方法,本发明一方面利用Hilbert曲线对多维数据从多维降到一维,另一方面针对HBase上的多维数据建立R树。映射的一维Hilbert曲线的标志符Hilbert ID能够将信息与原始的高维数据ID建立对应关系。通过R树,高维数据的查询可以高效地映射为一维的Hilbert ID集合。从而实现在HBase上多维数据的快捷查询。
【专利说明】基于H i I bert曲线与R-tree的HBase多维查询系统的构建 及其查询方法

【技术领域】
[0001] 本发明涉及一种基于Hilbert曲线与R-tree的HBase多维查询系统的构建及其 查询方法。

【背景技术】
[0002] 近年来,各种管理数据的技术在不断创新,其中Hadoop开源产品系列在商业实践 中取得了广泛认可,几近成为事实上的大数据管理行业标准平台。Hadoop云计算平台的一 个主要特点是可以提供可扩展的计算能力和存储能力,实现交互式的数据查询也是用户所 关心的,是云计算成功的关键因素。HBase作为一种NoSQL存储系统,专门设计用来快速随 机读写大规模数据。作为Apache Hadoop项目的子项目,一个分布式的、面向列的开源数据 库,HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,能够很 好地解决在数据规模剧增时导致的系统扩展性和存储性能问题,而这些都是传统关系型数 据库无法很好应付的。同时,Jffiase不受限于Hadoop MapReduce编程框架的高延迟数据处 理机制,使得HBase可以满足大规模数据实时处理应用的需求。然而,HBase只有对一维数 据的索引,没有多维数据索引。在多维数据查询时只能全表扫描,并使用Filter进行过滤, 查询效率低下。易用性和实时性差,难以满足大部分应用需求。
[0003] 随着各种数据库的兴起,空间数据库索引的研究引起了人们越来越多的兴趣和关 注,其中1984年Guttman提出的R树是目前最流行的动态空间索引结构,广泛应用于原型 研究和商用空间数据库系统。R树是一种层次数据结构,是B树在K维空间上的自然扩展。 近年来,很多学者致力于R树的研究,在R树的基础上衍生出许多变种,比较典型的有R+ 树,压缩R树等。基于R树索引结构需要解决的主要问题仍然是减少区域的重叠,提高搜索 效率。
[0004] 因此针对HBase的数据建立R树索引,可改进HBase的易用性,提升查询性能和效 率,节省成本,能极大促进HBase的发展,对大规模数据的存储,分析和管理,以及对社会信 息化的发展,都具有现实应用价值和实际意义。


【发明内容】

[0005] 为解决上述问题,本发明提供了一种基于Hilbert曲线与R-tree的HBase多维查 询系统的构建及其查询方法。
[0006] 为实现上述目的,本发明采取的技术方案为:
[0007] -种基于Hilbert曲线与R-tree的HBase多维查询系统的构建方法,包括如下步 骤:
[0008] S1、初始化Hilbert编码产生器。根据数据维数N及Hilbert阶数Level,初始化 Hilbert编码产生器;
[0009] S2、根据数据维数N,初始化R树;
[0010] S3、根据用户指定的表名初始化HBase表;
[0011] S4 :根据多维对象各维属性(ai,a2,……,aN)的值,确定所在网格的网格坐标( Xl, x2,……,xN),待管理多维范围为([0,800],[0,400]),每个网格单元的大小为200*100时, 则多维对象O1 (250, 260)产生的网格坐标为(1,2)。
[0012] S5、根据网格坐标(X1, X2, ......,xN),确定Hilbert编码Hilbert ID ;如多对象O1 产生的Hilbert ID为7。
[0013] S6、根据网格坐标(X1, x2,......,xN)在R树中查询,若存在数据则不需要插入;否 则将网格坐标(X1, X2, ......,Xn)作为范围,Hilbert ID作为数据插入到R树中;如多维对 象〇1插入到R树的范围为(1,2),数据为7。
[0014] S7、对多维对象的各维属性值进行编码,得到字节数组ByteArray ;如对象O1编码 后的ByteArray为一个24字节的数组,各字节的16进制分别为00 00 00 00 00 00 00 02 40 6f 40 00 00 00 00 00 40 70 40 00 00 00 00 00。
[0015] S8、将多维对象插入到HBase中,其中Hilbert ID作为RowKey,ID作为列名, ByteArray作为Value ;如多维对象O1将插入到HBase中的第7行,第1列中,Value为24 字节数组 00 00 00 00 00 00 00 02 40 6f 40 00 00 00 00 00 40 70 40 00 00 00 00 00〇
[0016] S9、插入其它多维数据对象重复S4?S8 ;
[0017] S10、结束。
[0018] 作为优选,所述步骤S7中的编码方式如下:字节数组前8个字节对应多维对象属 性个数的整型值。之后每8个字节表示该多维对象的一个维度属性对应的双精度浮点型 值。
[0019] 上述的一种基于Hilbert曲线与R-tree的HBase多维查询系统的查询方法,包括 如下步骤:
[0020] S21、根据查询范围确定查询所在网格坐标范围;如查询Ql([110,310],[110, 280]),得到的网格坐标范围为([0,1],[1,2])。
[0021] S22、根据网格范围在R树中查询,得到在查询范围内的Hilbert ID集合;
[0022] S23、对于每一个Hilbert ID,在HBase中查询,得到字节数组;如Hilbert ID = 7 时,得到第 1 列的字节数组00 00 00 00 00 00 00 02 40 6f 40 00 00 00 00 00 40 70 40 00 00 00 00 00。
[0023] S24、对步骤3结果进行解码,得到多维对象;如对字节数组00 00 00 00 00 00 00 02 40 6f 40 00 00 00 00 00 40 70 40 00 00 00 00 00 进行解码,得到多维对象维 数为2,其属性值为(250, 260)
[0024] S25、对于步骤4查询到的多维对象,根据查询范围精确进行精确匹配,若多维对 象在查询范围内,则将其加入结果集中;如果该对象不在查询范围中,则将其淘汰;
[0025] S26、结束,结果集中数据即为查询结果。
[0026] 作为优选,解码方法如下;读取前8个字节内容,得到多维对象属性数。接着逐一 对之后的每8个字节解码为双精度浮点型数据,并赋给多维对象对应属性上。
[0027] 本发明一方面利用Hilbert曲线对多维数据从多维降到一维,另一方面针对 HBase上的多维数据建立R树。映射的一维Hilbert曲线的标志符Hilbert ID能够将信息 与原始的高维数据ID建立对应关系。通过R树,高维数据的查询可以高效地映射为一维的 Hilbert ID集合。从而实现在HBase上多维数据的快捷查询。

【专利附图】

【附图说明】
[0028] 图1本发明实施例1中的Hi Ibert二维编码。
[0029] 图2为本发明实施例1中刚初始化的R树。
[0030] 图3为本发明实施例1各个对象对应的点在网格中的位置。
[0031] 图4为本发明实施例1插入O1后的R树。
[0032] 图5为本发明实施例1插入〇2、〇3、〇4、〇 5、O6后的R树。
[0033] 图6为本发明实施例1对应的最小边界矩形。
[0034] 图7为本发明实施例1各多维对象及查询范围表示。

【具体实施方式】
[0035] 为了使本发明的目的及优点更加清楚明白,以下结合实施例对本发明进行进一步 详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发 明。
[0036] 实施例1
[0037] 本实施例采用5台IBM X3650M4服务器为测试平台,每台服务器的软硬 件配置如下;CPU :2*Xeon E5-2620CPU(6Cores 12Thread);内存:32G Bytes ;硬 盘:6T Bytes,lOOOOrpm,raid5 ;操作系统:CentOS 6. 4x86_64 ;开发工具:Eclipse, GNU Toolkits(GCC、G++、GDB), Vim 等;开发语言:Java,C++ ;Hadoop 版本:cl oudera hadoop-2. 3. 0_cdh5. 0? IHBase 版本:cloudera hbase-0. 96. I. I_cdh5. 0? I
[0038] 设待索引对象数据维数为N = 2,待管理多维范围为([0,800],[0,400]),每个网 格单元的大小为200*100,多维数据实例对象有6个,每个数据对象用唯一标识符ID来标 识,各个ID对应的点的二维属性如表1所示。
[0039] 表1各个点对象的二维属性
[0040]

【权利要求】
1. 一种基于Hilbert曲线与R-tree的HBase多维查询系统的构建方法,其特征在于, 包括如下步骤: 51、 初始化Hilbert编码产生器。根据数据维数N及Hilbert阶数Level,初始化 Hilbert编码产生器; 52、 根据数据维数N,初始化R树; 53、 根据用户指定的表名初始化HBase表; S4 :根据多维对象各维属性(&1,a2,……,aN)的值,确定所在网格的网格坐标( Xl, X2,......? xN); 55、 根据网格坐标(Xp x2,......,xN),确定 Hilbert 编码 Hilbert ID ; 56、 根据网格坐标(Xl,x2,……,xN)在R树中查询,若存在数据则不需要插入;否则将 网格坐标(Xi, x2, ......,XN)作为范围,Hilbert ID作为数据插入到R树中; 57、 对多维对象的各维属性值进行编码,得到字节数组ByteArray ; 58、 将多维对象插入到HBase中,其中Hilbert ID作为RowKey,ID作为列名,ByteArray 作为Value ; 59、 插入其它多维数据对象重复S4?S8 ; S10、结束。
2. 根据权利要求1所述的一种基于Hilbert曲线与R-tree的HBase多维查询系统的 构建方法,其特征在于,所述步骤S7中的编码方式如下:字节数组前8个字节对应多维对象 属性个数的整型值。之后每8个字节表示该多维对象的一个维度属性对应的双精度浮点型 值。
3. -种基于Hilbert曲线与R-tree的HBase多维查询系统的查询方法,其特征在于, 包括如下步骤: 521、 根据查询范围确定查询所在网格坐标范围; 522、 根据网格范围在R树中查询,得到在查询范围内的Hilbert ID的集合; 523、 对于每一个Hilbert ID,在HBase中查询,得到字节数组; 524、 对步骤3结果进行解码,得到多维对象; 525、 对于步骤4查询到的多维对象,根据查询范围精确进行精确匹配,若多维对象在 查询范围内,则将其加入结果集中;如果该对象不在查询范围中,则将其淘汰; 526、 结束,结果集中数据即为查询结果。
4. 根据权利要求3所述的一种基于Hilbert曲线与R-tree的HBase多维查询系统的 查询方法,其特征在于,解码方法如下;读取前8个字节内容,得到多维对象属性数。接着逐 一对之后的每8个字节解码为双精度浮点型数据,并赋给多维对象对应属性上。
【文档编号】G06F17/30GK104408039SQ201410462268
【公开日】2015年3月11日 申请日期:2014年9月6日 优先权日:2014年9月6日
【发明者】王国仁, 王波涛, 黄山, 祝景阳, 刘增兰 申请人:东北大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1