Hbas简介:数据模型和概念、物理视图

文章目录

  • 说明
  • 零 BigTable
  • 一 Hbase简介
  • 二 HBase 访问接口简介
  • 三 行式&列式存储
  • 四 HBase 数据模型
    • 4.1 HBase 列族数据模型
    • 4.2 数据模型的相关概念
    • 4.3 数据坐标
  • 五 概念&物理视图

说明

  • 本文参考自林子雨老师的大数据技术原理与应用(第三版)教材内容,仅供学习和交流

零 BigTable

  • Google Bigtable是一种高度可扩展的分布式数据库,旨在处理海量数据并提供高吞吐量和低延迟的访问。它是谷歌公司为其内部使用而开发的,并在2004年首次公开发表。

  • 它利用谷歌提出的 MapReduce 分布式并行计算模型来处理海量数据使用谷歌分布式文件系统 GFS 作为其底层数据存储方式,通过自动分片和负载均衡来实现数据在集群中的分布和访问,并采用 Chubby 提供协同管理服务,可以扩展到 PB 级别的数据和上千台机器,具备 广泛应用性、可扩展性、高性能和高可用性 等特点。

  • Bigtable还提供了强大的数据一致性和持久性保证。数据在写入时会被复制到多个地理位置的存储节点,以确保数据的可靠性和冗余备份。此外,Bigtable还支持强一致性和事务操作,使得应用程序可以进行复杂的数据操作和查询。

  • Google Bigtable是一种高度可扩展、具有高性能和可靠性的分布式数据库,适用于处理大规模数据集和高并发访问的场景。 BigTable 具备以下特性:支持大规模海量数据,分布式并发数据处理效率极高,易于扩展且支持动态伸缩,适用于廉价设备,适合读操作不适合写操作。

一 Hbase简介

  • HBase 是谷歌 BigTable 的开源实现,是一个高可靠、高性能、面向列、可伸缩的分布式非关系型数据库,主要用来存储非结构化和半结构化的松散数据,并提供高吞吐量和低延迟的数据访问能力。

  • HBase的架构是基于Hadoop生态系统的,它使用HDFS作为底层存储系统;并利用 Hadoop MapReduce来处理 HBase 中的海量数据,实现高性能计算;利用 ZooKeeper 作为协同服务,实现稳定服务和失败恢复。

  • Sqoop 为 HBase 提供了高效、便捷的关系数据库管理系统(Relational DataBase Management System,RDBMS)数据导人功能,Pig 和 Hive为 HBase 提供了高层语言支持。
    在这里插入图片描述

  • HBase 和 BigTable 的底层技术对应关系

项目BigTableHBase
文件存储系统GFSHDFS
海量数据处理MapReduceHadoop
协同服务管理ChubbyZooKeeper

二 HBase 访问接口简介

  • HBase 提供了 Native Java API、HBase Shell、Thrift Gateway、REST Gateway、Pig、Hive 等多种访问方式
类型特点使用场合
Native Java API常规和高效的访问方式适合 Hadoop MapReduce 作业并行批处理 HBase 表数据
HBase ShellHBase 的命令行工具,最简单的接口适合 HBase 管理
Thrift Gateway利用 Thrift 序列化技术,支持 C++、PHP、Python 等多种语言适合其他异构系统在线访问 HBase 表数据
REST Gateway解除语言限制支持 REST 风格的 HTTP API 访问 HBase
Pig使用 Pig Latin 流式编程语言来处理HBase 中的数据适合数据统计
Hive简单以类似 SQL 的方式来访问 HBase

三 行式&列式存储

  • 传统的关系数据库采用的是面向行的存储,被称为“行式数据库”。而HBase 是面向列的存储,也就是说,HBase 是一个“列式数据库”。
    在这里插入图片描述
  • 行式数据库使用行存储模型(N-ary Storage Model,NSM),一个元组(或行)会被连续地存储在磁盘页中。数据是一行一行被存储的,第一行写入后,再继续写入第二行,以此类推。在读取数据时,需要顺序扫描每个元组的完整内容,然后从每个元组中筛选出查询所需要的属性。如果每个元组只有少量属性的值对于查询是有用的,那么 NSM 就会浪费许多磁盘空间和内存带宽。
  • 列式数据库采用列存储模型(Decomposition Storage Model,DSM),目的是最小化无用的 I/O。DSM 采用不同于 NSM 的思路,对于采用 DSM 的关系数据库,DSM会对关系进行垂直分解,并为每个属性分配一个子关系。因此,一个具有 n 个属性的关系会被分解成 n 个子关系,每个子关系单独存储,每个子关系只有当其相应的属性被请求时才会被访问。
  • DSM 以关系数据库中的属性或列为单位进行存储,关系中多个元组的同一属性值(或同一列值)会被存储在一起,而一个元组中不同属性值通常会被分别存放于不同的磁盘页中。
    在这里插入图片描述
  • 行式数据库主要适合小批量的数据处理,如联机事务型数据处理, Oracle 和MySQL 等关系数据库都属于行式数据库。
  • 列式数据库主要适合批量数据处理和即席查询(Ad-Hoc Query),用于数据挖掘、决策支持和地理信息系统等查询密集型系统中。
    • DSM优点:降低 I/O 开销;支持大量并发用户查询;数据处理速度快;具有较高的数据压缩比
    • DSM 的缺陷是:执行连接操作时需要昂贵的元组重构代价。因为一个元组的不同属性被分散到不同磁盘页中存储,当需要一个完整的元组时,就要从多个磁盘页中读取相应字段的值来重新组合得到原来的一个元组。
  • 如果严格从关系数据库的角度来看,HBase 并不是一个列式存储的数据库,毕竟HBase 是以列族为单位进行分解的(列族当中可以包含多个列),而不是每个列都单独存储,但是HBase 借鉴和利用了磁盘上的这种列存储格式,所以,从这个角度来说,HBase 可以被视为列式数据库。

四 HBase 数据模型

4.1 HBase 列族数据模型

  • HBase 是一个稀疏、多维度、排序的映射表,索引包括行键、列族、列限定符和时间戳每个值是一个未经解释的字符串,没有数据类型。
  • 在表中存储数据,每一行都有一个可排序的行键和任意多的列。表在水平方向由一个或者多个列族组成,一个列族中可以包含任意多个列,同一个列族里面的数据存储在一起。列族支持动态扩展,可以很轻松地添加一个列族或列,无须预先定义列的数量以及类型,所有列均以字符串形式存储,用户需要自行进行数据类型转换。由于同一张表里面的每一行数据都可以有截然不同的列,因此对于整个映射表的每行数据而言,有些列的值是空的,所以说 HBase 是稀疏的。
  • HBase执行更新操作时,保留旧版本的数据,同时生成一个新版本的数据。HBase 可以对允许保留的版本的数量进行设置。客户端可以选择获取距离某个时间最近的版本,或者一次获取所有版本。在存储的时候,数据会按照时间戳排序,如果在查询的时候不提供时间戳,会返回最新版本的数据。
  • HBase 提供了两种数据版本回收方式:一是保存数据的最后 n 个版本;二是保存最近一段时间内的版本(如最近 7 天)。

4.2 数据模型的相关概念

  • HBase 实际上就是一个稀疏、多维、持久化存储的映射表,它采用行键(Row Key)、列族(Column Family)、列限定符(Column Qualifier)和时间戳(Timestamp)进行索引,每个值都是未经解释的字节数组 byte[]
    在这里插入图片描述
  1. 表:HBase 采用表来组织数据,表由行和列组成,列划分为若干个列族
  2. 行键:每个 HBase 表都由若干行组成,每个行由行键(Row Key)来标识。
    • 访问表中的行只有 3 种方式:通过单个行键访问;通过一个行键的区间来访问;全表扫描。
    • 行键可以是任意字符串(最大长度是 64 KB)。在 HBase 内部,行键保存为字节数组。
    • 存储时,数据按照行键的字典序存储(将经常一起读取的行存储在一起)
  3. 列族:一个 HBase 表被分组成许多“列族”的集合,它是基本的访问控制单元
    • 列族需要在表创建时就定义好,数量不能太多,而且不能频繁修改
    • 存储在一个列族当中的所有数据,通常都属于同一种数据类型(数据具有较高的压缩率)
    • 表中的每个列都归属于某个列族,数据可以被存放到列族的某个列下面,但是在把数据存放到这个列族的某个列下面之前,必须首先创建这个列族。在创建完列族以后,就可以使用同一个列族当中的列。列名都以列族作为前缀。例如,courses:history 和 courses:math 这两个列都属于 courses 这个列族
  4. 列限定符:列族里的数据通过列限定符(或列)来定位。列限定符不用事先定义,也不需要在不同行之间保持一致。列限定符没有数据类型,总被视为字节数组 byte[]
  5. 单元格 :在 HBase 表中,通过行键、列族和列限定符确定一个“单元格”(Cell)。单元格中存储的数据没有数据类型,总被视为字节数组 byte[]。每个单元格中可以保存一个数据的多个版本,每个版本对应一个不同的时间戳
  6. 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。
    • 每次对一个单元格执行操作(新建、修改、删除)时,HBase 都会隐式地自动生成并存储一个时间戳。一个单元格的不同版本根据时间戳降序存储,确保最新的版本可以被最先读取。

4.3 数据坐标

  • HBase 使用坐标来定位表中的数据。HBase 中需要根据行键、列族、列限定符和时间戳来确定一个单元格,因此可以视为一个“四维坐标”,即["行键", "列族", "列限定符", "时间戳"]
    在这里插入图片描述
    在这里插入图片描述

五 概念&物理视图


  • 在一个 HBase 表的概念视图中,每个行都包含相同的列族,尽管行不需要在每个列族里存储数据.从这个角度来说,HBase表是一个稀疏的映射关系,即里面存在很多空的单元格
  • HBase 存储数据的概念视图
    在这里插入图片描述

  • 物理视图:在物理存储层面,它采用基于列的存储方式,而不是像传统关系数据库那样采用基于行的存储方式。
  • 表 4-4 的概念视图在物理存储的时候,会存成表 4-5 中的两个小片段。HBase 表会按照 contents 和 anchor 这两个列族分别存放,属于同一个列族的数据保存在一起,同时和每个列族一起存放的还包括行键和时间戳。
    在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/642586.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Gen AI大潮来袭!8个Salesforce新岗位,你会选择哪个?

人工智能席卷全球,企业对如何整合GenAI有着浓厚的兴趣。为启动企业的GenAI转型浪潮,Salesforce宣布与埃森哲和德勤建立合作伙伴关系,并计划推出更多支持项目。 目前,Salesforce领域的其他咨询公司正在提高员工技能,以…

Apache Zeppelin结合Apache Airflow使用1

Apache Zeppelin结合Apache Airflow使用1 文章目录 Apache Zeppelin结合Apache Airflow使用1前言一、安装Airflow二、使用步骤1.目标2.编写DAG2.加载、执行DAG 总结 前言 之前学了Zeppelin的使用,今天开始结合Airflow串任务。 Apache Airflow和Apache Zeppelin是两…

C语言数据结构(3)——线性表其二(单链表)

欢迎来到博主的专栏——C语言数据结构 博主id:代码小豪 文章目录 单链表不连续存储的线性表单链表单链表的结构头指针单链表的操作打印单链表 空链表单链表的插入尾插法 头插法 单链表的查找任意位置处的节点插入单链表节点的删除 销毁链表 单链表 顺序表是一个物…

万字长文详解Java线程池面试题

王有志,一个分享硬核 Java 技术的互金摸鱼侠 加入 Java 人的提桶跑路群:共同富裕的Java人 今天是《面霸的自我修养》第 6 篇文章,我们一起来看看面试中会问到哪些关于线程池的问题吧。数据来源: 大部分来自于各机构(J…

【K8S】Kubernetes 中滚动发布由浅入深实战

目录 一、Kubernetes中滚动发布的需求背景1.1 滚动发布1.2 滚动发布、蓝绿发布、金丝雀发布的区别 二、Kubernetes中实现滚动发布2.1 定义Kubernetes中的版本2.2 创建 Deployment 资源对象2.2.1 在 Yaml 中定义 Deployment 资源对象2.2.2 执行命令创建 Deployment 资源对象 三、…

Asp.net core 框架入门

概述 appsettings.json:配置文件,数据库连接字符串配置信息 Program.cs:程序入口文件(里面有个Main方法) Startup.cs:启动配置文件 依赖项:管理项目所依赖的第三方组件的安装,配…

WampServer

开发笔记 推荐链接php无法保存SESSION问题部署SSL时候产生的问题 推荐链接 链接目录 php无法保存SESSION问题 php.ini文件和phpForApache.ini 文件 里面都有 对路径的控制,相关路径问题可能也需要进行修改,打开文件搜索wamp64或wamp 就可以看到了&…

“深入理解RabbitMQ交换机的原理与应用“

深入理解RabbitMQ交换机的原理与应用 引言1. RabbitMQ交换机简介介绍1.1 什么是RabbitMQ?1.1.1 消息中间件的作用1.1.2 RabbitMQ的特点和优势 1.2 RabbitMQ的基本概念1.2.1 队列1.2.2 交换机1.2.3 路由键 1.3 交换机的作用和分类1.3.1 直连交换机(direct…

VS Code Json格式化插件-JSON formatter

🦪整个文件格式化 按快捷键Shift Alt F 🥪仅格式化选择内容 需要选择完整的json段落即:{} 或 [] 括起来的部分,再按快捷键Ctrl K F

社区公益培训系统功能说明

社区公益培训系统功能说明 本系统将用于社区面向居民开展的公益培训课程展示,在线报名,并按班级排课上课,上课时学员要扫码签到,经常旷课的学员将禁止再报名其他课程。 1. 用户注册与登录 - 提供用户注册和登录功能,…

鸿蒙不再兼容安卓,鸿蒙开发薪资高达4w+,程序员是否需转行鸿蒙?

鸿蒙系统的崛起 鸿蒙系统的推出经历了长时间的研发和完善,它是一款自主研发的操作系统,集成了最新的技术和创新理念。该系统具备卓越的安全性、兼容性和扩展性,因此备受关注。最初,鸿蒙系统主要应用于华为手机产品,但…

惬意上手Python —— 装饰器和内置函数

1. Python装饰器 Python中的装饰器是一种特殊类型的函数,它允许用户在不修改原函数代码的情况下,增加或修改函数的行为。 具体来说,装饰器的工作原理基于Python的函数也是对象这一事实,可以被赋值给变量、作为参数传递给其他函数或者作为其他…

比较有创意的网站

有创意的网站通常展示了独特的设计、交互或内容。以下是一些备受赞誉的有创意的网站,你可以参考: Awwwards: Awwwards 是一个评选并展示全球最优秀网站的平台。你可以在这里找到很多有创意的网站设计。 Awwwards CSS Design Awards: 类似于Awwwards&…

3d gaussian splatting笔记(paper部分翻译)

本文为3DGS paper的部分翻译。 基于点的𝛼混合和 NeRF 风格的体积渲染本质上共享相同的图像形成模型。 具体来说,颜色 𝐶 由沿射线的体积渲染给出: 其中密度 𝜎、透射率 𝑇 和颜色 c 的样本是沿着射线以…

VSCode插件 —— Cody AI (免费AI助手!)

之前介绍过一款 阿里云免费的AI开发工具——通义灵码 TONGYI Lingma 本文再推荐一个可以极大提高开发前端开发效率的工具 —— Cody AI (Sourcegraph),同样是免费的! 不过,使用Cody AI需要有github 或 Google 、 git…

vue3相比vue2的效率提升

1、静态提升 2、预字符串化 3、缓存事件处理函数 4、Block Tree 5、PatchFlag 一、静态提升 在vue3中的app.vue文件如下: 在服务器中,template中的内容会变异成render渲染函数。 最终编译后的文件: 1.静态节点优化 那么这里为什么是两部分…

内网安全管理系统(保密管理系统)

在当今信息化的时代,企业的内网已经成为其核心资产的重要组成部分。 随着企业的快速发展和信息化程度的提升,内网安全问题日益凸显,如何保障内网的安全和机密信息的保密性,已经成为企业亟待解决的问题。 内网安全管理系统(保密管…

现在的小年轻真的卷得过分了,真是完全不把自己当人啊

现在的小年轻真的卷得过分了,真是完全不把自己当人啊 都说00后躺平了,但是有一说一,该卷的还是卷。这不,前段时间我们公司来了个00后,工作都没两年,跳槽到我们公司起薪18K,都快接近我了。后来才…

常用电子器件学习——MOS管

MOS管介绍 MOS,是MOSFET的缩写。MOSFET 金属-氧化物半导体场效应晶体管,简称金氧半场效晶体管(Metal-Oxide-Semiconductor Field-Effect Transistor, MOSFET)。 一般是金属(metal)—氧化物(oxide)—半导体(semiconductor)场效应晶…

RabbitMQ消息应答与发布

消息应答 RabbitMQ一旦向消费者发送了一个消息,便立即将该消息,标记为删除. 消费者完成一个任务可能需要一段时间,如果其中一个消费者处理一个很长的任务并仅仅执行了一半就突然挂掉了,在这种情况下,我们将丢失正在处理的消息,后续给消费者发送的消息也就无法接收到了. 为了…