基于Hbase行健的高性能查询方法和装置与流程

文档序号:12121432阅读:558来源:国知局
基于Hbase行健的高性能查询方法和装置与流程

本申请涉及数据库技术领域,特别地,涉及一种基于Hbase行健的高性能查询方法和装置。



背景技术:

Hadoop数据库(HBase,Hadoop Database)是一种分布式、可伸缩的非关系型(NoSQL,Not Only SQL)数据库,它构建在Hadoop基础设施之上,依托于Hadoop的迅猛发展,HBase在大数据领域的应用越来越广泛,成为目前NoSQL数据库中表现最耀眼,呼声最高的产品之一。

HBase的表数据按行健(Rowkey)进行字典排序, Rowkey实际上是数据表的一级索引(Primary Index),Rowkey在HBase中以B+ 树的结构形式有序存储,扫描效率较高,但在面对多条件组合查询时,仍存在不便。虽然Hbase提供了一些针对Rowkey、列、列簇的过滤器(Filter),可以实现组合、比较等查询方式,但是多Filter的组合过滤是要在HBase里进行多次数据扫描,速度缓慢、组合麻烦、效率低下,经常无法满足查询要求。

另外,虽然可以借助批处理或者其他方式建立HBase的二级索引数据,但是在插入主数据时需要伴随插入多份二级索引从而较大程度的降低了写入性能。对于一些轻量级的条件搜索场景,二级搜索显得过于浪费资源,而且每次创建新的表后,需要重新编写代码来支持。



技术实现要素:

本申请提供一种基于Hbase行健的高性能查询方法和装置,用于解决现有Hbase无法在保持高性能优势的条件下支持多条件查询的问题。

本申请公开的一种基于Hbase行健的高性能查询方法,所述行健包括按预设结构排列的n个查询列的数据,所述方法包括:接收用户输入的m个对Hbase表的查询条件及其逻辑关系;根据预设的元数据表信息解析出每个查询条件对应的查询列、查询条件值及其运算符;获取所述Hbase表中每一行的行健,根据预设的元数据表信息对所述行健进行分解,得到每个查询条件中的对应查询列的比对值,将所述比对值与查询条件值根据所述运算符进行比较运算,生成所述查询条件的比较结果;以及,根据所述逻辑关系汇总所有查询条件的比较结果,将汇总后的比较结果为真的行健对应的行数据返回给用户;其中,n≥m≥1。

本申请公开的一种基于Hbase行健的高性能查询装置,包括:元数据构造模块,用于预设元数据表信息以及行健的预设结构,所述行健包括按预设结构排列的n个查询列的数据; 过滤器模块,用于接收用户输入的m个对Hbase表的查询条件及其逻辑关系;以及,根据预设的元数据表信息解析出每个查询条件对应的查询列、查询条件值及其运算符;查询执行模块,用于获取所述Hbase表每一行数据的行健,根据预设的元数据表信息对所述行健进行分解,得到每个查询条件中的对应查询列的比对值,将所述比对值与查询条件值根据所述运算符进行比较运算,生成所述查询条件的比较结果;以及,根据所述逻辑关系汇总所有查询条件的比较结果,将汇总后的比较结果为真的行健对应的行数据返回给用户;其中,n≥m≥1。

与现有技术相比,本申请具有以下优点:本申请优选实施例采用非侵入式实现了基于一级索引Rowkey的高性能复杂条件查询引擎,以HBase的Rowkey一级索引的优势为基础,对扫描过程中获取的Rowkey与比较器中需要查询分片的位置、分片的预期值进行字节(byte)比较,从而能够在保证高性能的同时实现HBase多条件细粒度的过滤查询。

附图说明

附图仅用于示出优选实施方式的目的,而并不认为是对本申请的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1为本申请基于Hbase行健的高性能查询方法一实施例的流程图;

图2为本申请Rowkey的结构示意图;

图3为本申请基于Hbase行健的高性能查询装置一实施例的结构示意图。

具体实施方式

为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。

在本申请的描述中,需要理解的是,术语 “多个”的含义是两个或两个以上,除非另有明确具体的限定。术语“包括”、“包含”及类似术语应该被理解为是开放性的术语,即“包括/包含但不限于”。术语“基于”是“至少部分地基于”。术语“一实施例”表示“至少一个实施例”;术语“另一实施例”表示“至少一个另外的实施例”。其他术语的相关定义将在下文描述中给出。

本申请的核心发明思想之一在于:按照本申请涉及到的规范,对HBase表的Rowkey进行优化设计,预设查询分片,并生成与表相关的查询特性映射信息。编写Rowkey过滤器的分片查询比较器,在比较器中通过元数据来获取查询分片的映射信息,包括偏移位置、分片的长度、分片的预期值、分片的操作符,在扫描HBase数据的过程中,需要遍历行健,直接与预设好的查询分片信息来比较byte值,HBase中Rowkey存储的是字节数组,无需再次转换,直接高效率的进行比较,根据返回的运算结果(是或否),进行判断是否过滤该行数据。因此对于一些基本的搜索功能要求,无需重新编写二级索引代码,无需花很长时间通过列值进行过滤搜索,直接通过Rowkey分片的方式就能轻松快速的完成基本字段搜索功能。

参照图1,示出了本申请基于Hbase行健的高性能查询方法一实施例的流程,本优选实施例中的Hbase数据表中的Rowkey包括有按预设结构排列的n个查询列的数据,并在Hbase中预设有元数据表的结构。

具体实施时,元数据表结构可以包括Hbase表名、列名、列类型、偏移地址和是否倒序等。Rowkey可以采用如图2所示的结构形式,即n个查询列的数据之间以0x00为分隔符隔开。

所述方法具体包括以下步骤:

步骤S101:接收用户输入的m个对Hbase表的查询条件及其逻辑关系。

其中,n≥m≥1。

用户在进行查询时,输入内容主要包括: Hbase表名,每个查询条件的列名、操作符、第一查询条件值和第二查询条件值,以及各查询条件之间的逻辑关系等。

操作符可以是等于(=)、不等于(≠)、大于(>)、小于(<)、大于等于(≥)、小于等于(≤)、介于第一查询条件值和第二查询条件值之间(between)等。逻辑关系可以是与(and)、或(or)、异或(xor)、非(not)等。

当操作符为一元运算(如操作符为等于、不等于、大于、小于等)时,只需要第一查询条件值即可;当操作符为二元运算(如between)时,需要值第一查询条件值和第二查询条件值。

步骤S102:根据预设的元数据表信息解析出每个查询条件对应的查询列、查询条件值及其运算符。

具体实施时,用户输入的查询条件可以以分片数组的形式传递,具体包括长度均为m的列名分片数组、偏移地址分片数组、第一条件值分片数组、第二条件值分片数组和运算符分片数组。

根据预设的元数据表信息解析出每个查询条件对应的查询列、查询条件值,具体可以包括:根据待查询Hbase表名和预设的元数据表获取所述Hbase表的列名、列类型和偏移地址;根据所述列名的偏移地址从所述列名分片数组中分解获得每个查询条件的查询列的列名;根据所述查询列的列名获得对应的列类型,并根据列类型计算对应查询条件值的偏移地址;根据所述查询条件值的偏移地址从所述第一条件值分片数组和第二条件值分片数组中分解获得每个查询条件的查询条件值。

步骤S103:获取Hbase表中每一行的行健,根据预设的元数据表信息对所述行健进行分解,得到每个查询条件中的对应查询列的比对值,将所述比对值与查询条件值根据所述运算符进行比较运算,生成所述查询条件的比较结果。

具体实施时,为提高比对效率,上述比对值与查询条件值根据所述运算符进行比较运算,具体可以采用字节(byte)比较方式。

在另一实施例中,当Rowkey采用如图2所示的结构形式时,所述根据预设的元数据表信息分解对所述行健进行分解,得到每个查询条件对应查询列的比对值,具体可以包括:

步骤S103-1:根据每个查询列的列类型获得相应查询列的字节长度Leni

步骤S103-2:根据所述查询条件中对应查询列在行健中的排列位置k、以及位于该查询列之前各查询列的字节长度,计算该第k个查询列在行健中的偏移量Offsetk;具体公式如下:

步骤S103-3:从该偏移量Offsetk处读取长度为Lenk字节的数据,作为该查询列的比对值。

步骤S104:根据所述逻辑关系汇总所有查询条件的比较结果,将汇总后的比较结果为真的行健对应的行数据返回给用户。

本申请通过上述手段,可以产生如下有益技术效果:

高性能:一是基于Rowkey一级索引为过滤条件,二是直接比较字节,无需在进行比较前将数据转换为String、long等类型,可显著降低资源消耗。

轻量级:本申请只是基于Rowkey进行过滤,无需在HBase中插入多份数据,无需建立二级索引,无需借助第三方组件,可以直接封装成一个jar包即可完成轻量级的多条件过滤功能。

灵活性:根据查询参数、参数的预期比较值就可以进行准确快速比较。

高复用性:只要符合元数据构造器的规范即可适用所有HBase的表,无需重新编写分片过滤器,即可重复适用。

简易性:通过本方法,大大简化开发应用部署过程。

对于前述的各方法实施例,为了描述简单,故将其都表述为一系列的动作组合,但是本领域的技术人员应该知悉,本申请并不受所描述的动作顺序的限制,因为根据本申请,某些步骤可以采用其他顺序或同时执行;其次,本领域技术人员也应该知悉,上述方法实施例均属于优选实施例,所涉及的动作和模块并不一定是本申请所必须的。

本申请还公开了一种在其上记录有用于执行上述方法的程序的计算机可读记录介质。所述计算机可读记录介质包括配置为以计算机(以计算机为例)可读的形式存储或传送信息的任何机制。例如,机器可读介质包括只读存储器(ROM)、随机存取存储器(RAM)、磁盘存储介质、光存储介质、闪速存储介质、电、光、声或其他形式的传播信号(例如,载波、红外信号、数字信号等)等。

参照图3,示出了本申请基于Hbase行健的高性能查询装置一实施例的结构框图,包括:

元数据构造模块30,用于预设元数据表信息以及行健的预设结构,所述行健包括按预设结构排列的n个查询列的数据。

过滤器模块31,用于接收用户输入的m个对Hbase表的查询条件及其逻辑关系;以及,根据预设的元数据表信息解析出每个查询条件对应的查询列、查询条件值及其运算符。

其中,n≥m≥1。

查询执行模块32,用于获取Hbase表每一行数据的行健,根据预设的元数据表信息对所述行健进行分解,得到每个查询条件中的对应查询列的比对值,将所述比对值与查询条件值根据所述运算符进行比较运算,生成所述查询条件的比较结果;以及,根据所述逻辑关系汇总所有查询条件的比较结果,将汇总后的比较结果为真的行健对应的行数据返回给用户。

在另一实施例中,所述预设的元数据表可以包括Hbase表名、列名、列类型和偏移地址等;所述行健的预设结构可以为:n个查询列的数据之间以0x00为分隔符隔开。

所述根据预设的元数据表信息分解对所述行健进行分解,得到每个查询条件对应查询列的比对值,具体包括:根据每个查询列的列类型获得相应查询列的字节长度Leni;根据所述查询条件中的对应查询列在行健中的排列位置k、以及位于该查询列之前各查询列的字节长度,计算该第k个查询列在行健中的偏移量Offsetk,然后从该偏移量Offsetk处读取长度为Lenk字节的数据,作为该查询列的比对值。

所述预设的元数据表可以包括Hbase表名、列名、列类型和偏移地址。所述查询条件包括列名分片数组、偏移地址分片数组、第一条件值分片数组、第二条件值分片数组和运算符分片数组,每个分片数组的长度为m。

根据预设的元数据表信息解析出每个查询条件对应的查询列、查询条件值,具体包括:根据待查询Hbase表名和预设的元数据表获取所述Hbase表的列名、列类型和偏移地址;根据所述列名的偏移地址从所述列名分片数组中分解获得每个查询条件的查询列的列名;根据所述查询列的列名获得对应的列类型,并根据列类型计算对应查询条件值的偏移地址;根据所述查询条件值的偏移地址从所述第一条件值分片数组和第二条件值分片数组中分解获得每个查询条件的查询条件值。

需要说明的是,上述装置实施例属于优选实施例,所涉及的单元和模块并不一定是本申请所必须的。

下面,结合具体实例说明过滤器模块31的工作流程,具体包括:

1、过滤器模块31收到用户输入的多查询条件分片,根据元数据信息,自动映射各查询条件分片的偏移量、数据类型等元数据映射信息。

例如:假设当前HBase数据集如下表1所示:

表1.HBase数据集

注:表1中行健的格式为“用户编号+时间+订单状态+金额”,行健在Hbase中存储时为byte类型,表1所示只是为了方便展示。

生成的元数据如表2所示:

表2.元数据信息

用户输入的查询条件:用户编号【>50】 并且 订单状态【不等于过期】

经过映射得到结果,如表3所示:

表3.查询分片信息

2、构造器遍历映射后的查询分片信息,解析分片信息,针对不同条件进行不同的操作。

3、HBase在扫描(scan)数据的时候,获取Rowkey值,与遍历中的查询分片进行定位,通过运算符,直接比较byte值,效率更高效,进而判断出该行键是否符合分片要求。

根据元数据信息,将Rowkey进行分解,然后根据元数据中用户标号的偏移量,映射后得到比对的值,进行比较过滤。

4、每行数据遍历完查询分片后,将汇总比较结果,如果都true的话,就返回该行给客户端。

最终输出结果如表4所示:

表4.输出结果

本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。

以上对本申请所提供的一种基于Hbase行健的高性能查询方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1