APP下载

HBase二级索引查询引擎实现探讨

2018-10-21黄炜耀

科技风 2018年32期

黄炜耀

摘 要:本文主要对如何基于HBase构建二级索引查询引擎进行研究探讨。首先分析说明了HBase查询灵活性上存在的问题,接着简单介绍二级索引的含义,从而引入本文讨论的主题,最后给出较详细的查询引擎总体架构图及各核心功能模块的实现方案。

关键词:二级索引;查询引擎;HBase

HBase是一个分布式、列式数据库,因其具有高扩展性、高并发性、稳定性以及数据高安全性等优点,而被大多数分布式系统所使用。但其数据查询支持上较关系型数据库就要弱很多,只能通过完整的Rowkey进行get或按前缀模糊scan的方式进行,必要时再辅助以SingleColumnValueFilter、RowFilter、ValueFilter方式进一步对数据进行过滤。为了保证数据查询的效率,表设计时必须慎重考虑Rowkey的设计,但随着业务需求的变化,原先的Rowkey信息往往不能满足需要,此时只能通过降低查询性能或重新设计Rowkey并对历史数据重新导入以满足需求。接下來我们将要介绍的二级索引查询引擎,可以减小业务需求变化时引起Rowkey设计方案过时引起的查询问题。

1 二级索引查询引擎

1.1 什么是二级索引

关系型数据库表的索引分为两类:主索引(聚集索引)和二级索引(非聚集索引)。主索引一般对应的是主键,而系统可以根据需要建立多个二级索引,辅助与提升查询性能。基于HBase实现的二级索引主数据Rowkey相当于主索引,而我们扩展出来的索引数据既是二级索引,借助二级索引可以实现查询条件非Rowkey组成部分的查询需求与提升查询性能。

1.2 Coprocessor介绍

一个功能再强大的系统都不能满足其所有使用者的一切需求。而Coprocessor就是HBase专门为用户提供扩展功能的一个途径。借助Coprocessor,用户可以根据自己实际需求定制出适合自己的功能,并借助HBase现有的框架体系实现高效运行。

Coprocessor功能在0.92版本中引入,其支持两种协处理器:EndPoint和Observer。

1.2.1EndPoint

类似于关系型数据库的存储过程,使用者通过开发对应的客户端、服务端即可,通过在RegionServer上高效执行本地计算操作。

1.2.2Observer

类似于关系型数据库的触发器,用户通过它可以在服务端实现动作拦截进行特殊处理。

1.3 二级索引查询引擎

引擎架构图

从引擎架构图可以看出,客户端通过原生的HTable类将数据put至RegionServer(以下简称RS),接着RS端Coprocessor的Observer功能对put/delete指令进行拦截,通过索引构造器生成事先配置的索引数据;查询则通过EndPoint来实现,客户端通过自定义API设置好查询条件,并提交到RS端,服务端首先分析客户端提交的条件信息,通过查询决策器选择最优的索引进行查询。下面我们对关键模块功能实现方案进行分析:

1.3.1Rowkey设计

二级索引的实现方案中,Region除了保留客户端put上来的主数据外,还需保留索引数据与主数据的对应关系,为了提升性能需要保证索引数据、主数据在同Region中,避免出现跨Region读写,因此索引数据可以参考以下规则设计:

Region.startKey.indexName.indexValue.MainRowkey

1.3.2索引构造器

解析业务数据,根据预先加载的索引信息,从业务数据中提取索引字段值,并依次生成索引数据。

1.3.3查询决策器

根据预先加载的索引信息,从业务数据中提取索引字段,并分析查询条件,根据策略从已有的索引信息匹配最优的查询索引,如,某表存在以下两组索引:

indexName1:fieldA

indexName2:fieldA.fieldB

客户端提交上来的查询条件为:fieldA=xxx and fieldB=yyyy and fieldC>=zzz…

此时查询决策器根据最优策略选择indexName2索引进行查询。

1.3.4索引查询

通过二级索引获取主数据的过程相较传统的关系型数据库并没有多少区别,首先根据二级索引字段值找到索引数据,再通过索引数据获取主数据内容。

1.3.5全表扫描

对于设置了二级索引功能属性的表,Region保留有索引、主数据,实际运用过程中索引记录数将超过主数据,为了提升遍历业务数据的效率,须提提供只遍历主数据的功能。

2 结语

本文首先对HBase的功能进行简单描述后,重点分析说明HBase在查询灵活性上存在的问题,从而进入HBase二级索查询引擎的主题。接着较详细地说明Coprocessor核心功能与类型,最后给出查询引擎的架构图以及各核心功能的实现方案。HBase做为Apache重要的子项目之一,目前比较稳定,并且已有的功能可以满足大多数系统的需求,借助Coprocessor用户可以像本文所描述的二级查询引擎一样实现属于自己的功能。

参考文献:

[1][美]乔治.HBase权威指南.出版社:人民邮电出版社.

[2][美]迪米达克.HBase实战.出版社:人民邮电出版社.