kaiyun.com Hbase 构建二级索引的一些处罚有计算

发布日期:2023-12-09 12:34    点击次数:164


[[442461]]

本文转载自微信公众号「大数据时刻派」kaiyun.com,作家柯广 kaiyun.com 。转载本文请议论大数据时刻派公众号。

1 为什么需要二级索引

HBase的一级索引即是rowkey,咱们只是能通过rowkey进行检索。假定咱们相对Hbase内部列族的列列进行一些组合查询,就只可全表扫描了。表如果较大的话,代价是不可秉承的,是以要提议二级索引的有计算。

二级索引的念念想:浅陋表露即是,笔据列族的列的值,查出rowkey,再按照rowkey就能很快从hbase查询出数据,咱们需要构建出笔据列族的列的值,很快查出rowkey的有计算。

2 常见的二级索引有计算 MapReduce有计算; Coprocessor有计算; elasticsearch+hbase有计算; Solr+hbase有计算;

2.1 MapReduce有计算

IndexBuilder:期骗MR的花式构建Index 所长:并发批量构建Index 缺点:不成及时构建Index

例如:原表:

row  1      f1:name  zhangsan row  2      f1:name  lisi row  3      f1:name  wangwu 

索引表:

row     zhangsan    f1:id   1 row     lisi        f1:id   2 row     wangwu      f1:id   3 

这种花式的念念想是再构建一张hbase表,列族的列这里的name看成索引表的rowkey,笔据rowkey查询出数据hbase是很快的,拿到id后,也就拿到了原表的rowkey了,因为源表的rowkey即是id,每次查询一共需要查询两张表。

2.2 Coprocessor有计算

关连协处理器的教学,Hbase官方文档是最佳的,这里大体说一下它的作用与使用智商。

Coprocessor提供了一种机制不错让路发者平直在RegionServer上运转自界说代码来照管数据。时常咱们使用get或者scan来从Hbase中获取数据,使用Filter过滤掉不需要的部分,终末在赢得的数据上试验业务逻辑。可是当数据量非常大的时刻,这样的花式就会在收集层面上遭遇瓶颈。客户端也需要雄壮的蓄意智力和迷漫大的内存来处理这样多的数据,客户端的压力就会大大加多。可是如果使用Coprocessor,就不错将业务代码封装,并在RegionServer上运转,也即是数据在那儿,咱们就在那儿跑代码,这样就检朴了很大的数据传输的收集支出。 Coprocessor有两种:Observer和Endpoint EndPoint主如果作念一些蓄意用的,比如蓄意一些平均值或者乞降等等。而Observer的作用访佛于传统关系型数据库的触发器,在一些特定的操作之前或者之后触发。学习过Spring的一又友确定对AOP不生疏,想象一下AOP是奈何回事,就会很好的表露Observer了。Observer Coprocessor在一个特定的事件发生前或发生后触发。在事件发生前触发的Coprocessor需要重写以pre看成前缀的智商,比如prePut。在事件发生后触发的Coprocessor使用智商以post看成前缀,比如postPut。Observer Coprocessor的使用场景如下:2.1. 安全性:在试验Get或Put操作前,通过preGet或prePut智商查验是否允许该操作;2.2. 援用完整性敛迹:HBase并不屈直维持关系型数据库中的援用完整性敛迹想法,即时常所说的外键。可是咱们不错使用Coprocessor增强这种敛迹。比如笔据业务需要,咱们每次写入user表的同期也要向user_daily_attendance表中插入一条相应的记载,此时咱们不错已毕一个Coprocessor,在prePut智商中添加相应的代码已毕这种业务需求。2.3. 二级索引:不错使用Coprocessor来守护一个二级索引。恰是咱们需要的

索引遐想念念想

重要部分来了,既然Hbase并莫得提供二级索引,那怎么已毕呢?先看底下这张图

Coprocessor

咱们的需求是找出喜悦cf1:col2=c22这札记载的cf1:col1的值,已毕智商如图,率先笔据cf1:col2=c22查找到该记载的行键,然后再通过行健找到对应的cf1:col1的值。其中第二步是很容易已毕的,因为Hbase的行键是有索引的,那重要即是第一步,怎么通过cf1:col2的值找到它对应的行键。很容易意想缔造cf1:col2的映射关系,行将它们索要出来单独放在一张索引表中,原表的值看成索引表的行键,原表的行键看成索引表的值,这即是Hbase的倒排索引的念念想。

2.3 elasticsearch+hbase有计算

比如说你当今有一排数据

id name age ….30 个字段

可是你当今搜索,只需要笔据 id name age 三个字段来搜索

如果你傻乎乎的往 es 里写入一排数据总计的字段,就会导致说 70% 的数据是无须来搜索的,限度硬是占据了 es 机器上的 filesystem cache 的空间,单挑数据的数据量越大,就会导致 filesystem cahce 能缓存的数据就越少

只是只是写入 es 中要用来检索的少数几个字段就不错了,比如说,就写入 es id name age 三个字段就不错了,然后你不错把其他的字段数据存在 mysql 内部,咱们一般是建议用 es + hbase 的这样一个架构。

hbase 的特色是适用于海量数据的在线存储,即是对 hbase 不错写入海量数据,不要作念复杂的搜索,即是作念很浅陋的一些笔据 id 或者限度进行查询的这样一个操作就不错了

从 es 中笔据 name 和 age 去搜索,拿到的限度可能就 20 个 doc id,然后笔据 doc id 到 hbase 里去查询每个 doc id 对应的完整的数据,给查出来,再复返给前端。

你最佳是写入 es 的数据小于等于,或者是略略大于 es 的 filesystem cache 的内存容量

然后你从 es 检索可能就耗尽 20ms,然后再笔据 es 复返的 id 去 hbase 里查询,查 20 条数据,可能也就倏地个 30ms,可能你原本那么玩儿,1T 数据齐放 es,会每次查询齐是 5 ~ 10 秒,当今可能性能就会很高,每次查询即是 50ms。

四个字回归的话,我以为即是“各司其职”,HBase 就用来存储,ES 就用来作念索引,况且目下的实质情况跟著述中说的也很像,要查询的字段就几个,而其他的字段又很大又没用,没必要齐丢到 ES 中,奢靡查询效果

2.4 Solr+hbase有计算

Solr是一个落寞的企业级搜索应用server,它对并提供相通干Web-service的API接口。用户粗略通过http央求,向搜索引擎server提交一定时局的XML文献,生成索引。也粗略通过Http Get操作提议查找央求,并得到XML时局的复返限度。

Solr是一个高性能。採用Java5开采。基干Lucene的全文搜索server。合并时刻对其进行了延伸。提供了比Lucene更为丰富的查询话语,合并时刻已毕了可建树、可延伸并对查询性能进行了优化,而况提供了一个竣工的功能节理界面。是一款非常优秀的全文搜索引擎。

HBase力排众议领有其上风,但其自身只是对rowkey维持毫秒级的高速检索,关于多字段的组合查询却窝囊为力。基于Solr的HBase多条目查询旨趣非常easy。将HBase表中波及条目过滤的字段和rowkey在Solr中缔造索引,通过Solr的多条目查询高速赢得允洽过滤条目的rowkey值,拿到这些rowkey之后在HBASE中通过指定rowkey进行查询。

 

网上其它还有笔据Phoenix构建的,redis、mysql等齐是不错尝试的。

 






栏目分类

热点资讯

相关资讯