hbase的索引有哪些

小编 889

hbase的索引有:1、全局索引;2、覆盖索引;3、本地索引。全局索引只能查询row key中包含的字段,用前缀过滤,否则索引表不会生效,如果查询语句中的条件字段或返回字段不是索引字段,就会触发全表扫描。

一、全局索引

全局索引以设置的字段+原表数据row key作为索引表的row key,适合读多写少的场景。如果使用全局索引,读数据基本不损耗性能,所有的性能损耗都来源于写数据。

创建全局索引:create index DIANXIN_INDEX ON DIANXIN (end_date)。

对于全局索引在默认情况下,在查询语句中检索的列如果不在索引表中,Phoenix不会使用索引表将,除非使用hint。

二、本地索引

本地索引适合写多读少的场景。和全局索引一样,Phoenix也会在查询的时候自动选择是否使用本地索引。本地索引因为索引数据和原数据存储在同一台机器上,避免网络数据传输的开销,所以更适合写多的场景。

创建本地索引:create local index DIANXIN_LOCAL_IDEX on DIANXIN(grid_id)。

对于本地索引,查询中无论是否指定hint或者是查询的列是否都在索引表中,都会使用索引表,相当于之前的第二种将数据拿出来单独建一张表,row key改变。

三、覆盖索引

覆盖索引是把原数据存储在索引数据表中,这样在查询时不需要再去HBase的原表获取数据就,直接返回查询结果。

创建覆盖索引:create index DIANXIN_INDEX_COVER on DIANXIN ( x,y ) include ( county )。

可以加入字段作为索引表的列(include …),查询条件放在索引中,select中的列可以放在include中,只需要通过索引就能返回所要查询的数据。

需要注意的是:查询是select的列和where的列都需要在索引中出现。 

延伸阅读

hbase的存储引擎有哪些

hbase有三种基本的存储引擎,即哈希存储引擎、B树存储引擎以及LSM树存储引擎。

1.哈希存储引擎

哈希存储引擎哈希表的持久化实现,支持增、删、改以及随机读取操作,但不支持顺序扫描,对应的存储系统为key-value存储系统。对于key-value的插入以及查询,哈希表的复杂度都是O(1),明显比树的操作O(n)快,如果不需要有序的遍历数据,哈希表就非常适合。代表性的数据库有:Redis,Memcache,以及存储系统Bitcask。

2.B树存储引擎

相比哈希存储引擎,B树存储引擎不仅支持随机读取,还支持范围扫描。B树存储引擎是B树​​​​的持久化实现,不仅支持单条记录的增、删、读、改操作,还支持顺序扫描(B+树的叶子节点之间的指针),对应的存储系统就是关系数据库(Mysql等)。

3.LSM树存储引擎

LSM树存储引擎和B树存储引擎一样,同样支持增、删、读、改、顺序扫描操作。而且通过批量存储技术规避磁盘随机写入问题。当然凡事有利有弊,LSM树和B+树相比,LSM树牺牲了部分读性能,用来大幅提高写性能。

回复

我来回复
  • 暂无回复内容

注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部