hbase--索引概念(含二级索引)
1、索引概念
- 举例
一本新华字典,从里面找一个字
有索引:这本新华字典有拼音检索的目录,可以按照拼音找字
没有索引:没有目录,一页一页翻来找这个字
- 问题
Hbase中rowkey是唯一索引
- 假设:rowkey设计:时间_用户id
20200101_001
20200101_002
20200102_002
20200103_003
……
- 走索引的查询
根据日期查询
- 查询2020年数据
根据日期和用户id
- 查询20200101,002的数据
- 需求:
查询002所有的数据
- 只知道用户的id,怎么查询?
- 全表扫描
- 对所有数据的用户id进行过滤,将用户id=002的数据过滤出来
- SingleColumnValueFilter
性能非常差
- 只要查询的 条件不是rowkey的前缀,就只能走全表扫描
- 解决
- 构建二级索引
一级索引:rowkey
二级索引:通过二级索引找到需要的一级索引
2、二级索引
- 需求:查询002所有的数据
- 举例
- 原表:用于存储数据
- rowkey的设计:时间_用户id
- 原表:用于存储数据
rowkey userid serverTime username ip url ……
20200101_001 001 20200101
20200101_002 002 20200101
20200102_002 002 20200102
20200103_003 003 20200103
20200104_004 004 20200104
……
- rowkey是唯一索引
- 全表扫描
- 对所有的rowkey的userid这一列进行比较
- 如果是002,就返回
- 不是就过滤
- 索引表:用于存储原表的rowkey的
- 二级索引表
- rowkey:用户id_时间
rowkey source_rk
001_20200101 20200101_001
002_20200101 20200101_002
002_20200102 20200102_002
003_20200103 20200103_003
二级索引检索过程
- 第一步:
先检索索引表,根据用户id,得到所有符合的原表的rowkey
- 走索引
- 根据前缀匹配返回两条
002_20200101 20200101_002
002_20200102 20200102_002
- 第二步:再根据原表的rowkey到原表中进行查询
- 走索引
20200101_002 002 20200101
20200102_002 002 20200102
- 功能:
基于一级索引构建二级索引,加快读取数据的速度
- 应用场景:将不能满足rowkey前缀查询的条件作为索引表的rowkey,走两次索引来实现数据查询
解决有些条件不在rowkey中或者不是前缀,依旧希望查询比较快
问题:原表数据如何与索引表保持一致,实现数据同步?
- 如果不同步,查询结果就是不准确的
- 问题举例
- 原表:有004用户的数据
- 索引表:没有这个映射关系
- 通过二级索引查询:没有004的数据
- 解决方案
- 往Hbase中写入数据都是通过程序来处理的
- 方案一:在客户端程序中往原表中插入数据以后,往索引也插入一条
- 可以实现
- 但是性能非常差:客户端本来只要写一条数据,但是提交了两个写入请求
- 一般不用
- 方案二:
使用Hbase的协处理器来实现
类似于UDF或者Mysql触发器
开发一个程序,监听原表,只要用户往原表中写入数据,Hbase就自动往索引表写入一条数据
- 方案三:使用第三方工具实现【主要】
- ==Phoenix:==在底层封装了 大量的Hbase的协处理器,不用你自己开发
你可以用SQL写:create index - 自动帮你创建一张索引表,自动帮你维护数据同步
- ES:ELK中的搜索引擎,可以构建索引
- Solr:也是搜索引擎
总结
Rowkey的设计
业务原则
:必须非常贴合业务设计rowkey唯一原则
:每个rowkey唯一标识一行组合原则
:将查询频率比较高的查询条件封装组合成rowkey
- 可以利用rowkey进行索引查询
散列原则
:构建随机散列的rowkey,避免有序的rowkey
- region的范围就是有序的,如果rowkey也是有序的写入,就会写入同一个region,导致热点
长度原则
:满足业务需求的情况下,越短越好
- rowkey的存储是冗余的,在底层检索时,需要进行比较
- 列族的设计
- 长度原则
- 个数原则:不建议超过3个
- 列标签
- 标识性
预分区
- 先设计rowkey
- 根据rowkey的格式来进行预分区创建表
二级索引
- 什么是二级索引?
- 基于一级索引之上构建一层索引
- 为什么要构建二级索引?
- 因为
Hbase中rowkey是唯一的索引,并且只能做前缀匹配
- 在查询时,如果查询的条件不是rowkey的前缀,只能全表扫描,性能比较差
可以构建二级索引,经过两次索引来解决查询性能问题
- 因为
hbase--索引概念(含二级索引)相关推荐
- Hbase索引( Phoenix二级索引)
Hbase索引( Phoenix二级索引) 1. Phoenix简介 1.1.Phoenix安装 1.2.常用命令 1.3.phoenix表映射 1.3.1.视图映射 1.3.2.表映射 1.3.3. ...
- HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引
1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...
- hbase基于solr配置二级索引
一.概述 Hbase适用于大表的存储,通过单一的RowKey查询虽然能快速查询,但是对于复杂查询,尤其分页.查询总数等,实现方案浪费计算资源,所以可以针对hbase数据创建二级索引(Hbase Sec ...
- HBase 集成 Phoenix 构建二级索引实践
Phoenix 在 HBase 生态系统中占据了非常重要的地位,本文主要包括以下几方面内容: Phoenix 介绍 CDH HBase 集成 Phoenix 使用 Phoenix 创建 HBase 二 ...
- MySQL的一级索引和二级索引介绍,HBase中提到的二级索引【笔记自用】
1.一级索引 索引和数据存储在一起,都存储在同一个B+tree中的叶子节点.一般主键索引都是一级索引. 2.二级索引 二级索引树的叶子节点存储的是主键而不是数据.也就是说,在找到索引后,得到对应的主键 ...
- java分词器和索引器_solr-hbase二级索引及查询解决方案(一)
solr-hbase二级索引及查询解决方案(一) 发布时间:2018-02-28 21:41, 浏览次数:636 , 标签: solr hbase 最近要搞一个查询功能,是把hbase中的数据方便的查 ...
- mysql优化器怎么选择索引,为什么MySQL查询优化器会选择聚集主索引上的二级索引?...
为什么Mysql优化器在执行'select * from lookup'而没有order by子句时选择二级索引. 它只是一个侥幸,或者这是一个幕后优化,假设你添加了一个二级索引,它比主键更重要. 我 ...
- DynamoDB系列之--本地二级索引
DynamoDB有2种类型的索引:本地二级索引和全局二级索引,那么本地二级索引是什么,它有什么作用呢?今天我们就来一起聊聊DynamoDB的本地二级索引 概念 本地二级索引本质上是一种数据结构(类同于 ...
- 阿里云EMR异步构建云HBase二级索引
一.非HA EMR构建二级索引 云HBase借助Phoenix实现二级索引功能,对于Phoenix二级索引的详细介绍可参考https://yq.aliyun.com/articles/536850?s ...
- hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案
HBase一个令人惋惜的地方,就是不支持二级索引.因此,社区有了很多补充方案来填补HBase的二级索引能力的缺陷. 今天,我们就来看看有哪些二级索引方案,通过对比各个方案的优缺点,并结合我们的具体场景 ...
最新文章
- 涉密文件检查工具_肇庆高要销毁资料文件公司粉碎销毁文件资料公司欢迎您
- R可视化ggplot2绘制重叠密度图(Overlay Density Plots)
- 多维分析中的 UV 与 PV
- css3 text-shadow 为网页字体添加阴影
- 从MVC到云原生:CBU研发体系演进之路
- 2020年全国普通高校毕业生874万,同比增加40万人。我们该何去何从?
- 用画小狗的方法来解释Java中的值传递
- react生命周期函数_如何优雅的消灭掉react生命周期函数
- bzoj3110树套树
- 输电线路巡检机器人PPT_国网泰安供电公司开展输电线路无人机精细化巡检
- git 操作的时候总是要输入账号和密码
- Adobe Reader 8 简体中文版最新版本
- [数据结构]《数据结构教程》多语言微课版创作计划
- 惠普重新定义IT基础设施
- 【工具】URLEncode
- 国庆日快到啦!国庆版头像来了!总有一款适合你!
- vue2 卸载 uninstall vue-meta 报错 up to date, audited 1389 packages in 10s 96 packages are looking for
- Uniapp——拨打电话、发送短信
- driver nvidia web_nvidiawebdriver驱动
- 远程开机并不难 用开机棒轻松打开局域网多台电脑