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--索引概念(含二级索引)相关推荐

  1. Hbase索引( Phoenix二级索引)

    Hbase索引( Phoenix二级索引) 1. Phoenix简介 1.1.Phoenix安装 1.2.常用命令 1.3.phoenix表映射 1.3.1.视图映射 1.3.2.表映射 1.3.3. ...

  2. HBase建表高级属性,hbase应用案例看行键设计,HBase和mapreduce结合,从Hbase中读取数据、分析,写入hdfs,从hdfs中读取数据写入Hbase,协处理器和二级索引

    1. Hbase高级应用 1.1建表高级属性 下面几个shell 命令在hbase操作中可以起到很到的作用,且主要体现在建表的过程中,看下面几个create 属性 1. BLOOMFILTER 默认是 ...

  3. hbase基于solr配置二级索引

    一.概述 Hbase适用于大表的存储,通过单一的RowKey查询虽然能快速查询,但是对于复杂查询,尤其分页.查询总数等,实现方案浪费计算资源,所以可以针对hbase数据创建二级索引(Hbase Sec ...

  4. HBase 集成 Phoenix 构建二级索引实践

    Phoenix 在 HBase 生态系统中占据了非常重要的地位,本文主要包括以下几方面内容: Phoenix 介绍 CDH HBase 集成 Phoenix 使用 Phoenix 创建 HBase 二 ...

  5. MySQL的一级索引和二级索引介绍,HBase中提到的二级索引【笔记自用】

    1.一级索引 索引和数据存储在一起,都存储在同一个B+tree中的叶子节点.一般主键索引都是一级索引. 2.二级索引 二级索引树的叶子节点存储的是主键而不是数据.也就是说,在找到索引后,得到对应的主键 ...

  6. java分词器和索引器_solr-hbase二级索引及查询解决方案(一)

    solr-hbase二级索引及查询解决方案(一) 发布时间:2018-02-28 21:41, 浏览次数:636 , 标签: solr hbase 最近要搞一个查询功能,是把hbase中的数据方便的查 ...

  7. mysql优化器怎么选择索引,为什么MySQL查询优化器会选择聚集主索引上的二级索引?...

    为什么Mysql优化器在执行'select * from lookup'而没有order by子句时选择二级索引. 它只是一个侥幸,或者这是一个幕后优化,假设你添加了一个二级索引,它比主键更重要. 我 ...

  8. DynamoDB系列之--本地二级索引

    DynamoDB有2种类型的索引:本地二级索引和全局二级索引,那么本地二级索引是什么,它有什么作用呢?今天我们就来一起聊聊DynamoDB的本地二级索引 概念 本地二级索引本质上是一种数据结构(类同于 ...

  9. 阿里云EMR异步构建云HBase二级索引

    一.非HA EMR构建二级索引 云HBase借助Phoenix实现二级索引功能,对于Phoenix二级索引的详细介绍可参考https://yq.aliyun.com/articles/536850?s ...

  10. hbase组合rowkey_「从零单排HBase 11」HBase二级索引解决方案

    HBase一个令人惋惜的地方,就是不支持二级索引.因此,社区有了很多补充方案来填补HBase的二级索引能力的缺陷. 今天,我们就来看看有哪些二级索引方案,通过对比各个方案的优缺点,并结合我们的具体场景 ...

最新文章

  1. 涉密文件检查工具_肇庆高要销毁资料文件公司粉碎销毁文件资料公司欢迎您
  2. R可视化ggplot2绘制重叠密度图(Overlay Density Plots)
  3. 多维分析中的 UV 与 PV
  4. css3 text-shadow 为网页字体添加阴影
  5. 从MVC到云原生:CBU研发体系演进之路
  6. 2020年全国普通高校毕业生874万,同比增加40万人。我们该何去何从?
  7. 用画小狗的方法来解释Java中的值传递
  8. react生命周期函数_如何优雅的消灭掉react生命周期函数
  9. bzoj3110树套树
  10. 输电线路巡检机器人PPT_国网泰安供电公司开展输电线路无人机精细化巡检
  11. git 操作的时候总是要输入账号和密码
  12. Adobe Reader 8 简体中文版最新版本
  13. [数据结构]《数据结构教程》多语言微课版创作计划
  14. 惠普重新定义IT基础设施
  15. 【工具】URLEncode
  16. 国庆日快到啦!国庆版头像来了!总有一款适合你!
  17. vue2 卸载 uninstall vue-meta 报错 up to date, audited 1389 packages in 10s 96 packages are looking for
  18. Uniapp——拨打电话、发送短信
  19. driver nvidia web_nvidiawebdriver驱动
  20. 远程开机并不难 用开机棒轻松打开局域网多台电脑

热门文章

  1. visual studio 各版本 激活码
  2. ps|grep命令详解
  3. f1c100linux系统吗,全志F1C100s怎么样 F1C100s芯片参数介绍
  4. Chapter Three : Python 序列之字符串操作详解
  5. 软件测试员工自述,软件测试人员的述职报告.docx
  6. iOS 多线程面试题
  7. Springboot + Quartz 实现分布式定时任务集群
  8. 商业模式画布 - 天涯的日志 - 网易博客
  9. 罗辑思维:怎么样成为一个高手 文字版
  10. python百度贴吧发帖签到_Python实例 | 贴吧签到