«

HBase表的数据模型是什么

时间:2024-3-28 09:13     作者:韩俊     分类: Mysql


本篇内容主要讲解“HBase表的数据模型是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“HBase表的数据模型是什么”吧!

HBase是运行在Hadoop集群上的一个数据库,与传统的数据库有严格的ACID(原子性、一致性、隔离性、持久性)要求不一样,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个时间版本的数据。

标签: mysql hbase

热门推荐