文档章节

三张图帮助理解HBase数据模型

lmqian
 lmqian
发布于 2017/09/03 00:20
字数 1113
阅读 31
收藏 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只提供字符串一种数据类型,而一般的关系型数据库有丰富的数据类型。

© 著作权归作者所有

共有 人打赏支持
lmqian
粉丝 1
博文 4
码字总数 2681
作品 0
成都
程序员
NOSQL之旅---HBase

最近因为项目原因,研究了Cassandra,Hbase等几个NoSQL数据库,最终决定采用HBase。在这里,我就向大家分享一下自己对HBase的理解。 在 说HBase之前,我想再唠叨几句。做互联网应用的哥们儿应...

烟花人
2013/03/28
0
4
八年磨一剑,重新定义HBase——HBase 2.0&阿里云HBase解读

摘要:2018年6月6日,阿里云ApsaraDB for HBase2.0正式发布!从2010年开始“试水”到2018年,拥有了3个PMC,6个Committer,拥有中国最多HBase Committer的公司之一的阿里巴巴是如何八年磨一剑...

Mr_zebra
06/13
0
0
hadoop学习(四)--- Hbase与传统数据库的区别

在说HBase之前,我想再唠叨几句。做互联网应用的哥们儿应该都清楚,互联网应用这东西,你没办法预测你的系统什么时候会被多少人访问,你面临的用户到底有多少,说不定今天你的用户还少,明天...

u010775025
04/24
0
0
基于HBase的实时历史数据库设计思路

实时历史数据库是实现工业海量数据采集存储的有效手段。HBase的写入性能优于查询性能,这个特点使其适合作为实时历史数据库开发的基础。 所有的开发是基于HBase的API进行,主要开发节点和数据...

什么都没想到
2017/10/23
0
0
普及HBase,阿里云HBase团队在行动

一、HBase的历史由来 HBase是一个开源的非关系型分布式数据库(NoSQL),基于谷歌的BigTable建模,是一个高可靠性、高性能、高伸缩的分布式存储系统,使用HBase技术可在廉价PC Server上搭建起...

所在jason
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

流量劫持是如何产生的?

流量劫持,这种古老的攻击沉寂了一段时间后,最近又开始闹的沸沸扬扬。众多知名品牌的路由器相继爆出存在安全漏洞,引来国内媒体纷纷报道。只要用户没改默认密码,打开一个网页甚至帖子,路由...

谢思华
19分钟前
0
0
Hadoop Client无法使用maven下载源码

最近在学习hadoop,使用maven的时候想看一下源码的注释,结果IDEA一直提示无法下载 搞得我一度以为maven坏掉了。 但是通过搜索,发现在maven仓库里确实没有源码.... 而2.8.1以及之前的版本是...

Iceberg_XTY
21分钟前
0
0
为什么程序员千万不要重写代码?

你所做的事情,也许暂时看不到成果,但不要灰心或焦虑,你不是没有成长,而是在扎根。 图片来自网络 0 前言 程序员都有一颗工程师的心,所以当他们到一片新的场地想做的第一件事就是,将旧的...

Java小铺
22分钟前
0
0
VUE集成AdminLte

1. 安装需要到插件 npm i admin-lte -Snpm i jquery -Snpm i axios -Snpm i vue-router -S 2. 配置webpack.config.js 2.1 module.exports.module.rules修改字体loader: {test: /\.(p......

Pasenger
今天
0
0
Spring Aop原理之切点表达式解析

在前面的文章(Spring AOP切点表达式详解)中,我们总结了Spring Aop切点表达式的用法,而在上文(Spring Aop原理之Advisor过滤)中我们讲到,切点表达式的解析主要是在PatternParser.parse...

爱宝贝丶
今天
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部