详解HBase表的数据模型
作者:大力橙子
HBase是运行在Hadoop集群上的一个数据库,与传统的数据库有严格的ACID(原子性、一致性、隔离性、持久性)要求不一样,HBase降低了这些要求从而获得更好的扩展性,它更适合存储一些非结构化和半结构化的数据。
下面给大家详细介绍HBase表的数据模型,内容如下所示:
表(Table)
HBase 中的数据以表的形式存储。同一个表中的数据通常是相关的,使用表主要是可以把某些列组织起来一起访问。表名作为 HDFS 存储路径的一部分来使用,在 HDFS 中可以看到每个表名都作为独立的目录结构。
HBase表的数据模型主要概念包括rowkey、Column Family、Column、cell、Timestamp。
1. rowkey行键
- table的主键,table中的记录==按照rowkey 的字典序进行排序==
- rowkey行键可以是任意字符串(最大长度是 64KB,实际应用中长度一般为 10-100bytes)
2. Column Family列族
- 被称为列族或列簇
- HBase表中的每个列,都归属与某个列族
- 列族是表的schema的一部分(而列不是),即建表时至少指定一个列族
- 比如创建一张表,名为
user
,有两个列族,分别是userInfo
和addressInfo
,建表语句create 'user', 'userInfo', 'addressInfo'
3. Column列
- 列肯定是表的某一列族下的一个列,用
列族名:列名
表示,如userInfo
列族下的name
列,表示为userInfo:name
- 它属于某一个ColumnFamily,类似于我们mysql当中创建的具体的列
4. cell单元格
知道row key行键、列族、列,可以确定的一个cell单元格
cell中的数据是没有类型的,全部是以字节数组进行存储
5. Timestamp时间戳
- 可以对表中的Cell多次赋值,每次赋值操作时的时间戳timestamp,可看成Cell值的版本号version number
- 即一个Cell可以有多个版本的值
理解数据模型各概念的图
上表展示的是 HBase 中的用户信息表 user,有三行记录和两个列族(不考虑空白的列族,代表可以有很多列族),行键分别为 1、2 和 3,两个列族分别为 userInfo 和 addressInfo,每个列族中含有若干列,如列族 userInfo 包括 name、age、sex 3列,列族 addressInfo 包括 address、from、phone、email、ralary 5列。
在 HBase 中,列不是固定的表结构,在创建表时,不需要预先定义列名,可以在插入数据时临时创建。
从表的逻辑模型来看,HBase 表与关系型数据库中的表结构之间好像没什么差别,只不过多了列族的概念。但实际上是有很大差别的,关系型数据库中表的结构需要预先定义,如:列名及其数据类型和值域等内容。
当需要添加新列,则需要修改表结构,这会对已有的数据产生很大影响。同时,关系型数据库中的表为每个列预留了存储空间,即表中的空白 Cell 数据在关系型数据库中以“NULL”值占用存储空间。因此,对稀疏数据来说,关系型数据库表中就会产生很多“NULL”值,消耗大量的存储空间。
与面向行存储的关系型数据库不同,HBase 是面向列存储的,且在实际的物理存储中,列族是分开存储的,即表中的用户信息表将被存储为 userInfo 和 addressInfo 两个部分。
同时HBase存在时间戳,可以多次对一个cell赋值,可以存储多个版本的值,如上表中rowkey为1的数据存储了2个时间版本的数据。
到此这篇关于详解HBase表的数据模型的文章就介绍到这了,更多相关HBase数据模型内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!