三张图帮助理解HBase数据模型
博客专区 > lmqian 的博客 > 博客详情
三张图帮助理解HBase数据模型
lmqian 发表于2个月前
三张图帮助理解HBase数据模型
  • 发表于 2个月前
  • 阅读 1
  • 收藏 0
  • 点赞 0
  • 评论 0

腾讯云 十分钟定制你的第一个小程序>>>   

主要参考资料

Introduction to HBase Schema Design

HBase数据模型解析和基本的表设计分析

背景说明

受关系型数据库影响颇深,因此笔者在初识HBase的时候对于其数据模型认识比较模糊,大多数文章描述比较抽象,比较难以区分跟关系型数据库的差异,偶然发现一篇文章终于通过三张图直观地讲清了HBase数据模型,如获至宝。

文章中说:最简单最单纯的描述HBase数据模型的说法就是它是一个有行和列构成的数据表的形式。这看起来跟关系型数据库很相似,实际上,他们的相似也就仅限于此了。因此在了解HBase数据模型过程中,不妨先完全忘掉关系型数据库的模型。

术语解释
  • 表(Table)HBase用表来组织数据,也就是说数据是放在表里面的。
  • 行(Row)表通过行来存储数据,一行代表一个数据对象。每一行用row-key进行唯一标识,同时也使用row-key排序。
  • 列族(Column Family)每一行的数据可以被分成不同的组,这个组就称之为“列族”。一张表中每一行都有相同的列族,但是针对某一行,它在某些列族可以没有数据。
  • 列/列标识(Column Qualifier)行里面的每一项数据,可以按字段来理解。一个或多个列组成一个列族。一张表可以有一个或多个列族,一个列族包含多个列。不同的行可以有不同的列。
  • 单元(Cell)就是一项数据,某一行某列族某列就是一个单元,其数据就是单元数据。
  • 时间戳(Timestamp)单元数据有版本记录,默认使用时间戳来标记不同的版本。强调一下:版本记录是针对单元数据的,不是行。
第一张图

这是一张记录任务信息的表,每一行代表一个人的信息,有两个列族Personal和Office,其中Personal列族包含两个列Name和ResidencePhone,Office列族包含Phone和Address两个列。如"Jhon","415-212-5544","4455 Bird Ave"即为单元数据。

此图展示HBase的模型不够直观:不能清楚地展示单元数据的版本记录;没有展示出不同行可以有不同的列的重要特性。

image

第二张图

用多维Map展示HBase数据模型是一个更容易理解的方式,如下图:

  • 每一行的row-key映射为一组列族
  • 每一个列族映射为一组列标识
  • 每一个列标识映射为单元一组时间戳
  • 每一个时间戳映射为单元值

image

上图展示了第一张图中的第一行,下面构造另一行数据(如下),这也是一行合法的数据,注意跟上图的异同点:

  1. 都有两个列族。
  2. 两行数据的Personal列族包含的列标识不同
  3. 下面这行数据Office列族没有Address列。
{
    "00007":
    {
        "Personal":
        {
            "Name":
            {
                "Timestamp1":"Mary"
            }
            "Age":
            {
                "Timestamp1":"18"
                "Timestamp2":"20"
            }
        }
        "Office":
        {
            "Phone":
            {
                "Timestamp1":"028-12345678"
            }
        }
    }
}
第三张图

Key-Value结构也是理解HBase数据模型的一种方式,特别是从检索的角度来理解,如下图。

  • 以row-key为Key,得到Value为该行所有数据,包含所有列族所有列标识的数据。
  • 以row-key和列族为Key,得到Value为该行该列族下所有列标识的数据。
  • 以row-key,列族和列族下的列标识为Key,得到Value为对应行对应列族对应列标识的所有版本数据(实际上默认只返回最新版本)

image

对比关系型是数据库

理解完HBase数据模型,再来看它跟关系型数据库结构的在逻辑上的差异。

  1. 关系型数据库表结构是固定的;而HBase的表结构比较灵活,不同的行,可以有不同的列标识,使得它更容易扩展。
  2. 关系型数据库在更新数据时,是在原来的行上面修改数据;HBase数据库更新是实际上是在对应的单元插入数据,新增版本标识(时间戳)。
  3. 实际上HBase只提供字符串一种数据类型,而一般的关系型数据库有丰富的数据类型。
标签: HBase
共有 人打赏支持
粉丝 2
博文 4
码字总数 2681
×
lmqian
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: