分布式数据库从入门到实战
彭旭
惟客数据总架构师
1070 人已学习
新⼈⾸单¥59
分布式数据库从入门到实战
15
15
1.0x
00:00/00:00
登录|注册

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
立即购买
登录 后留言

精选留言

由作者筛选后的优质留言将会公开显示,欢迎踊跃留言。
收起评论
显示
设置
留言
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部
文章页面操作
MAC
windows
作用
esc
esc
退出沉浸式阅读
shift + f
f11
进入/退出沉浸式
command + ⬆️
home
滚动到页面顶部
command + ⬇️
end
滚动到页面底部
⬅️ (仅针对订阅)
⬅️ (仅针对订阅)
上一篇
➡️ (仅针对订阅)
➡️ (仅针对订阅)
下一篇
command + j
page up
向下滚动一屏
command + k
page down
向上滚动一屏
p
p
音频播放/暂停
j
j
向下滚动一点
k
k
向上滚动一点
空格
空格
向下滚动一屏
播放器操作
MAC
windows
作用
esc
esc
退出全屏
⬅️
⬅️
快退
➡️
➡️
快进
空格
空格
视频播放/暂停(视频全屏时生效)