首页> 中国专利> 一种基于HBase实现模糊查询的方法

一种基于HBase实现模糊查询的方法

摘要

本发明一种基于HBase实现模糊查询的方法涉及数据库存储检索系统,尤其涉及一种基于HBase实现对指定数据全模糊查询系统。包括1)数据存储;2)提交查询请求;3)解析请求;本发明在对模糊查询字段数据进行环形切词,同时实现了二级索引模式来存储索引数据,通过查询服务端实现对HBase中数据的多条件查询,实时模糊查询,很大程度上提高了模糊查询的效率,也大大降低了数据的膨胀率,有效的实现了对海量数据的模糊查询,满足开发需求。

著录项

  • 公开/公告号CN107291964A

    专利类型发明专利

  • 公开/公告日2017-10-24

    原文格式PDF

  • 申请/专利权人 南京华飞数据技术有限公司;

    申请/专利号CN201710699170.7

  • 发明设计人 赵万亮;姜思远;王月铭;

    申请日2017-08-16

  • 分类号

  • 代理机构南京品智知识产权代理事务所(普通合伙);

  • 代理人奚晓宁

  • 地址 210019 江苏省南京市建邺区嘉陵江东街18号04幢2层204-34室

  • 入库时间 2023-06-19 03:35:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-11-15

    授权

    授权

  • 2017-11-24

    实质审查的生效 IPC(主分类):G06F17/30 申请日:20170816

    实质审查的生效

  • 2017-10-24

    公开

    公开

说明书

技术领域

本发明一种基于HBase实现模糊查询的方法涉及数据库存储检索系统,尤其涉及一种基于HBase实现对指定数据全模糊查询系统。

背景技术

HBase是一个分布式的、面向列的开源数据库,该技术来源于Google的Bigtable,是一个高可靠性,高性能,面向列,可伸缩的分布式系统。目前HBase主要应用在结构化和半结构化的大数据存储上,其在插入和读取上都具有极高的性能表现,这与它的数据组织方式有着密切的关系。在逻辑上,HBase的表中数据按RowKey进行字典排序,实现海量数据的快速检索。RowKey是数据表的一级索引,由于HBase本身没有所谓的二级索引机制,所以在基于索引检索数据只能单纯地依靠RowKey,而不支持多种条件查询,当然同样的也不支持类似关系型数据库的SQL语句查询。

Hbase为筛选数据还提供了一组过滤器,通过这个过滤器可以在HBase中的数据的多个维度(行,列,数据版本)上进行对数据的筛选操作,也就是说过滤器最终能够筛选的数据能够细化到具体的一个存储单元格上(由行键,列明,时间戳定位)。常用的过滤器包括RowFilter、PrefixFilter、ColumnPrefixFilter、ValueFilter等,利用filter过滤的全表扫描查询,支持子字符和正则匹配的模糊查询。

Elasticsearch是一个基于Apache Lucene(TM)的开源搜索引擎,Elasticsearch使用Java开发并使用Lucene为核心来实现所有的搜索和索引的功能,通过Rest Api的方式来隐藏Lucene的复杂性,并对外提供操作的服务。内置丰富的搜索方法,如:词条查询、match查询、通配符查询、more_like_this查询、范围查询、正则表达式查询等等。

现有技术开发应用中有在基于ElasticSearch对HBase存储数据实现模糊查询的实例,需要搭建ElasticSearch集群。可见,现有技术在只基于HBase支持的原生模式查询是有一定的局限性的。首先只按照Rowkey进行检索,是不支持条件查询的,不能满足多样查询需求的实现;其次使用过滤器查询,在对不同数据的模糊查询要生成相应的过滤匹配,不够灵活,同时在实现海量数据查询时是存在性能问题的,特别是在全表扫描的情况下。

发明内容

本发明的目的是针对上述不足之处,提供一种基于HBase实现模糊查询的方法,针对现有HBase在支持模糊查询及多种条件查询的缺陷,采用对数据进行环形切词存储的方法,在提供支持SQL查询客户端的情况下,可以基于HBase实现模糊查询,达到通过执行SQL语句like语法,即可获取模糊查询结果的效果,满足海量数据实时模糊查询的开发需求。

本发明是采取以下技术方案实现的:

一种基于HBase实现全模糊查询的方法,所述方法包括如下步骤:

1)数据存储;

1-1)输入数据通过数据存储流程模块将需要支持查询的字段的索引数据写入到HBase;

1-2)将需要模糊查询的字段通过环形切词后的索引数据写入到HBase;同时,将步骤1-1)所述输入数据存储到Hdfs中;

2)提交查询请求

由查询客户端将用户的查询请求提交给查询服务端;所述查询请求为用户通过输入设备输入的输入查询语句;

3)解析请求

查询服务端处理由步骤2)中查询客户端提交的查询请求,解析查询语句并执行查询,最终返回查询结果至查询客户端。

步骤1-1)中所述索引数据为需要支持查询字段的相关数据,用于查询;所述输入数据为需要存储到数据库的数据;

步骤1-2)中所述环形切词,用于将模糊查询字段数据,切分成多条索引数据,以实现模糊查询时的多种可能。

环形切词的切词符号采用。

在所述HBase中只存储索引字段信息、过滤字段以及输入存储的文件信息,大大减少了数据的膨胀和冗余,同时保证实现实时的模糊查询。

所述文件信息用于记录索引数据对应的输入数据存储信息。

数据存储流程模块将数据存储到HBase数据库,具体的存储过程包括如下步骤:

a)输入数据放到配置的指定目录,通过扫描程序模块扫描解析,获取表信息及相应的字段信息,并过滤掉错误数据;

b)判断是否存在需要查询的字段:若没有需要查询的字段,则将输入数据按照自定义文件格式写入到Hdfs;

c)若有需要查询的字段,输入数据按照自定义文件格式写入到Hdfs;判断需要支持查询字段的查询类型是精确查询还是模糊查询;

c-1)若是精确查询,则将该查询字段数据直接写入到HBase中对应Htable,表名为索引字段名,Rowkey值为索引字段+时间戳,列族cf至少两列,第一列存储过滤盒子,第二列存储文件信息。其他列是存储稀疏列,列名是字段名和标签值,列值为空;

c-2)若是模糊查询,则将该查询字段进行数据环形切词,并写入HBase数据库。

查询服务端解析查询语句并执行查询的具体步骤如下:

J-1)查询服务端接收查询请求,在没有请求提交异常的情况下,解析查询请求中的SQL查询语句,并整理出SQL查询语句对应的查询树和各子查询条件对应的CF树,以及过滤树,然后保存解析的结果;

J-2)判断步骤J-1)解析的结果中是否有查询条件,如果有查询条件,进入步骤J-3);如果没有查询条件,即全表查询,直接读取Hdfs上存储的原始输入数据,有指定返回条数,即读取指定条数数据,将查询结果返回到客户端,查询结束;若没有指定返回条数,则返回默认返回条数的查询结果到客户端,查询结束;

J-3)根据保存的SQL查询语句解析结果,查询HBase;判断是否有查询结果,如果查询到索引数据及可获取对应文件信息,从Hdfs上读取存储的原始输入数据,有指定返回条数,即读取指定条数数据;若没有指定返回条数,则返回默认条数的查询结果,将查询结果返回给客户端,查询结束;如果没有查询结果,则直接返回查询信息给客户端,提示没有数据,查询结束。

本发明对比现有背景技术有如下的有益效果:

本发明在实现对环形切词存储数据的同时,一份数据会因切词而重复存储多份,产生较高的数据膨胀率,考虑解决这个问题,因而实现了一种二级索引模式,将所有输入数据以自定义的文件格式存储到Hdfs中,HBase中只存储索引字段信息、过滤字段以及输入存储的文件信息,大大减少了数据的膨胀和冗余,同时保证实现实时的模糊查询。因而在对模糊查询字段数据进行环形切词,同时实现了二级索引模式来存储索引数据,通过查询服务端实现对HBase中数据的多条件查询,实时模糊查询,很大程度上提高了模糊查询的效率,也大大降低了数据的膨胀率,有效的实现了对海量数据的模糊查询,满足开发需求。

附图说明

以下将结合附图对本发明作进一步说明:

图1是本发明方法的系统架构图;

图2是本发明输入数据存储过程的流程图;

图3是本发明的二级索引结构示意图;

图4是本发明实施例以手机号码13645816225为例经过环形切词存储HBase中Rowkey的格式;

图5是本发明提交查询请求到处理请求,获取查询结果的流程图;

图6是本发明实现前模糊查询的结果样例图;

图7是本发明实现后模糊查询的结果样例图;

图8是本发明实现中模糊查询的结果样例图;

图9是本发明实现全模糊查询的结果样例图;

图10是本发明实现精确查询的结果样例图。

具体实施方式

参照附图1~10,在使用本发明方法前,hadoop集群需要先搭建好,以及建好数据表和所有查询字段的HBase表。

图1中整个实现流程包括对输入数据以自定义的文件格式存储到Hdfs,模糊查询字段经过切词处理存储到对应Htable中;在查询方面可以支持输入SQL语句(支持语法有限),进行SQL解析,获取查询条件,查询HBase,并从HBase中读取查询数据,返回结果至客户端。具体包括如下步骤:

1)数据存储;

1-1)输入数据通过数据存储流程模块将需要支持查询的字段的索引数据写入到HBase;

1-2)将需要模糊查询的字段通过环形切词后的索引数据写入到HBase;同时,将步骤1-1)所述输入数据存储到Hdfs中;

2)提交查询请求

由查询客户端将用户的查询请求提交给查询服务端;所述查询请求为用户通过输入设备输入的输入查询语句;

3)解析请求

查询服务端处理由步骤2)中查询客户端提交的查询请求,解析查询语句并执行查询,最终返回查询结果至查询客户端。

图2表示输入数据存储过程的流程,扫描相应表的输入数据文件,获取表结构定义信息,进行文件解析处理,处理过程中会过滤一些异常数据等,所有数据以自定义的文件格式,存储路径及文件名,写到Hdfs上。根据表结构定义信息,可以获取标记查询的字段,写索引数据,同时会检查标记的查询类型,若是精确查询,则会将该查询字段数据直接写入到HBase中对应Htable,表名为索引字段名,Rowkey值为索引字段+时间戳,列族cf至少两列,第一列存储过滤盒子,第二列存储文件信息。其他列是存储稀疏列,列名是字段名和标签值,列值为空。若是模糊查询字段,则会将该查询字段数据环形切词,一条数据将会写成多条索引数据入库。

例如一个手机号码索引,一共11位,若是支持精确查询,只需要入一条索引数据;若是支持模糊查询,在经过环形切词会生成13条索引数据入库。详细可以参考图4,以手机号码13645816225为例经过环形切词存储HBase中Rowkey的格式,切词符号用。

图3是二级索引结构示意图;

表名Htable:索引字段名;

Rowkey:字段值[0](Capturetime +6位hashcode);

注:字段值为字符型中间有一位0,时间是绝对秒数*1000+6位随机数,再转成8个字节。

hashcode:是一条数据记录值经过某种算法,生成的一个6位的数值。

时间戳:Capturetime*1000(单位:毫秒,记录中的capturetime字段值,为绝对秒数,*1000转化为毫秒);

CF1格式:列族cf至少两列,第一列存储过滤盒子,第二列存储文件信息;其他列是存储稀疏列,列名是字段名和标签值,列值为空。

上述过滤盒子,是一个固定长度的字节数组,保存筛选字段,统计字段,每个字段根据配置的移量和长度,存储在字节数组中,如果字段是数值类型,长度只能是1,2,4,8。

上述文件信息,是总共11个字节。第1表示表,第2、3表示日期,第4、5表示文件名,第6、7、8、9表示块偏移量,第10、11表示块内偏移量。

上述其他列为存储稀疏列,原始数据字段名和值使用点分割,可以多列。

图5为提交查询请求到处理请求,获取查询结果的流程图。

方法提供查询模块装置,具体实现为以下步骤一到:

步骤1、输入查询语句,提交查询请求;

步骤2、接收查询请求,判断是否存在异常,若有异常,则会处理异常情况,并将处理结果返回给客户端;

步骤3、若请求没有异常,进行查询语句解析,解析查询请求中的SQL查询语句,并整理出 SQL查询语句对应的查询树和各子查询条件对应的 CF 树,以及过滤树,然后保存解析的结果;

步骤4、判断是否有查询条件,若没有查询条件,即全表查询,查询语句即“select *from staff;”(注:staff为存储表),会直接读取Hdfs上存储的原始输入数据,有指定返回条数,即读取指定条数数据,若没有,则会返回默认条数的查询结果;

步骤5、有查询条件,查询语句即“select * from staff where ……;”,根据保存的SQL查询语句解析结果,会根据查询条件中查询字段,判断查询字段是否是模糊查询字段,若是模糊查询,则需要判断是前模糊或后模糊或中中模糊或全模糊,查询HBase;

以查询手机号码13645816225举例:

注:实际切词符号用 ,此处为了展示方便用#

步骤6、判断是否有查询结果,有查询到索引数据及可获取对应文件信息,从Hdfs上读取存储的原始输入数据,有指定返回条数,即读取指定条数数据,若没有,则会返回默认条数的查询结果,查询结果返回给客户端,查询结束;

步骤7、若没有查询结果,直接返回查询信息给客户端,提示没有数据,查询结束。

以下步骤会图片的形式展现查询的实现:

图6为实现前模糊查询的结果样例图

SQL语句:select * from STAFF where PHONENUM like '%78' and CAPTURETIMEbetween 1484795647 and 1484795651;

图7为实现后模糊查询的结果样例图

SQL语句:select * from STAFF where PHONENUM like '18%' and CAPTURETIMEbetween 1484795647 and 1484795651;

图8为实现中模糊查询的结果样例图

SQL语句:select * from STAFF where PHONENUM like '136%5' and CAPTURETIMEbetween 1484795647 and 1484795651;

图9为实现全模糊查询的结果样例图

SQL语句:select * from STAFF where PHONENUM like '%1234%' and CAPTURETIMEbetween 1484795647 and 1484795651;

图10为实现精确查询的结果样例图

SQL语句:select * from STAFF where PHONENUM='18612112345' and CAPTURETIMEbetween 1484795647 and 1484795651。

本发明在对模糊查询字段数据进行环形切词,实现一种二级索引模式来存储索引数据,同时提供查询模块装置,以此实现对HBase中数据的多条件查询,实时模糊查询,很大程度上提高了模糊查询的效率,也大大降低了数据的膨胀率,有效的实现了对海量数据的模糊查询,满足开发需求。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号