首页 > 其他分享 >详解MRS HBase全局二级索引

详解MRS HBase全局二级索引

时间:2023-12-26 11:03:50浏览次数:47  
标签:cf 查询 索引 详解 HBase MRS 数据 全局

本文分享自华为云社区《MRS HBase全局二级索引原理与使用场景》,作者:学习一下大数据 。

一、HBase二级索引背景介绍

HBase是基于Key-Value的分布式存储数据库,对表中的数据按照rowkey的字典进行排序;当已知要查询的数据rowkey或其范围,可以快速查找到需要读取的数据;HBase提供Filter功能来查询具有特定列值的数据,当无法确定rowkey范围时,条件查询会劣化为全表查询,表数据量较大的场景下,查询容易超时,无法满足查询时延要求。

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

二、MRS HBase二级索引原理

用户可以将定义经常查询的列定义为索引列,通过冗余存储索引列数据以达到加速查询的效果,将时间不可控的全表条件查询转换为区间条件查询,从而做到查询低时延。

MRS提供两种HBase二级索引:本地索引(HIndex)和 全局索引(GSI);两者的区别是:

详解MRS HBase全局二级索引_HBase

  • 索引数据存储方式:本地索引存储索引数据到用户表的一个单独的列族中,全局索引存储到一个索引表中(索引数据独立存储)。
  • 写入流程:本地索引一次性写入用户数据和索引数据,全局索引需要先后写入索引表和数据表。
  • 读取流程:本地索引需要读取所有region的索引+用户数据,全局索引读取索引表(覆盖查询列场景下,不经过数据表)或索引表+数据表。

MRS 3.x版本提供了HBase全局索引能力,相较于本地索引,具有的优势有:

  • 索引数据独立存储,解耦用户数据,稳定性更优
  • 索引查询链路优化,支持覆盖列(支持全覆盖),可以将经常查询的非索引列冗余存储到索引表,避免从原表获取数据,同时减少了查询过程中内部的RPC操作,在大规模数据场景下,查询性能更优

此外,全局索引还提供以下工具,用于索引的维护:

  • 索引创建/删除/状态修改工具
  • 索引数据批量构建工具
  • 索引数据一致性校验工具

三、MRS HBase全局二级索引使用场景

全局二级索引适用于以下场景:

  • 经常使用固定条件(非rowkey)查询
  • 查询时延有严格要求
  • 用户表的数据量较大(region数量较多)
  • 读多写少,对写入时延无严格要求(为保障索引数据一致性,全局索引采用分阶段式写入的方式,写入时延会有一定上升)

全局二级索引同时需要考虑,预留足够存储空间给索引表,索引数量/覆盖列/索引列越多,需要的空间越大,极限场景(全覆盖)下,与数据表大小相当。

四、MRS HBase全局二级索引设计与实战

基于HBase全局二级索引查询时,并非所有查询都能命中索引进行加速(HBase全局二级索引的使用规范详见用户手册),想要利用好索引功能,必须根据查询条件设计好索引。

以下实例展示了城市地点人流量统计功能实现,包括索引设计、查询条件等。

数据表定义

create 'city','cf',{SPLITS=>['0','1','2','3','4','5']}

rowkey定义:数据id(随机数字id,用于离散数据)

列名

含义

cf:city_id

城市id(0-9)

cf:location_id

场所id(0-9)

cf:visitors_nums

人流量数值

cf:time

时间点(整小时)

索引定义

索引名:idx_vn_time

索引字段:cf:visitors_nums+cf:time

覆盖列:全覆盖

该索引用于筛选人流量较大的地区信息

数据表查询对比

预置数据:10MB,预分区11个region,HBase集群节点3个

详解MRS HBase全局二级索引_HBase_02

查询条件1:查询人流量大于9000的地区信息

scan 'city',{COLUMN=>'cf', FILTER=>"SingleColumnValueFilter('cf','visitors_nums',>=,'binary:9000')"}

详解MRS HBase全局二级索引_二级索引_03

禁用索引后再次查询

详解MRS HBase全局二级索引_二级索引_04

查询条件2:查询2021-01-10 0点-12点,人流量大于9000的地区信息

scan 'city',{COLUMN=>'cf', FILTER=>"SingleColumnValueFilter('cf','visitors_nums',>=,'binary:9000') AND SingleColumnValueFilter('cf','time',>=,'binary:1610208000000') AND SingleColumnValueFilter('cf','time',<,'binary:1610251200000')"}

详解MRS HBase全局二级索引_二级索引_05

禁用索引后再次查询

详解MRS HBase全局二级索引_二级索引_06

可以看到,命中索引时,查询效率提升十分明显,即使在小表上,也能获得数倍的性能提升。

注:命中索引后的查询结果按索引定义排序

点击关注,第一时间了解华为云新鲜技术~

标签:cf,查询,索引,详解,HBase,MRS,数据,全局
From: https://blog.51cto.com/u_15214399/8980046

相关文章

  • Unity3D 锁帧与垂直同步的不同处详解
    Unity3D是一款强大的游戏开发引擎,而锁帧与垂直同步是其中两个重要的概念。本文将详细解释锁帧与垂直同步的不同之处,并给出相关的技术详解和代码实现。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱学习游戏的零基础小白,也有一些正在从事游戏开发的技术大佬,欢迎你来交流学习。......
  • Unity3D MVC框架和MVVM框架优缺点详解
    Unity3D是一款非常流行的游戏开发引擎,它为开发者提供了强大的工具和功能,使得开发者能够轻松地创建各种类型的游戏。在Unity3D中,使用模型-视图-控制器(MVC)框架和模型-视图-视图模型(MVVM)框架可以更好地组织和管理游戏的逻辑和界面。对啦!这里有个游戏开发交流小组里面聚集了一帮热爱......
  • 分布式协议详解
    目录1.分布式理论1.1拜占庭将军问题1.2CAP理论1.3BASE理论2.分布式算法协议3.分布式事务协议3.12PC3.23PC3.3TCC3.4本地事务表3.5MQ事务消息3.6最大努力通知1.分布式理论1.1拜占庭将军问题1.2CAP理论1.3BASE理论2.分布式算法协议3.分布式事务协议参考七......
  • Maven War 插件详解
     MavenWar插件详解转载自:https://www.jianshu.com/p/0895de58c524WAR插件负责收集Web应用程序的所有依赖项、类和资源,并将它们打包到WAR包中,仅包含scope为compile+runtime的依赖项,默认绑定到package阶段。详情请参考:https://maven.apache.org/plugins/maven-w......
  • C++ Qt开发:Charts绘制各类图表详解
    Qt是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍TreeWidget与QCharts的常用方法及灵活运用。在之前的文章中笔者介绍了如何使用QCharts模块来绘制......
  • 【计算机网络中的CSMA/CD协议详解】
    (文章目录)什么是CSMA/CD协议?CSMA/CD协议是一种多路访问协议,用于以太网(Ethernet)局域网中。它的主要目的是确保多个计算机可以共享同一物理介质(例如,同一网络电缆)进行数据通信,而不会发生碰撞,从而导致数据包损坏。CSMA/CD的工作原理载波监听(CarrierSense):计算机在发送数据之前......
  • JMeter对数据库的查询操作步骤详解
    提示:关于JMeter如何连接MySQL数据库,前面文章已经详解的讲解过了。因为配置数据库连接是比较固定的步骤,这里就不重复讲解了。本篇文章主要详细说明,使用JDBCRequest组件,如何对数据库进行查询的各种操作。JMeter中查询语句的操作步骤:添加测试计划。添加线程组,设置线程组的次数。添加J......
  • Python中selenium库的用法详解
    selenium主要是用来做自动化测试,支持多种浏览器,爬虫中主要用来解决JavaScript渲染问题。模拟浏览器进行网页加载,当requests,urllib无法正常获取网页内容的时候一、声明浏览器对象注意点一,Python文件名或者包名不要命名为selenium,会导致无法导入fromseleniumimportwebdriver#web......
  • python中的unittest框架实例详解
    在python中我们学习了不少理论知识,那么对相关的程序进行测试,就显得很重要了。本篇要讲的是unittest框架,我们可以用它来做一些测试工作,又或者是相关代码的编写。下面我们就unittest框架的说明、特性和4种字模块分别带来介绍,大家一起来看具体内容。1.unittest说明unittest是Python自......
  • AI分布式训练:DDP (数据并行)技术详解与实战
    分布式训练:DDP(数据并行)技术详解与实战一、背景介绍什么是AI分布式训练分布式训练作为一种高效的训练方法,在机器学习领域中得到了广泛的应用和关注。而其中的一种技术,就是数据并行(DDP)。在本节中,我们将详细介绍什么是AI分布式训练,并重点讨论了数据并行技术的原理和实施方式。我们将......