HBase数据模型
大力橙子 人气:0HBase是运行在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个时间版本的数据。
加载全部内容