Hbase in action部分章节阅读笔记

  • Chapter 2.2.3: Under the hood: the HBase write path
  • Chapter 2.2.5:Under the hood: the HBase read path
  • Chapter 4.2:De-normalization is the word in HBase land
  • Chapter 4.5:I/O considerations
  • Chapter 4.6:From relational to non-relational

Chapter 2.2.3: Under the hood: the HBase write path

HBase写路径
HBase
使用Put在HBase中记录新行或修改现有行,内部过程是一样的:HBase接收命令并持久化更改,或者如果写失败,则抛出异常。
写操作默认情况下操作两部分:前置写入日志(WAL)(也称为HLog),以及MemStore(图2.1)。HBase在这两个地方记录写操作的默认行为是为了保持数据的持久性。
MemStore
MemStore是一个写缓冲区,HBase在永久写之前在内存中积累数据。当MemStore填满时,它的内容被刷新到磁盘,形成一个HFile。HFile是HBase的底层存储格式。hfile属于列族,一个列族可以有多个hfile。但是一个HFile不能包含多个列族的数据。每个列族有一个MemStore。
WAL
假设托管一个尚未刷新的MemStore的服务器崩溃了,将丢失内存中但尚未持久化的数据。HBase防范通过在写入完成之前写入WAL。每个服务器的一部分HBase集群保持一个WAL来记录发生的变化,在新的WAL条目出现之前,写操作不会被认为是成功地写。这种保证使得HBase像文件系统备份一样持久。HBase宕机时,可以通过重放WAL来恢复尚未从MemStore刷新到HFile的数据。MemStore是内存的write buffer,到一定量会flush到磁盘上成为HFile,如果region server挂了,数据就丢失。而WAL可以用来恢复数据。

Chapter 2.2.5:Under the hood: the HBase read path

HBase实现了两个目标:快速访问数据,把数据排序和把数据尽可能多地保留在内存中。
LRU缓存
从HBase读数据必须汇总持久化到HFiles和Memstore中的数据。为了快速读取,HBase设置了LRU缓存。该缓存,也称作BlockCache(块缓存),保存在JVM堆中。BlockCache目的是把经常访问的来自HFile的数据缓存在内存中,避免读取磁盘。每一个列簇有一个BlockCache。
从HBase中读取一行需要首先检查MemStore是否有挂起修改。然后检查BlockCache,看看块是否包含这个行最近被访问。最后,访问磁盘上的相关hfile。

Chapter 4.2:De-normalization is the word in HBase land

去规范化
规范化是关系数据库世界中的一种技术,在这种技术中,每种类型的重复信息都被放到自己的表中。这有两个好处:当更新或删除发生时,您不必担心更新给定数据的所有副本的复杂性;通过使用一个副本而不是多个副本,可以减少存储占用。
去规范化是相反的概念。数据被重复存储在多个位置。这使得查询数据更加容易和快速,因为您不再需要JOIN子句。
当用户创建一个twit时,从关系表中获取所有关注者的列表,并将该twit添加到每个关注者的流中。要实现这一点,首先需要能够找到跟随任何给定用户的用户列表。换句话说,要回答“谁跟着我?”这个问题。在当前的表设计中,这个问题可以通过扫描整个表并寻找rowkey的后半部分是您感兴趣的用户的行来回答。

Chapter 4.5:I/O considerations

HBase表的排序特性有利有弊。当查看twit流表时,排序性质能够快速扫描一小组行,以找到应该在用户流中显示的最新twitt。但是,当将一组时间序列数据写入HBase表时,排序会造成损失。时间戳本质上是单调递增的。这不仅限制了单个区域能够处理的吞吐量,而且还面临超载的风险,而集群中的其他机器都处于空闲状态。
在许多用例中,不需要基于单个时间戳访问数据。需要运行一个在一定时间范围内计算聚合的作业,如果它对延迟不敏感,则可以跨多个区域执行并行扫描。
Rowkey设计
使用Hash rowkey有助于数据在regionserver之间均匀分布,一般可以使用MD5获取定长key。比较棘手的一个场景是在时间序列数据中,使用时间戳作为rowkey,始终在表底部插入数据,由于rowkey的有序性存储,表的最后一个region成为热点。而应用又需要根据时间范围进行扫描查询,所以不能简单将时间戳Hash,这时可以考虑“Salting”方法:

但是读取现在涉及到将扫描分布到所有区域并找到相关的行。因为它们不再存储在一起,一个简短的扫描是无法解决问题的。

Chapter 4.6:From relational to non-relational

从关系型到非关系型
关系数据库建模包括三个主要概念:
实体——这些实体映射到表。
属性——这些属性映射到列。
关系——这些映射到外键关系。
要将属性映射到HBase,必须区分(至少)两种类型:

  • 标识属性
    标识属性是唯一标识实体的一个实例(即一行)的属性。在关系数据库表中,此属性形成表的主键。在HBase中,标识属性是rowkey的一部分。
    一个实体由多个属性标识。这映射到关系数据库系统中的复合键。在HBase中,标识属性组成rowkey。

  • 非标识属性
    非标识属性基本上映射到HBase中的列限定符。这些属性不需要唯一性保证。
    当有一个宽行(几十或数百列)的关系数据库表。可以将行中的所有值序列化为单个二进制blob,并将其存储为单个单元格中的值。
    这占用了更少的磁盘空间,但也有缺点:行中的值现在是不透明的,并且不能使用HBase表所提供的结构。当存储占用(以及磁盘和网络I/O)非常重要,并且访问模式总是涉及读取整行时,这种方法是有很帮助的。

  • 关系
    关系模型使用两种主要的关系:一对多和多对多。关系数据库将前者直接建模为外键,将后者建模为连接表。在HBase中没有这些的直接映射,通常归结为数据的非规范化。
    HBase没有任何内置的连接或约束,您需要在HBase之外编写代码,迭代每个用户,然后为该用户执行独立的HBase查找,以找到他们最近的twits(或为每个追随者反规范化twits副本)。
    HBase的列在设计时不是预定义的。它们可以是任何东西。

  • 嵌套实体

一对多关系在Hbase中被建模为单行,rowkey将对应于父实体。嵌套的值将包含子值,其中每个子实体将一个列限定符放到它们的标识属性存储的位置,其余的非标识属性存储在值中。真正的HBase行定义了父记录;子实体的记录被存储为单个列。

  • 列族
    关系数据库中没有列族,HBase中列族是作为用于单个行包含一系列不相交的列的一种方式,
    列族建立了一对一的关系模型,其中有两个表具有相同主键,每个表有0或1行,有各自主键值

  • 索引
    关系数据库声明的索引在Hbase中不存在。

  • 版本控制
    如果在关系模式中,存在显式存储时间戳的地方,那么在很多情况下,这些可以包含到存储在HBase单元中的时间戳中。

Hbase in action部分章节阅读笔记相关推荐

  1. 《HBase原理与实践》阅读笔记

    学习笔记(1-3章) 全书概述 1.HBase概述 1.1.Hbase发展历史 1.2.Hbase数据模型 1.3.Hbase体系结构 1.4.Hbase系统特性 2.Hbase基础数据结构与算法 2 ...

  2. 《Java编程思想》Java I/O系统章节阅读笔记

    今天正好要写个小程序需要用到io操作,突然想起来java有个nio一直没用过,就找了点资料研究了一下,顺便做点笔记,以便日后查阅. ---------------------------------- ...

  3. C++ Concurrency in Action, Second Edition阅读笔记(一、二章)

    来源:https://livebook.manning.com/book/c-plus-plus-concurrency-in-action-second-edition/chapter-1/v-7/ ...

  4. 【阅读笔记】《TDN: Temporal Difference Networks for Efficient Action Recognition》阅读笔记

    <TDN: Temporal Difference Networks for Efficient Action Recognition> 论文连接:https://arxiv.org/ab ...

  5. Learning salient boundary feature for anchor-free temporal action localization AFSD阅读笔记及代码复现

    论文地址:Lin_Learning_Salient_Boundary_Feature_for_Anchor-free_Temporal_Action_Localization_CVPR_2021_pa ...

  6. 《Spring in action,3th》阅读笔记

    第一章 Spring核心 第二章 装配Bean 第三章 最小化Spring XML配置

  7. Do Deep Neural Networks Learn Facial Action Units When Doing Expression Recognition?阅读笔记

    Do Deep Neural Networks Learn Facial Action Units When Doing Expression Recognition?阅读笔记 前言 Abstract ...

  8. K8s in Action 阅读笔记——【9】Deployments: updating applications declaratively

    K8s in Action 阅读笔记--[9]Deployments: updating applications declaratively 集群配置: 本章介绍如何更新运行在Kubernetes集 ...

  9. [python Cookbook]阅读笔记

    @toc] 前记:为了补充一下python语法知识,感谢网友的推荐阅读了pythonCookbook,这本书确实不错,以问题为导向,引导解决思路. 这个博文是从阅读笔记typora中直接复制过来的没有 ...

最新文章

  1. 微软收购 GitHub 两年后,大咖共论开源新生态
  2. java窗口坐标_如何在Java中获取窗口外部的鼠标单击坐标
  3. JAVA面向对象的特征
  4. 通过Visual Studio 2005的项目模板来加速开发过程
  5. jQuery EasyUI使用教程之基本的拖放
  6. 软考_2021年11月真题2__三点估算技术
  7. 淘宝商品数据爬取并分析数据
  8. RTKLIB源码之单点定位/相对定位后处理简化版—第一版
  9. 禅道linux客户端服务端,禅道11.0版本发布,主要集成禅道客户端
  10. AXD Debugger
  11. 稳压二极管和雪崩二极管的工作原理及选型学习总结
  12. 解决合并压缩包分卷无法解压 错误信息:文件格式未知或者压缩文件数据已经损坏
  13. [置顶]Gradle 实现 Android 多渠道定制化打包
  14. 推荐一个220V控制12V的电路板继电器-220v降压控制继电器
  15. html网页设计小作业(个人主页)
  16. pip install下载速度太慢
  17. MySQL优化系列3-Linux查看CPU、内存、磁盘、网络信息
  18. 银河麒麟 ARM架构 Qemu虚拟机
  19. 实现一个完整的前后端交互
  20. 掌握10条设计理念!让同事(客户)更好的了解设计

热门文章

  1. VBA批量处理PPT中图片尺寸
  2. 纯小白通过服务器搭建yolov5环境训练coco数据集
  3. EDID1.3 数据格式
  4. form表单提交后台获取表单信息
  5. lol登录服务器时显示乱码,win7系统登录LOL游戏出现乱码的解决方法
  6. AndroidStudio开发高德地图有些机型报java.lang.UnsatisfiedLinkError解决方案
  7. 云扩科技与帆软软件达成战略合作,携手共建RPA+BI新生态
  8. 同轴式二级圆柱齿轮减速器的设计(论文+DWG图纸) 装配图 低速轴 高速轴 中间轴 斜齿轮 轴承盖
  9. GEWorker界面展示及功能组成介绍,怎么使用GE-Worker?
  10. java取汉字拼音首字母含多音字及不常见的字