大数据干货 数据存储丨用案例详解HBase二级索引

 公司新闻     |      2020-02-26 21:53

  近来做的一个项目涉及到了多条款的组合查问,数据存储用的是HBase,刚巧HBase对待这种场景的查问额表不给力,日常HBase的查问都是通过RowKey(要把多条款组合查问的字段都拼接正在RowKey中彰彰不太或者),或者全表扫描再贯串过滤器筛选出对象数据(太低效),因此通过策画HBase的二级索引来处分这个题目。

  HBase自己只供给基于行键和全表扫描的查问,而行键索引简单,对待多维度的查问穷困(如:对待代价+天数+客栈+交通的多条款组合查问穷困),全表扫描效果低下。

  如(图1),当要对F:C1这列筑设索引时,只必要筑设F:C1各列值到其对应行键的照射合联,快三平台哪个好如C11-RK1等,如许就已毕了对F:C1列值的二级索引的修建,当要查问契合F:C1=C11对应的F:C2的列值时(即凭据C1=C11来查问C2的值,图1青色个别)其查问举措如下: 1. 凭据C1=C11到索引数据中查找其对应的RK,查问获得其对应的RK=RK1 2. 获得RK1后就天然能凭据RK1来查问C2的值了 这是修建二级索引简略思绪,其他组合查问的连结索引的筑设也相像。

  表中有两个列族,此中一个是列族INDEX,其并不存储任何的数据,仅仅是为了将索引数据与主数据隔离存储(由于正在HBase中统一列族的数据会被压缩正在沿道存储),索引数据的行键款式为:RegionStartKey-索引名-索引键-Rowkwy,其他RegionStartKey即是起点,由于正在创筑HBase表时就对表凭据起点实行了预分区,索引键为主数据中某列(或者是多列)的列值,Rowkey对应主数据的行键;主数据的行键款式为:起点-方针地-性价比,因此正在存储数据时,统一起点 方针地的数据默认是按性价比排序的;索引数据的行键和主数据的行键的前缀都是起点,因此正在存储时雷同起点的索引数据和主数据是存储正在统一个Region中的,如许避免了正在通过索引获得RK后又去其他Region上查问对象数据,升高了查问效果。

  起首凭据查问条款来确定索引名,凭据其查问条款为出游天数据 客栈品级确定索引名为aaa,如许就将查问的领域缩幼正在索引名为aaa的索引数据区内

  凭据出游天数的值为3天,客栈品级的值为4,贯串Phoenix的含糊查问就能确定契合这两个查问条款的索引数据的行键

  将查问条款中的可选字段转换成数字能省俭存储空间,如交通器械中的飞机,高铁,火车,汽船,汽车判袂转换成5,4,3,2,1

  要是数据量正在百万级别以下可应用Phoenix(HBase的SQL查问引擎)含糊查问性能删除索引行键的策画