APP下载

基于位图技术创建HBASE二级索引的实践

2021-07-19晏学义

信息通信技术 2021年3期
关键词:表格检索用户

王 飞 张 明 晏学义

中国联合网络通信有限公司济南软件研究院 济南 250100

引言

现代社会是一个高速发展的社会,科技发达,信息流通,人们之间的交流越来越密切,生活也越来越方便,大数据就是这个高科技时代的产物。数据的增长急需数据库存储容量的扩充,现有的关系型数据库很难在硬件上满足数据疯狂增长的需要[1]。

Apache HBASE是一个高性能、分布式、面向列、可伸缩的开源分布式NoSQL数据库,它不同于一般的关系型数据库,是一个适合于非结构化数据存储的数据库[2]。HBASE是基于ROWKEY(行键)的有序存储,在明确ROWKEY的条件下HBASE支持毫秒级的快速检索[3]。然而,随着HBASE的应用的不断深入,单纯通过ROWKEY检索数据的方式不再满足应用的需求。

对于多字段的复杂检索,如果无法通过ROWKEY检索,则需对HBASE全表数据进行扫描,消耗大量时间,导致查询效率极低。为此,业内提出了建立HBASE二级索引的方案以提高多字段信息查询效率。

1 传统HBASE二级索引技术

目前,HBASE二级索引技术的方案中普遍存在两大特点。

1.1 以空间换时间

现有的HBASE二级索引方案都是根据查询常用属性创建索引表,这就意味着每个索引表都是建立在固定的属性条件下的。因此,当实际调取某种多样属性信息时,需要按照多重属性条件依次检索不同的索引表。从不同的索引表中获取的ROWKEY再进行比对去重,最终得到符合所有查询条件的ROWKEY,然后再根据筛选出的ROWKEY在HBASE表进行提取,以完成多重条件信息的查询。此种方案虽然避免了HBASE数据的全表扫描,节省了查询时间,但需要根据不同的条件或条件组合创建多索引表,同时HBASE中的ROWKEY将会重复保存在不同索引表中,这将需要使用较大的存储空间用以存放大量的索引表数据。

1.2 数据变更成本高

二级索引表是根据属性条件建立的,因此当需要更新HBASE中的ROWKEY时,一旦ROWKEY中的数据内容发生变化,就需要更新所涉及到的所有索引表。尤其当索引表较多或关联关系较复杂时,势必要消耗较高的成本来修改所有涉及的二级索引表。

鉴于以上二级索引的局限性,本文在兼顾多条件查询效率的同时,最大化减少了存储二级索引所占用的数据空间。在使用过程中如果HBASE发送小范围数据变更无需修正本文所设计的二级索引内容,也可保证数据查询的准确性[4]。

2 HBASE位图索引技术

2.1 HBASE位图索引技术

位图技术是一种常用的数据存储方式,可以看作是存储了大量bit位的bit序列,每个bit位都代表一个特定的属性含义,bit位只有0/1两种状态,分别代表属性是否存在[5]。

本文利用位图技术在内存数据库中以K-V形式存储数据。其中“主属性”保存在KEY中,而“从属性”以位图的形式保存在VALUE中。同时从属性在位图中的bit位需要另外用位图字典来记录,VAULE中实际显示的是相关从属性的具体值,即0或1。以图1为例,手机号代表主属性,VALUE中包含两类从属性,即手机号码归属业务和手机号码归属省份。两类从属性在VALUE中各占用一段存储空间,分别保存着以位图形式显示的属性数据,即1或0[6]。

当使用HBASE位图索引对HBASE进行查询时,首先通过位图索引完成用户范围的查找,然后根据用户范围在HBASE中完成最终数据的检索,参见图2。

图2 HBASE位图索引查询图

当需要查询漫游到河南省的4 G 业务的总金额时,即查询条件为多重查询,包括省份查询(河南省)及业务查询(4G业务),首先根据位图字典(如图1所示)查到“河南省”在二级索引中的bit位置,即“河南省”在二级索引中的第2bit位,4G业务在二级索引中的第40 bit位。然后在内存中检索第2位和第40位都为“1”的用户有哪些(1代表“是”,0代表“否”)。最终得到手机号码1XX05316666和1XX05316667用户符合查询条件。然后再从H B A S E 中查询手机号码1XX05316666和1XX05316667的所有属性,找出符合漫游到河南省的4 G 业务的数据并累加金额,得到总金额为1.59元。

图1 位图数据存储和位图字典对应图

2.2 HBASE位图索引技术使用

HBASE位图索引采用二次查询的方式进行检索,通过从位图索引中检索出数据范围,然后根据数据范围从HBASE中查询出最终数据结果。

2.2.1 位图索引创建

所述位图索引的创建主要包含两个步骤:位图索引模板参数配置和REDIS内存创建。位图索引模板参数一般存放在主流的关系型数据库中如Oracle;而REDIS内存的创建需要四台主机,形成一主三从的结构(主节点用于更新,从节点用于查询)。

所述位图索引模板参数主要包含四张表:位图大类表、位图字典表、业务表、业务索引维度表。前两张表的内容对任何HBASE表格都是通用的,后两张表的内容是针对某特定HBASE表格而配置的。

位图大类表主要用于记录位图索引包含哪些用于检索的业务类。

位图字典表主要用于记录某业务类包含哪些属性值。每个属性值占用一位,每类业务创建一个位图起止范围,即位图所占位数。起止范围应预留部分空bit位以减少属性的增加对位图索引的干扰,因为每当增加新的属性值时会占用更多的bit位。

业务表主要用于记录某HBASE表格的特定配置模板,主要包括表模板名、主属性(如用户)在HBASE表格中的位置(即处于哪个列族、列名)。

业务索引维度表主要记录某HBASE表格所包含的检索业务的配置信息。对于每个检索业务,主要记录了该业务使用了位图大类表中的哪个业务类,该检索业务的属性值位于HBASE表格中的位置(即处于哪个列族、列名)。

本文选用REDIS内存数据库存储位图索引[7],REDIS内存库采用主从模式进行部署。通过REDIS的主从模式对位图索引进行读写分离,其中主机用于索引数据写入,从机用于索引数据查询。REDIS每条记录的key包含了主属性,而Value值即存放了该主属性如用户的位图。

位图索引创建时根据HBASE中的同一主属性(如用户)的多条数据信息生成此用户的位图数据,然后将所有用户的位图属性存储到REDIS中,完成位图索引的创建。位图索引的数据量取决于HBASE中主属性(如用户)的数量,和HBASE中的数据总量无关。

2.2.2 位图索引的更新

位图索引的更新分为全量更新和增量更新。所述全量更新即为对某张完整的HBASE表的位图索引重新创建;所述增量更新指随着HBASE表的记录增添而更新位图索引的信息。

对于全量更新,仅仅需要对每个主属性搜集位图信息并记录到REDIS即可。

对于增量更新,每当HBASE有新记录插入时,需要对位图索引进行更新。更新时,首先需要找到该记录的主属性值,然后生成该记录的位图。对于位图中每个bit位为1的位都要在REDIS中进行设置,也就是将该记录的位图与REDIS中的旧位图进行按位或运算后重新存入[8]。

2.2.3 查询

总的查询过程分为两步:位图索引查询和HBASE查询。

所述位图索引查询,即首先根据检索条件生成检索条件的位图。然后根据位图全量扫描REDIS内存记录,找到符合位图记录的主属性(如用户)。最后将所有用户列表传递给接下来的处理程序——HBASE查询。

HBASE根据用户生成ROWKEY范围,对每个ROWKEY范围查询。如果支撑多条主属性的ROWKEY范围查询需要多个HBASE查询连接进行,且因为用户主属性在HBASE分布式集群中存储在不同的主机上,导致直接使用HBASE查询接口是效率较低。为了加快HBASE中对多范围数据的查询效率,对HBASE做出以下优化:

1)在每台主机上部署查询程序;

2)对用户按存储主机进行分类;

3)查询时按照用户边查询边汇总,并输出本主机的查询结果到HDFS;

4)最终将每台主机的查询结果下载后汇总,然后将最终结果输出到HDFS。

2.3 HBASE位图索引技术效率

位图索引技术的效率主要取决于查询条件能否落在位图索引上或者落在位图索引上的多少。查询条件落在位图索引上越多,HBASE位图索引技术效率越高;查询条件落在位图索引上越少,HBASE位图索引技术效率越低。因此合理设计位图索引的业务类和合理设计每张HBASE表的检索业务尤为关键。

3 结语

下面是普通HBASE查询与基于位图索引的HBASE查询速度对比(基于同一个查询过滤条件)。

如表1所示,表格行数与普通HBASE查询耗时呈现线性相关,而基于位图索引的HBASE查询不太受表格行数的影响。前者是由于普通HBASE查询需要扫描全表,耗时自然与表格行数有关。后者是因为位图索引大小与表格行数无关,仅与表格主属性相关,所以索引查找耗时不会随表格行数的增加而变化;由于索引查找得出的是ROWKEY范围,当表格行数增加时,ROWKEY范围并不会产生变化,只是每个ROWKEY范围的行数可能变多,所以HBASE扫描耗时也不会增加太多。

表1 普通HBASE查询与基于位图索引的HBASE查询测试结果

本文针对HBASE全表查询速度慢的缺点,设计了一种基于位图索引的查询方案。该方案通过对常用检索业务添加位图索引,有效缩小了HBASE扫描范围,即由全表扫描缩小为ROWKEY范围扫描,大大降低了查询的时间成本。同时,位图索引所额外占用的资源量极少,以1亿用户2000个属性进行估算,其占用的内存资源仅为:100,000,000*2000/8/1024/1024/1024=23G B。这与传统的二级索引技术相比其资源的耗用基本可以忽略不记。由于采用了2次查询的方式,在使用过程中如果HBASE发送小范围数据变更无需修正本发明所设计的二级索引内容,也可保证数据查询的准确性,进一步减少了方案中数据的使用、维护成本。因此基于位图索引技术创建HBASE二级索引的实践在资源的使用和后期的维护无疑是极具性价比的、高效的HBASE查询的方案。

猜你喜欢

表格检索用户
基于用户和电路的攻击识别方法
《现代临床医学》来稿表格要求
组成语
CNKI检索模式结合关键词选取在检索中的应用探讨
瑞典专利数据库的检索技巧
2019年第4-6期便捷检索目录
履历表格这样填
表格图的妙用
英国知识产权局商标数据库信息检索
信用卡资深用户