深入浅出HBase:一文理解HBase基础概念(列存储、时间戳、key-value)、架构特点以及适合的使用场景

本文介绍了HBase数据库,包括其数据模型,如行存储与列式存储;架构,含读写流程、HRegionServer内部和HMaster;特性,如大数据存储拓展、查询速度等;适合的业务场景,如写密集型应用、搜索引擎等;以及在生产环境使用前的注意事项,如查询条件、rowkey设计等。

通过了解Hbase的基础概念、架构特点,底层原理等,可以了解HBase读写的特点。通过从底层理解这些特点,我们能够将HBase应用到合适的场景。
本文主要了解HBase的:

  1. hbase的概念、架构
  2. hbase的特点细节:存储拓展性、列存储、定义数据版本、查询快吗
  3. 应用场景、生产注意事项。

 

Apache HBase™ is the Hadoop database, a distributed, scalable, big data store.

Apache HBase 是 Hadoop 数据库,一个分布式、可伸缩的大数据存储。HBase是一个NoSQL数据库,它把数据存在HDFS上。
HBase在HDFS之上提供了高并发的随机写和支持实时查询,这是HDFS不具备的。

 

HBase特点:

  • 存储数据的”结构“可以地非常灵活。
  • HBase仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过 hive
    支持来实现多表 join等复杂操作),主要用来存储结构化和半结构化的松散数据。
  • Hbase 目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。

 

一. HBase 数据模型

1. 行存储与列式存储

1.1. 行存储

行存储系统以行的方式来组织数据。行存储将数据一行一行的写入,写入一条数据记录时,只需要将数据追加到已有数据记录后面即可。

在这里插入图片描述

行模式存储适合 OLTP(Online Transaction Processing)系统。因为数据基于行存储,所以数据的写入会更快。对按记录查询数据也更简单。

场景:统计整个系统今天的博客点赞数。对于行存储系统,需要将所有行数据读入内存,然后对 like_num 列做 sum 操作,从而得到结果。
在这里插入图片描述

我们假设磁盘一次可以读取图中 3 个方框的数据,那么这个聚合计算需要 N(N/3=数据量)次磁盘访问。

 

1.2. 列存储

同样是上面的示例数据,我们来看列式存储是怎样组织数据的。
在这里插入图片描述

列式存储将每一列的数据组织在一起。
利于对于列的操作,如上面我们说到的统计所有 like_num 之和。其过程将如下:
在这里插入图片描述

依然假设磁盘一次可以读取 3 个方框的数据(实际按 byte 读取)。可以看出按列存储组织数据的方式,只需要 1 次磁盘操作就可以完成。

 
列式存储也有不利的一面。首先就表现在数据写入上。
在这里插入图片描述
HBASE是怎么存储的?我们下面讨论。

 

对比:
在这里插入图片描述

 

2. HBase 数据模型

2.1. 模型概览

概念 解释
Name Space 1. 命名空间,类似于关系型数据库的 DataBase 概念,每个命名空间下有多个表。
2. HBase有两个自带的命名空间,分别是 hbase 和 default,hbase 中存放的是 HBase 内置的表,default 表是用户默认使用的命名空间。
Region 1. 类似于关系型数据库的表概念。
2. 不同的是,HBase 定义表时只需要声明列族即可,不需要声明具体的列。这意味着,往 HBase 写入数据时,字段可以动态、按需指定。因此,和关系型数据库相比,HBase 能够轻松应对字段变更的场景。
Row 1. HBase 表中的每行数据都由一个 RowKey 和多个 Column(列)组成。
2. 数据是按照 RowKey的字典顺序存储的,并且查询数据时只能根据 RowKey 进行检索,所以 RowKey 的设计十分重要(热点数据,同类数据下的实时需求)。
rowKey rowKey又叫行键,它是有序的(字典顺序)
Column 1. HBase 中的每个列都由 Column Family(列族)和 Column Qualifier(列限定符)进行限定,例如 info:name,info:age。
2. 建表时,只需指明列族,而列限定符无需预先定义。
Time Stamp 用于标识数据的不同版本,每条数据写入(新增、更新、删除等操作都是写入)时,如果不指定时间戳,系统会自动为其加上该字段,其值为写入 HBase 的时间。
Cell {rowkey, column Family:column Qualifier, time Stamp} 确定一条数据的单元。

 
接下来重点讲解几个和关系型数据库不同的概念。
 

2.2. 列与列族

HBase的列不是我们在关系型数据库所想象中的列。

HBase的列(Column)都得归属到列族(Column Family)中。在HBase中用列修饰符(Column Qualifier)来标识每个列。在HBase里,先有列族,后有列。

什么是列族?可以简单理解为:列的属性类别
什么是列修饰符?在列族下用列修饰符来标识一列。

 

看一个的例子:
在这里插入图片描述

HBase表的每一行中,列的组成都是灵活的,行与行之间的列不需要相同。换句话说:一个列族下可以任意添加列,不受任何限制

在这里插入图片描述

 

2.3. 时间戳:定义数据版本

数据写到HBase的时候都会被记录一个时间戳,这个时间戳被我们当做一个版本。比如说,我们修改或者删除某一条的时候,本质上是往里边新增一条数据,新增了记录的版本。

在这里插入图片描述

  • 比如现在修改phone的值,实际上就是多添加一条记录,在读的时候按照时间戳读最新的记录。在外界「看起来」就是把这条记录改了。
  • 删除一条数据实际上也是增加一条记录,只不过我们在KeyType里边设置为“Delete”就可以了。

 

2.4. HBase的Key-Value

HBase本质上其实就是Key-Value的数据库,那在HBase里边,Key是什么?Value是什么?
在这里插入图片描述

每个KeyValue都由4个部分构成,分别为key length,value length,key和value。其中

  1. key length和value length是两个固定长度的数值
  2. key是一个复杂的结构,

rowkey长度、rowkey
ColumnFamily长度、ColumnFamily、ColumnQualifier
时间戳
KeyType(keytype有四种类型,分别是Put、Delete、 DeleteColumn和DeleteFamily)

  1. value就是一串纯粹的二进制数据。

准确定位一条数据,那就需要知道:RowKey+Column+时间戳。

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

roman_日积跬步-终至千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值