文档章节

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

lmqian
 lmqian
发布于 2017/09/03 00:20
字数 1113
阅读 40
收藏 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
成都
程序员
HBase原理深入解析(一)----HBase架构总览

前言:掌握Hbase的重要性不言而喻,掌握Hbase的设计原理更是重中之重。本文是对HBase原理进行讲解系列文章的开篇,本文尽量详细的从整体上介绍HBase的架构,并对每个部分的名词进行初步解释,...

小北觅
08/26
0
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的历史由来 HBase是一个开源的非关系型分布式数据库(NoSQL),基于谷歌的BigTable建模,是一个高可靠性、高性能、高伸缩的分布式存储系统,使用HBase技术可在廉价PC Server上搭建起...

所在jason
05/23
0
0

没有更多内容

加载失败,请刷新页面

加载更多

IDEA 鼠标跳到下一行

敲代码时有时会出现这样的情况,鼠标在图中的位置,还需要手动将鼠标移动到这行的末尾然后再回车才能到新的一行。 用【Shift + Enter】,可以【IDEA新建一行,并且光标移到新行】...

karma123
10分钟前
3
0
在Kubernetes集群中部署ownCloud云盘系统

ownCloud ownCloud is a file sharing server that puts the control and security of your own data back into your hands. 参考 建立自己的共享云盘 - 使用ownCloud 远程访问家里机器的文件......

openthings
12分钟前
1
0
Python编写的以太坊虚拟机的新实现Py-EVM

Py-EVM是用Python编写的以太坊虚拟机的新实现。目前github上695个star,正在积极开发中,但正在通过以太坊/测试提供的测试套件快速推进。我们感谢有Vitalik和现有的PyEthereum代码,使得我们...

geek12345
14分钟前
1
0
(2)集成element-ui

(2)集成element-ui 1 安装element-ui依赖 cnpm install --save element-ui 2 按需引入 借助 babel-plugin-component,我们可以只引入需要的组件,以达到减小项目体积的目的。 首先,安装 ...

neumeng
19分钟前
2
0
linux下tree命令的用法解释

tree命令,主要功能是创建文件列表,将所有文件以树的形式列出来 linux下的tree就比较强大了,但一般系统并不自带这个命令,需要手动下载安装。 安装 : 1 yum -y install tree -a 显示所有文...

嘘嘘者
32分钟前
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部