分布式数据库(林子雨慕课课程)

文章目录

    • 4. 分布式数据库HBase
      • 4.1 HBase简介
      • 4.2 HBase数据模型
      • 4.3 HBase的实现原理
      • 4.4 HBase运行机制
      • 4.5 HBase的应用方案
      • 4.6 HBase安装和编程实战

4. 分布式数据库HBase

4.1 HBase简介

  • HBase是BigTable的开源实现

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 对于网页搜索主要分为两个阶段

    • 1.建立整个网页索引:设计网页爬虫,爬取的网页存入BigTable中,在上面运行MapReduce

    • 2.搜索互联网网页

      image-20231008165520391

  • BigTable诞生?

    image-20231008165628566

  • Bigtable是在GFS的基础上实现的

    image-20231008165743978

  • 为什么分布式存储系统可以得到广泛的关注?

    • 它具有非常好的性能(可以支持PB级别的数据)
    • 它具有非常好的可扩展性(用集群去存储几千台服务器完成分布式存储)
  • HBase特点:高可能、高性能、面向列、可伸缩

    image-20231008170105044

  • HBase:通过水平扩展的方式,允许几千台服务器去存储海量文件

    image-20231008170221982

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

    image-20231008170317037

  • 为什么需要设计HBase这么一个数据库产品?

    • 虽然已经有了HDFS和MapReduce,但是Hadoop主要解决大规模数据离线批量处理,Hadoop无法满足大数据实时处理需求。

    • 随着这些年数据的大规模爆炸式增长,传统关系型数据库的扩展能力非常有限,即使通过设计主从复制方案或者分库的方式,仍然有两个缺陷,一个是不便利,另一个是效率非常低

  • 传统关系型数据库如何进行数据规模化扩展:

    • 设计主从复制方案,由主服务器负责接收写请求,若干从服务器都是主服务器的副本,从服务器接收外界的读请求,这样可以实现数据库在性能上的一定扩展

      image-20231008170854304

    • 做分库:对企业内部数据进行分库,将写负载分流

  • Hbase和传统关系型数据库有什么联系和区别?

    • 数据类型方面,传统关系数据库用的是非常经典的关系数据模型

    • 数据操作方面,在关系数据库中定了非常多的数据操作,查找,插入,删除等

    • 存储模式方面,关系数据库基于行模式存储,而对于HBase来讲是基于列存储

    • 在数据索引方面,关系数据库可以直接针对各个不同的列,构建非常复杂的索引

      image-20231008171505053

    • 数据维护方面,在关系数据库当中做一些数据更新操作的时候,实际上里面旧的值会被新的值覆盖掉;而HBase生成新的版本,旧的版本仍然存在,不会被替换

    • 可伸缩性方面,关系数据库是很难实现水平扩展的,最多可以实现纵向扩展

      image-20231008171935421

  • HBase访问接口

    image-20231008172100903

4.2 HBase数据模型

  • HBase是一个稀疏的多维度的排序的映射表:包含行键,列族,列限定符,时间戳

    image-20231008173124333

  • HBase特点

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 列族的特性

    • 支持动态扩展:可以对列族进行增加或者减少

    • 保留旧的版本:执行数据更新操作的时候,会保留旧版本

    • HBase以表的形式组织数据,与关系型数据库的区别:关系型数据库会对其进行规范化处理,根据第一范式、第二范式、第三范式,将 表进行不断分解,最后需要对表进行多表连接;HBase不考虑冗余,牺牲空间去避免表连接操作带来的效率问题

  • 列限定符(列)

    • 实际过程中可以动态增加或者减少列
  • 单元格:具体存储数据的地方

  • 时间戳:新的版本会通过时间戳进行确定

  • 数据坐标的定位:必须通过四维:行键、列族、列限定符、时间戳来定位数据位置

    image-20231008174618703

  • HBase数据的概念视图

    • 列族名称:具体列限定符=“”
    • 在概念上HBase数据是稀疏的,因为很多单元格是空白的

    image-20231008175013832

  • HBase数据的物理视图:是按照列族进行存储的

    image-20231008191514263

  • 传统关系型数据库是行式存储,而HBase是列式存储

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 行式数据库和列式数据库示意图

    image-20231008192303431

  • 面向行的存储有什么优势和缺点

    image-20231008192354813

  • 列式存储的优点

    • 列式存储:按照一个列去存储,可以带来很高的数据压缩率,适用于以分析型应用为主的场景
    • 行式存储:不可能达到很高的数据压缩率,适合事务型操作比较多的场景

4.3 HBase的实现原理

  • HBase的功能组件:Master服务器、库函数、Reigion服务器

    • 库函数:链接每个客户端

    • Master服务器:充当管家作用

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • Region服务器:负责存储不同的Region

      • 客户端在获取Region位置信息之后,直接和Region服务器进行打交道

        image-20231008193213286

  • HBase的表和Region的关系

    • 初始化的时候将一个HBase表划分为多个Region,随着表的增大,Region规模增加,会分裂成多个新的Region,分裂时只需要修改指向信息,是非常快速的

      image-20231008193440440

      image-20231008193646685

  • Region到底被存到哪里去了?

    外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • HBase的三层结构

    • Root表在一个Region机器上,存储的元数据信息,即META表的位置

    • META表存储的是用户数据存储的位置

    • Root表的地址是写死在Zookeeper中的

      为了加速寻址,客户端会缓存位置信息,但同时需要解决缓存失效问题,它会先通过缓存查找数据,若找不到数据,则判定缓存失效,需要重新进行三级寻址

    image-20231008194400631

    • 三层结构中各层次的名称和作用

      image-20231008194440040

    • Region的定位

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

      image-20231008194807033

4.4 HBase运行机制

  • HBase的系统架构

    image-20231008195308851

    • 客户端:访问HBase的接口,为了加快访问速度,会进行位置地址的缓存

    • Zookeeper服务器:实现协同管理服务,其被大量用于分布式系统,提供配置维护,域名服务,分布式同步服务等,在HBase中,其主要提供管家功能,维护和管理整个HBase集群

      image-20231008195632529

    • Master服务器(主服务器):负责对HBase的表的增删改查;负责不同Region服务器的负载均衡;负责调整分裂、合并后Region的分布;负责重新分配故障、失效的Region服务器,也要借助Master来进行重新分配

      image-20231008195953264

    • Region服务器:负责用户数据的存储和管理,其负责向HDFS文件系统中读写数据

      • Region服务器集群由多个Region服务器构成,每个Region服务器中有多个组件
      • 若干个Region共用一个HLog文件
      • 每个Region中的每个列族会单独构成一个Store进行存储:会先存储到MemStore缓存中,缓存满了在存储到StoreFile文件中
      • StoreFile是HBase的表现形式,它在底层是借助HDFS存储的,其在HDFS中以HFile的格式存储

      image-20231008200103059

  • 用户读写数据过程

    • 写入数据

      • 首先将数据写入MemStore缓存区

      • 为了保存数据不丢失,会在写入Memstore前,会先写入HLog日志,当HLog数据写入到磁盘之后,才允许返回客户端

        image-20231008200814208

    • 读取数据

      • 首先用户也会先访问MemStore,因为最新写入的数据会存储于MemStore中

      • 若MemStore查找不到,会到磁盘的StoreFile中去找相关数据

        image-20231008200954154

  • 缓存刷新过程

    image-20231008201225601

  • StoreFile文件的合并

    • 刷写可能导致多个StoreFile文件,遍历StoreFile文件找数据,文件越多会影响查找速度,因此将多个StoreFile文件合并为一个大的StoreFile文件

      image-20231008201418386

  • StoreFile的分裂

    • StoreFile的不断合并可能会导致StoreFile的文件越来越大,当合并的StoreFile越大的时候,就会引发分裂操作

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • HLog的工作原理

    • HBase的底层是廉价的低端机,因此需要通过日志的发生来恢复故障

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

    • HBase为每个Region服务器都配置了公共的HLog

      image-20231008202220670

    • 故障恢复

      • Zookeeper来监视整个集群,会通知Master出问题的服务器,需要将故障服务器的内容迁移
      • Master会将故障服务器的HLog文件取出,包含故障服务器的各个Region对象以及日志记录
      • 然后对HLog的日志记录拆解为不同的Region的日志记录(因为所有的Region的日志都记录在HLog中)
      • 最后将这些Region分配到其他可用的Region服务器上去
    • 为何不每个Region设置单独的HLog文件

      • 因为这样对于每个Region的更新操作,需要写入不同的HLog文件,是非常耗时的,而且集群出故障的时间远少于正常运行的时间
      • 所有公共的HLog文件的可以大大提升写入性能

4.5 HBase的应用方案

  • HBase在实际应用中的性能优化方法

    • 若想把时间靠近的数据存在一起:

      image-20231008203531605

    • 提升读写性能:

      image-20231008203626114

    • 节省存储空间

      image-20231008203715218

    • 将到达时间限制的一些数据清楚,即使它没有到达版本最大数

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • HBase如何检测性能

    • 可以通过以下几种工具:Master-status、Ganglia、OpenTSDB、Ambari

      image-20231008203954303

      • Master-staus

        image-20231008204139709

      • Ganglia

        image-20231008204203630

      • OpenTSDB

        image-20231008204236174

      • Ambari

        image-20231008204303155

  • SQL语句查询HBase上相关数据

    • SQL易于使用,大部分人对HBase比较陌生,但是对SQL比较熟悉;

    • HBase原生代码查询数据编写代码较多,SQL是非过程语言,很多系统的底层会帮它生成相关操作

      image-20231008204639556

    • Hive和Phoenix

      外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 构建HBase二级索引

    image-20231008204809345

    • 原生的HBase不支持对于各个列构建相关的索引,默认支持对rowkey行键进行索引

      image-20231008204925074

    • HBase0.92版本引入新特性:Coprocessor,可以支持二级索引

      image-20231008205142499

    • Coprocessor如何构建二级索引

      • 其提供两个实现:endpoint和observer

      • Endpoint相当于关系型数据库的存储过程,observer相当于触发器

      • 每次往HBase表中插入数据时,observer会监测到,会将插入的数据同步写到索引表

        image-20231008205440095

    • 此时在HBase中就存在了主表和索引表

      • 索引表不是HBase内部自身的,是由其他产品帮其构建的二级索引,是通过Coprocessor格外开发的程序,对不同的其他列进行索引

      image-20231008205536489

    • Coprocessor构建二级索引的优点和缺点

      • 优点:非侵入性,引擎构建在HBase之上,既没有对HBase进行任何改动,也不需要上层应用做任何妥协
      • 缺点:每插入一条数据需要向索引表插入数据,即耗时是双倍的,对HBase的集群压力也是双倍的
  • HBase的应用方案

    image-20231008210013892

    • Redis的方案:将索引写入到Redis的缓存数据库中,定期的把索引更新到HBase底层数据库,可以避免频繁更新磁盘索引表的问题

      image-20231008210340743

    • Solr+HBase:Solr服务器构建其他列和行键之间的对应关系,输入其他列的某一个值,可以快速找到这个列对应的行键,通过行键快速找到HBase记录

      image-20231008210613264

4.6 HBase安装和编程实战

见:HBase2.5.4安装和编程实践指南_厦大数据库实验室博客 (xmu.edu.cn)

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

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

相关文章

Linux SSH连接远程服务器(免密登录、scp和sftp传输文件)

1 SSH简介 SSH(Secure Shell,安全外壳)是一种网络安全协议,通过加密和认证机制实现安全的访问和文件传输等业务。传统远程登录和文件传输方式,例如Telnet、FTP,使用明文传输数据,存在很多的安全…

数据结构 | (二) List

什么是 List 在集合框架中, List 是一个接口,继承自 Collection 。 Collection 也是一个接口 ,该接口中规范了后序容器中常用的一些方法,具体如下所示: Iterable 也是一个接口,表示实现该接口的类是可以逐个…

分享几个通用个人简历模板|行业通用

Home(https://cvjury.com/) 专业设计的简历模板。 在竞争激烈的就业市场中脱颖而出的有效策略。 侧重于向招聘人员传达独特的价值主张。 帮助创建引人注目的简历、求职信和LinkedIn资料。 面向毕业生和学生的个性化简历解决方案。 添加图片注释,不超过 140 字&…

归并排序及其非递归实现

个人主页:Lei宝啊 愿所有美好如期而遇 目录 归并排序递归实现 归并排序非递归实现 归并排序递归实现 图示: 代码: 先分再归并,像是后序一般。 //归并排序 void MergeSort(int* arr, int left, int right) {int* temp (int…

PUPANVR-UI主菜单及设置窗体框架(9)

PUPA NVR UI主菜单及设置窗体框架 在设计UI时,竟量把数据、控制、显示,分开,即MVC的一个模式吧!使用MVC这样的模式思想,会让代码简洁不少,逻辑也很清析! 具体的代码见: PUPANVR这个…

第三次作业

自己实现扫描全盘的函数 def scan_disk(dir): global count,dir_count if os.path.isdir(dir): files os.listdir(dir) for file in files: print(file) dir_count 1 if os.path.isdir(dir os.sep file): …

等精度频率计verilog,quartus仿真视频,原理图,代码

名称&#xff1a;等精度频率计设计verilog quartus仿真 软件&#xff1a;Quartus 语言&#xff1a;Verilog 要求&#xff1a; A&#xff1a;测量范围信号:方波 频率:100Hz~1MHz; B&#xff1a;测试误差:<0.1%(全量程) C&#xff1a;时钟频率:50kHz D&#xff1a;预闸…

(2021|NIPS,VQ-VAE,精度瓶颈松弛,三明治层归一化,CapLoss)CogView:通过转换器掌握文本到图像的生成

CogView: Mastering Text-to-Image Generation via Transformers 公众号&#xff1a;EDPJ&#xff08;添加 VX&#xff1a;CV_EDPJ 或直接进 Q 交流群&#xff1a;922230617 获取资料&#xff09; 0. 摘要 通用领域中的文本到图像生成长期以来一直是一个悬而未决的问题&#…

十、pygame小游戏开发

目录 一、安装pygame二、pygame快速入门2.1 坐标系认识2.2 创建游戏主窗口2.3 实现图像绘制2.4 游戏循环和游戏时钟2.5 简单动画实现的实现2.6 监听事件2.7 精灵和精灵组三、游戏框架搭建3.1 实现飞机大战主游戏类3.2 完成游戏初始化部分3.3 使用常量代替固定的数值3.4 完成游戏…

2023年DDoS攻击发展趋势的分析和推断

DDoS是一种非常“古老”的网络攻击技术&#xff0c;随着近年来地缘政治冲突对数字经济格局的影响&#xff0c;DDoS攻击数量不断创下新高&#xff0c;其攻击的规模也越来越大。日前&#xff0c;安全网站Latest Hacking News根据DDoS攻击防护服务商Link11的统计数据&#xff0c;对…

Java代码hello word

一、安装java环境 开始学习java之前&#xff0c;我们的第一步就是安装java环境&#xff0c;即常说的JDK和JRE&#xff0c;此处就不在详细介绍配置环境过程&#xff0c;可以到网上搜索java开发环境配置。 二、编写第一个程序 工具&#xff1a; 常用的java编写工具有IDE、Notep…

机器学习:随机森林

集成学习 集成学习&#xff08;Ensemble Learning&#xff09;是一种机器学习方法&#xff0c;通过将多个基本学习算法的预测结果进行组合&#xff0c;以获得更好的预测性能。集成学习的基本思想是通过结合多个弱分类器或回归器的预测结果&#xff0c;来构建一个更强大的集成模…

Window Anaconda 安装pytorch 启用cuda 终究手段

1.首先你的电脑要有NVIDIA 的显卡.没有就走吧,你如果不是window &#xff0c;也走吧&#xff0c;不一定教程管用。 2.然后要明白&#xff0c;有两种CUDA版本&#xff0c;一个叫运行时api&#xff0c;一个是驱动api 2.1 运行时cuda 版本查看 &#xff08;是你跑深度学习模型或其…

Android用户登录与数据存储:从权限请求到内外部存储的完整实践【完整实践步骤、外部存储、内部存储】

步骤 1: 登录页面布局 在 MainActivity 中实现用户登录功能&#xff0c;首先创建一个布局文件 activity_main.xml 包含用户名和密码的输入字段以及登录按钮。 <!-- activity_main.xml --> <LinearLayoutxmlns:android"http://schemas.android.com/apk/res/andr…

单元测试该怎么写

单元测试对于开发人员来说很熟悉&#xff0c;各种语言都提供了单元测试的框架&#xff0c;用于自动化执行单元测试并生成测试报告。它通常提供了一组API和工具&#xff0c;使开发人员能够编写和运行测试用例&#xff0c;比较预期行为和实际行为之间的差异&#xff0c;并准确地识…

【已验证】微信小程序介绍及创建过程23.10.08

1、环境准备 开发微信⼩程序之前&#xff0c;必须要准备好相应的环境 1.1.注册账号 建议使用全新的邮箱&#xff0c;没有注册过其他小程序或者公众号的。访问注册⻚⾯&#xff0c;耐⼼完成注册即可。 1.2.获取APPID 由于登录&#xff0c;然后获取APPID 2.开发工具 下载地…

ElementUI结合Vue完成主页的CUD(增删改)表单验证

目录 一、CUD ( 1 ) CU讲述 ( 2 ) 编写 1. CU 2. 删除 二、验证 前端整合代码 : 一、CUD 以下的代码基于我博客中的代码进行续写 : 使用ElementUI结合Vue导航菜单和后台数据分页查询 ( 1 ) CU讲述 在CRUD操作中&#xff0c;CU代表创建&#xff08;Create&#xff09…

设备搭建(waf、蜜罐、ids和ips)

文章目录 防火墙waf网闸蜜罐idsips 防火墙 DMZ区域叫非军事化区减&#xff0c;DMZ有web服务或者MySQL服务&#xff0c;从互联网到dmz的流量一般不拦截&#xff08;因为需要互联网用户访问web服务&#xff09;&#xff0c;如果dmz沦陷&#xff0c;攻击者想要继续横向移动到内网…

Vue中实现自定义编辑邮件发送到指定邮箱(纯前端实现)

formspree里面注册账号 注册完成后进入后台新建项目并且新建表单 这一步完成之后你将得到一个地址 最后就是在项目中请求这个地址 关键代码如下&#xff1a; submitForm() {this.fullscreenLoading true;this.$axios({method: "post",url: "https://xxxxxxx…

什么是数据库锁(Lock)?有哪些类型的锁

数据库锁&#xff08;Lock&#xff09;&#xff1a;保护数据完整性与并发性的关键 数据库锁&#xff08;Lock&#xff09;是在数据库管理系统中用于管理并发访问数据的重要机制。它们确保了多个用户或事务可以同时访问数据库&#xff0c;同时保护数据的完整性。在本文中&#…