HBase二级索引的设计与应用(详解)

ES整合HBase实现二级索引 前言; es整合hbase实现二级索引的目的,只要是因为hbase不具备全文检索,只有rowkey是全局的唯一标识,在大量数据的前提下,想要根据字段进行检索,没办法利用rowkey就会出现效率低下的情况.刚好es具备全文检索的优良传统,两个优秀的框架注定是要擦出点火花来的. 设计思想: 在es中存储标题,在hbase 中存储正文 实现思路: 1.使用代码解析excel,读取excel的内容 2.将... 阅读详情

最近面试,涉及到了HBase的多条件组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowKey中显然不太可能),或者全表扫描再结合过滤器筛选出目标数据(太低效),所以通过设计HBase的二级索引来解决这个问题。

查询需求

多个查询条件构成了多维度的组合查询,需要根据不同组合查询出符合条件的数据。

HBase的局限性

HBase本身只提供基于行键和全表扫描的查询,而行键索引单一,对于多维度的查询困难(如:对于价格+天数+酒店+交通的多条件组合查询困难),全表扫描效率低下。

二级索引的设计

                                         (图1)设计思路

二级索引的本质就是建立各列值与行键之间的映射关系

如(图1),当要对F:C1这列建立索引时,只需要建立F:C1各列值到其对应行键的映射关系,如C11->RK1等,这样就完成了对F:C1列值的二级索引的构建,当要查询符合F:C1=C11对应的F:C2的列值时(即根据C1=C11来查询C2的值,图1青色部分)

其查询步骤如下:

1. 根据C1=C11到索引数据中查找其对应的RK,查询得到其对应的RK=RK1

2. 得到RK1后就自然能根据RK1来查询C2的值了 这是构建二级索引大概思路,其他组合查询的联合索引的建立也类似。

逻辑视图

                                                                        (图2) 部分数据在HBase中存储的逻辑视图

表中有两个列族,其中一个是列族INDEX,其并不存储任何的数据,仅仅是为了将索引数据与主数据分开存储(因为在HBase中同一列族的数据会被压缩在一起存储),索引数据的行键格式为:RegionStartKey-索引名-索引键-Rowkwy,其他RegionStartKey就是出发点,因为在创建HBase表时就对表根据出发点进行了预分区,索引键为主数据中某列(可能是多列)的列值,Rowkey对应主数据的行键;主数据的行键格式为:出发点-目的地-性价比,所以在存储数据时,同一出发点 目的地的数据默认是按性价比排序的;索引数据的行键和主数据的行键的前缀都是出发点,所以在存储时相同出发点的索引数据和主数据是存储在同一个Region中的,这样避免了在通过索引得到RK后又去其他Region上查询目标数据,提高了查询效率。

数据的查询过程

假设查询的条件:

  • 出发点:澳门

  • 目的地:杭州

  • 出游天数:3天

  • 酒店等级:4

其查询步骤如下:

  1. 首先根据查询条件来确定索引名,根据其查询条件为出游天数据 酒店等级确定索引名为aaa,这样就将查询的范围缩小在索引名为aaa的索引数据区内

  2. 根据出游天数的值为3天,酒店等级的值为4,结合Phoenix的模糊查询就能确定符合这两个查询条件的索引数据的行键

  3. 得到索引数据行键后就截取其最后的RowKey

  4. 最关键的Rowkey得到后就能轻易的获得其对应的列值了,整个查询过程就结束了。

对于其他更为复杂的组合查询的二级索引设计如类似。

  • 当用户put操作时,会将原rowkey,转换为新的rowkey,再存一份索引。
  • 当用户get操作时,会将rowkey映射为实际的rowkey,再根据实际的rowkey获取实际的结果。
  • 当用户执行scanner操作时,会将scanner的结果映射为实际rowkey的结果,返回给用户。

通过hbase的BaseRegionObserver 协处理器,可以封装处理很多hbase操作。



作者:wingoom
链接:https://www.jianshu.com/p/194b982571fa
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

缺点

需要额外的存储空间,属 一种以空间换时间的方式。

注意

1.将查询条件中的可选字段转换成数字能节省存储空间,如交通工具中的飞机,高铁,火车,轮船,汽车分别转换成5,4,3,2,1

2.将汉字转换成拼音才能保证数据按HBase的排序规则排序

3.如果数据量在百万级别以下可使用Phoenix(HBase的SQL查询引擎)模糊查询功能减少索引行键的设计

HBase二级索引原理与代码实例讲解 HBase二级索引原理与代码实例讲解 1. 背景介绍 1.1 问题的由来 在大数据时代,海量数据存储成为了企业级应用的关键需求。HBase作为一种基于Google Bigtable的列式存储数据库,凭借其高可扩展性、高性能以及支持分布式部署 阅读详情

相关推荐

STM32 烧录报错Invalid ROM Table

STM32 烧录报错Invalid ROM Table

热爱科技,物联,程序开发等 1731

Hbase 二级索引

Hbase 使用二级索引原因: 目前 HBase 主要应用在结构化和半结构化的大数据存储上,其在插入和读取上都具有极高的性能表现,这与它的数据组织方式有着密切的关系,在逻辑上,HBase 的表数据按RowKey 进行字典排序, RowKey 实际上是数据表的一级索引(Primary Index),由于HBase 本身没有二级索引(Secondary Index)机制,基于索引检索...

fwk19840301的博客 1196

Arduino程序设计(十)8×8 共阴极LED点阵显示(MAX7219)

本文主要介绍8×8 LED点阵显示实验,分别是:1、介绍MAX7219点阵模块;2、点阵显示部分图形;3、点阵显示数字 0~9 及 26 个英文字母。1、通过上述两个点阵实验,了解了8*8点阵显示的基本原理;2、通过SPI通信控制点阵显示,学会了Arduino用SPI通信方式控制外设。

Alice的博客 1万+

Hbase中的二级索引

Hbase中的二级索引 一、什么是索引 索引是一种数据结构,为了加速查询! HBase中的一级索引指,数据在写入region时,会根据rowkey进行排序后写入,之后regionserver在加载region时,会自动为当前region的rowkey创建一个LSM树的索引!方便对当前region,rowkey的查询! HBase 里面只有 rowkey 作为一级索引, 如果要对库里的非 rowkey 字段进行数据检索和查询, 往往要通过 MapReduce/Spark 等分布式计算框架进行,硬件资源消

weixin_42796403的博客 4418

Eclipse 数据空间组件(EDC)项目介绍

在当今数字经济的背景下,数据成为了新的“石油”。但与石油不同的是,数据可以无限共享且再生。然而,如何在保持数据主权的前提下实现高效、安全的数据共享,成为了企业和组织面临的主要挑战。这时,**Eclipse 数据空间组件(Eclipse Dataspace Components, EDC)**应运而生,它为企业在多方参与的数据交换中提供了一个标准化、可扩展的解决方案。数据空间不仅是一个多组织间的数据共享协议,还是一套支撑这些协议运行的技术基础设施。

m0_74331272的博客 4596

JMeter 压测实战全教程

脚本结构:测试计划 → 线程组 → HTTP 请求 → 监听器运行方式:图形化调试,命令行生产压测核心指标:QPS、RT、错误率、CPU、GC。

weixin_48309090的博客 650

Hbase二级索引

HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowKey中显然不太可能),或者全表扫描再结合过滤器筛选出目标数据(太低效),所以通过设计HBase的二级索引来解决这个问题。 多个查询条件构成了多维度的组合查询,需要根据不同组合查询出符合条件的数据。 例如: 按照电影维度查询数据适合,但是按照uid就不适合 , 使用二级索引分两步查询实现高效获取数据,因为两次都是通过ROWKEY查询的数据 创建代码实现 思路 在插入数据的时候 , 如果遇到uid属性...

mrye的博客 1683

【ESP32】SPI SRAM memory test fail。External RAM failed memory test!

log日志报错如下:这两条报错信息表明外部 SPI SRAM(静态随机存取存储器)的内存测试失败。

weixin_56217406的博客 1024

上帝视角Hbase二级索引方案全解析

点击上方蓝色字体,选择“设为星标”回复”面试“获取更多惊喜什么是二级索引Coprocessor协处理器类型Coprocessor方案(Phoenix等)Phoenix二级索引特点非Copr...

微信搜:import_bigdata,大数据领域硬核原创作者 3197

数学建模更新10(蒙特卡罗模拟)

蒙特卡罗模拟一.目录二.引例1:布丰投针实验1.投针步骤2.思路3. 历史实验者二.蒙特卡罗模拟概述1.定义2.提出3.原理4.讨论三.应用实例1.三门问题【1】问题【2】代码2.模拟排队问题【1】题目【2】引入参数【3】总结题目信息【4】过程可视化【5】一些推导公式【6】代码3.有约束的非线性规划问题【1】问题的分类【2】例子【3】推导过程【4】代码 一.目录 二.引例1:布丰投针实验 1.投针步骤 步骤: 1:取一张白纸,在上面画出许多条间距为a的平行线 2:去一根长度为l的针,随机的向纸张上投掷n次

沉晨尘宸的博客 3039

基于 ESP32 的智能药盒提醒装置设计与实现

本装置基于 ESP32 实现了智能药盒的核心功能,硬件选型兼顾成本与实用性,软件设计模块化、易拓展。后续可通过 ESP32 的 WiFi 模块接入物联网平台(如阿里云、OneNet),实现远程设置提醒、服药状态反馈等功能,进一步提升智能化水平。该装置能有效解决老人忘服药问题,具有较高的实用价值与推广潜力。

weixin_42300449的博客 1042

HBase二级索引方案

01 HBase简介 HBase是一个构建在HDFS之上,用于海量数据存储分布式列存储系统。 参见下图,由于在HBase中: 表的每行都是按照RowKey的字典序排序存储表的数据是按照RowKey区间进行分割存储成多个region 所以HBase主要适用下面这两种常见场景: 适用于基于rowkey的单行数据快速随机读写适合基于rowkey前缀的范围扫描 02 为什么需要HB...

沧海一粟的博客 1万+

Python爬虫:爬取拼多多平台商品信息、销量、价格等数据

在本篇博客中,我们将深入探讨如何使用Python爬虫技术爬取拼多多平台的商品信息,包括商品的标题、销量、价格等详细数据。拼多多的商品页面通常是分页展示的,因此我们需要遍历多个页面,获取所有商品的信息。每个商品在拼多多平台上都有一个唯一的商品ID,我们可以通过该ID访问商品页面。通过以上的技术方案和代码示例,你已经掌握了如何使用Python爬虫获取拼多多平台上的商品信息、销量、价格等数据。等技术,解决拼多多平台的反爬虫机制,成功抓取我们所需的商品数据。,我们能够应对拼多多的反爬虫机制,稳定地获取到商品数据。

2201_76125261的博客 3654

详解MRS HBase全局二级索引

与结构化数据库相似,HBase二级索引就是为了提升此类条件查询场景性能:查询条件无法精确/模糊匹配rowkey(类似于DB主键),同时严格要求查询时延。

华为云官方博客 2417

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

HBase 的二级索引和配置实现

HBase 原生不支持二级索引,但通过倒排索引、协处理器或者借助 Apache Phoenix,可以实现二级索引。不同的实现方式各有优缺点,适合不同的业务场景。倒排索引实现简单,但需要额外的存储空间和更新开销;协处理器提供了更加灵活和高效的服务器端解决方案,但需要一定的开发和维护成本;而 Phoenix 则提供了简单的 SQL 接口,适合轻量级开发场景。通过合理设计和优化二级索引,可以显著提升 HBase 的查询效率,满足多维度数据检索的需求。

goTsHgo的博客 1908

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Hbase的二级索引和RowKey的设计

Hbase查询简介 Hbase查询的时候,有以下几种方式: • 通过 rowkey方式,指定 获取唯一记录 • 通过 scan方式,设置satrtRow 和stopRow 参数进行范围匹配(模糊查询) • 全表扫描,即直接扫描整张表中所有行记录 HBase里面只有rowkey作为一级索引 Hbase的scan,不走主键索引,而是全表扫描,性能奇差。 为了HBase的数据查询更高效、适应更多的场景, 诸如使用非rowkey字段检索也能做到秒级响应,或者支持各个字段进行模糊查询和多字段组合查询等,

数据与算法架构提升之路专栏 2512

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Hbase二级索引_Hive on Hbase 及phoenix详解

文章目录Hbase二级索引_Hive on Hbase 及phoenix详解知识点02:课程目标知识点03:SQL on Hbase知识点04:Hive on Hbase 介绍知识点05:Hive on Hbase 配置知识点06:Hive on Hbase 实现知识点07:二级索引问题知识点08:Phoenix的介绍知识点09:Phoenix的安装配置知识点10:Phoenix的语法:DDL:NS知识点11:Phoenix的语法:DDL:Table知识点12:Phoenix的语法:DML:upsert知识

Maynor的博客 1568

HBase二级索引的设计与应用

HBase的多条件组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowKey中显然不太可能),或者全表扫描再结合过滤器筛选出目标数据(太低效),所以通过设计HBase的二级索引来解决这个问题。查询需求多个查询条件构成了多维度的组合查询,需要根据不同组合查询出符合条件的数据。HBase的局限...

xiaoyaGrace的博客 364

HBase系列(七)二级索引

HBase二级索引为何需要HBase索引?二级索与原理是什么?如何设计二级索引?基于Coprocessor方案Phoenix二级索引方案非Coprocessor方案ES 二级索引方案 为何需要HBase索引? HBase里面只有rowkey作为一级索引, 如果要对库里的非rowkey字段进行数据检索和查询, 往往要通过MapReduce/Spark等分布式计算框架进行,硬件资源消耗和时间延迟都会比较高。 为了HBase的数据查询更高效、适应更多的场景, 诸如使用非rowkey字段检索也能做到秒级响应,或者支

Wei_HHH的博客 1402

Hbase构建二级索引的一些解决方案

hbase构建二级索引1 为什么需要二级索引HBase的一级索引就是rowkey,我们仅仅能通过rowkey进行检索。假设我们相对Hbase里面列族的列列进行一些组合查询,就只能全表扫描了...

大数据技术派 3602

HBase二级索引的设计

摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowKey中显然不太可能),或者全表扫描再结合过滤器筛选出目标数据(太低效),所以通过设计HBase的二级索引来解决这个问题 查询需求 多个查询条件构成多维度的组合查询,需要根据不同组合查询出符合查询条件的数据 HBase的局限性 HBase本身只提供基于行键和全表扫描的查询,而行键索引单一,对于多维度

思考、总结、专注 384
上一篇: Spark广播变量和累加器详解
下一篇: hbase热点问题(数据倾斜)解决方案---rowkey散列和预分区设计
那记忆微凉
博客等级 码龄9年 412粉丝 387原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值