HBase系列(七)二级索引 | 您所在的位置:网站首页 › hbase怎么打开 › HBase系列(七)二级索引 |
HBase二级索引
为何需要HBase索引?二级索与原理是什么?如何设计二级索引?基于Coprocessor方案Phoenix二级索引方案
非Coprocessor方案ES 二级索引方案
为何需要HBase索引?
HBase里面只有rowkey作为一级索引, 如果要对库里的非rowkey字段进行数据检索和查询, 往往要通过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。 为了HBase的数据查询更高效、适应更多的场景, 诸如使用非rowkey字段检索也能做到秒级响应,或者支持各个字段进行模糊查询和多字段组合查询等, 因此需要在HBase上面构建二级索引, 以满足现实中更复杂多样的业务需求。 二级索与原理是什么?
如(图1),当要对F:C1这列建立索引时,只需要建立F:C1各列值到其对应行键的映射关系,如C11->RK1等,这样就完成了对F:C1列值的二级索引的构建,当要查询符合F:C1=C11对应的F:C2的列值时(即根据C1=C11来查询C2的值,图1青色部分) 其查询步骤如下: 根据C1=C11到索引数据中查找其对应的RK,查询得到其对应的RK=RK1得到RK1后就自然能根据RK1来查询C2的值了 这是构建二级索引大概思路,其他组合查询的联合索引的建立也类似。
数据的查询过程 假设查询的条件: 出发点:澳门 目的地:杭州 出游天数:3天 酒店等级:4 其查询步骤如下: 1、首先根据查询条件来确定索引名,根据其查询条件为出游天数据 酒店等级确定索引名为aaa,这样就将查询的范围缩小在索引名为aaa的索引数据区内 2、根据出游天数的值为3天,酒店等级的值为4,结合Phoenix的模糊查询就能确定符合这两个查询条件的索引数据的行键 3、得到索引数据行键后就截取其最后的RowKey 4、最关键的Rowkey得到后就能轻易的获得其对应的列值了,整个查询过程就结束了。 对于其他更为复杂的组合查询的二级索引设计如类似。 当用户put操作时,会将原rowkey,转换为新的rowkey,再存一份索引。 当用户get操作时,会将rowkey映射为实际的rowkey,再根据实际的rowkey获取实际的结果。 当用户执行scanner操作时,会将scanner的结果映射为实际rowkey的结果,返回给用户。 通过hbase的BaseRegionObserver 协处理器,可以封装处理很多hbase操作。 缺点: 需要额外的存储空间,属 一种以空间换时间的方式。 注意: 1.将查询条件中的可选字段转换成数字能节省存储空间,如交通工具中的飞机,高铁,火车,轮船,汽车分别转换成5,4,3,2,1 2.将汉字转换成拼音才能保证数据按HBase的排序规则排序 3.如果数据量在百万级别以下可使用Phoenix(HBase的SQL查询引擎)模糊查询功能减少索引行键的设计 如何设计二级索引? 基于Coprocessor方案大体的思路:构建一份“索引”的映射关系,存储在另一张hbase表或者其他DB里面 Phoenix二级索引方案 非Coprocessor方案选择不基于Coprocessor开发,自行在外部构建和维护索引关系也是另外一种方式。 常见的是采用底层基于Apache Lucene的Elasticsearch(下面简称ES)或Apache Solr ,来构建强大的索引能力、搜索能力, 例如支持模糊查询、全文检索、组合查询、排序等。 ES 二级索引方案 |
CopyRight 2018-2019 实验室设备网 版权所有 |