10|不支持二级索引,如何自己实现一个?
彭旭
你好,我是彭旭。
上节课我们讲了 HBase 实现高性能实时随机存取的过程,但是,还没有讲到索引。事实上,索引是保障数据读取性能的最基本手段。
我们知道,HBase 的数据是按行键字典序排序的,所以行键就是 HBase 最天然、最有效的索引。通过行键的读取是最高效的。
但是,HBase 除了行键这个索引之外,竟然不支持二级索引。
为什么单独提到二级索引这件事呢?
在我们的云服务场景中有一个联系人数据表,行键是“用户 ID 反转 + 时间戳”,当你需要用手机号或者联系人姓名查询时,就需要扫描全部联系人数据,然后再一条条地过滤、匹配手机号或者联系人。这样是不是性能可能又不好了?
所以,这节课,我们就看一下在 HBase 中,在需要支持多个条件筛选的场景下,如何自己实现一个二级索引来提升性能。在这个过程中,我还会引入一个叫做协处理器的组件。希望在学完这一讲以后,你也能掌握这个知识点。
如何用行键实现组合索引?
在我们的例子中,如果用户 ID 在每次查询时都是必填项,那么有一个稍简单一些的方法,就是我们简单改变一下行键的组成,利用行键来实现一个类似关系型数据库的多字段组合索引。
我们在设计 HBase 行键的时候,除了考虑怎样合适地划分分区外,还要把查询的条件字段尽可能地融入到行键里。如果例子中的所有场景都是基于用户 ID 加上手机号查询数据,那么行键设计可以是图片里的样子。
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
- 深入了解
- 翻译
- 解释
- 总结
1. HBase的数据按行键字典序排序,行键是最天然、最有效的索引,但HBase不支持二级索引。 2. 利用行键实现类似关系型数据库的多字段组合索引,通过行键的前缀匹配提高查询效率。 3. 可以通过构建从姓名到用户联系人表行键的映射关系来实现HBase的二级索引,利用协处理器在HBase上构建表的二级索引。 4. HBase的协处理器分为观察者类型和端点类型,提供各种回调函数,在方法执行前后触发,类似于AOP切面或数据库的触发器。 5. 通过协处理器的prePut方法,在数据写入前构建索引表数据,可以实现在s_contact表写入数据时同时写入索引表的逻辑。 6. 设计行键时需考虑分区和表数据的使用场景,将查询时用到的条件字段融入行键,以实现精准定位数据行。 7. HBase只支持行键的索引,但有多种方法解决需要涉及二级索引的需求。 8. HBase协处理器提供了在服务端能力扩展的接口,如实现二级索引、数据校验与验证、数据的安全性管理等。 9. 可以通过协处理器在服务端对数据进行处理,减少在网络上传输的数据。 10. 优化方案:考虑数据的分区,使数据表与索引表采用相同的分区策略,以减少对查询性能的负面影响。
仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《分布式数据库从入门到实战》,新⼈⾸单¥59
《分布式数据库从入门到实战》,新⼈⾸单¥59
立即购买
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
登录 后留言
精选留言
由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论