文档章节

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

lmqian
 lmqian
发布于 2017/09/03 00:20
字数 1113
阅读 24
收藏 0
点赞 1
评论 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 2.0&阿里云HBase解读

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

Mr_zebra ⋅ 06/13 ⋅ 0

hadoop学习(四)--- Hbase与传统数据库的区别

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

u010775025 ⋅ 04/24 ⋅ 0

普及HBase,阿里云HBase团队在行动

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

所在jason ⋅ 05/23 ⋅ 0

Hbase的应用场景、原理及架构分析

Hbase概述 hbase是一个构建在HDFS上的分布式列存储系统。HBase是Apache Hadoop生态系统中的重要 一员,主要用于海量结构化数据存储。从逻辑上讲,HBase将数据按照表、行和列进行存储。 如图所...

xiangxizhishi ⋅ 2017/07/22 ⋅ 0

企业打开云HBase的正确方式,来自阿里云云数据库团队的解读

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

阿里云云栖社区 ⋅ 05/31 ⋅ 0

hbase 数据库简介安装与常用命令的使用

一:hbase 简介与架构功能 二:hbase 安装与配置 三:hbase 常见shell 命令操作 一:hbase 简介与架构功能 1.1 为什么要使用hbase 数据库 1.2 hbase 简介: 1.3 HBase与Hadoop的对比 1.4 HB...

flyfish225 ⋅ 04/12 ⋅ 0

中国HBase技术社区第一届MeetUp-HBase2.0研讨圆桌会

HBase Committers&各公司HBase负责人 出席嘉宾(排名不分次序): 封神(HBase Committer,阿里) 天梧(HBase Committer,阿里) 陈恒(HBase Committer,蚂蚁金服) 李钰(HBase PMC,阿里) 王锋(奇...

wenzi0563 ⋅ 06/14 ⋅ 0

兑吧:从自建HBase迁移到阿里云HBase实战经验

业务介绍 兑吧集团包含兑吧网络和推啊网络,兑吧网络是一家致力于帮助互联网企业提升运营效率的用户运营服务平台,提供积分商城和媒体运营服务。推啊网络是一家互动式广告平台,经过多年的探...

所在jason ⋅ 06/12 ⋅ 0

Sqoop数据导入到HBase遇上的问题及解决方法

  【IT168 技术】运行bin/sqoop import --connect jdbc:mysql://ip:port/database --username * --password **--hbase-bulkload --hbase-create-table --column-family info --hbase-row-k......

中国大数据 ⋅ 05/31 ⋅ 0

多位HBase Committer圆桌会,讨论HBase2.0技术变革

HBase Committers&各公司HBase负责人 出席嘉宾(排名不分次序): 封神(HBase Committer,阿里) 天梧(HBase Committer,阿里) 陈恒(HBase Committer,蚂蚁金服) 李钰(HBase PMC,阿里) 王锋(奇...

HBase技术社区 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

R计算IV

参考文章 #读取文件 rawdata = read.csv("/path/to/csv/file",header=T) colnames(rawdata)[18] <- "y" //重命名因变量y #数据分区 训练集测试集 trainIdx <- sample(nrow(rawdata), round(......

火力全開 ⋅ 19分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

阿里云云栖社区 ⋅ 19分钟前 ⋅ 0

SQL老司机,在SQL中计算 array & map & json数据

摘要: 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primitive类型的数据。 场景 通常,我们处理数据,一列数据类型要么是字符串,要么是数字,这些都是primi...

猫耳m ⋅ 30分钟前 ⋅ 0

关于ireport自定义变量类型为list的时候

自己摸石头过河,我真的应该去趟市中心图书馆,借本真正靠谱的教材 网上的东西,只有0.01%是有用的,还有0.99%是垃圾,剩下的99%是垃圾的复制品。。 哎!~ 问题是这样的,报表带sql,从db中获...

炑炑milina ⋅ 31分钟前 ⋅ 0

Spring mvc ContextLoaderListener 原理解析

对于熟悉Spring MVC功能,首先应从web.xml 开始,在web.xml 文件中我们需要配置一个监听器 ContextLoaderListener,如下。 <!-- 加载spring上下文信息,最主要的功能是解析applicationContex...

轨迹_ ⋅ 31分钟前 ⋅ 0

阿里云发布企业数字化及上云外包平台服务:阿里云众包平台

摘要: 阿里云正式发布旗下众包平台业务(网址:https://zhongbao.aliyun.com/),支持包括:网站定制开发,APP、电商系统等软件开发,商标、商品LOGO、VI、产品包装设计、营销推广、大数据人...

阿里云官方博客 ⋅ 33分钟前 ⋅ 0

Redis安装异常解决办法

官网地址:http://redis.io/ 官网下载地址:http://redis.io/download 1. 下载Redis源码(tar.gz),并上传到Linux 2. 解压缩包:tar zxvf redis-2.8.17.tar.gz 3. 进入解压缩后的文件夹:c...

slagga ⋅ 38分钟前 ⋅ 0

006. 深入JVM学习—年轻代

1. 年轻代图片 年轻代(Young)属于JVM堆内存空间的一个组成部分 所有使用关键字new新实例化的对象一定会在伊甸园区进行保存,而对于存活区保存的一定是已经在伊甸园区存在一段时间并且经过了...

影狼 ⋅ 38分钟前 ⋅ 0

如何成为一个合格的程序员

偶尔的,我会被人问道:如何成为一名优秀的程序员,更或者,如何成为一名程序员。每次人们问起,我都力图给出不同的答案。因此,我的答案是各种各样的。下面就是我认为的成为一名优秀的程序员...

柳猫 ⋅ 39分钟前 ⋅ 0

cups error_log日志暴增

日志内容 File \"/usr/lib/cups/notifier/dbus\" has insecure permissions 解决(未验证适用范围) sudo service cups stopsudo rm /etc/cups/subscriptions.conf*sudo rm -r /var/cac......

一介码夫_Hum ⋅ 43分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部