本文系转载,如有侵权,请联系我:likui0913@gmail.com

一、应用场景

HBase 与 Google 的 BigTable 极为相似,可以说 HBase 就是根据 BigTable 设计的,这一点在 BigTable 论文中也能发现。

在 BigTable 论文中提到了它的应用场景:

BigTable 是一个分布式的结构化数据存储系统,它被设计用来处理海量数据:通常是分布在数千台普通服务器上的 PB 级的数据。

Google 的很多项目使用 Bigtable 存储数据,包括 Web 索引、Google Earth、Google Finance。这些应用对 Bigtable 提出的要求差异非常大,无论是在数据量上(从 URL 到网页到卫星图像)还是在响应速度上(从后 端的批量处理到实时数据服务)。

Bigtable 已经在超过 60 个 Google 的产品和项目上得到了应用,包括 Google Analytics、Google Finance、 Orkut、Personalized Search、Writely 和 Google Earth。

以上应用场景的一个典型特点就是会不断的插入新的数据,而不怎么修改,比如Web 索引、Google Earth。而同时呢,也可能需要保存一定的历史数据用以查看或分析,比如网页快照、Google Analytics、或者联想到如今的大数据中,根据您以往的行为来预测您的行为与喜好等。另外它存储的属性可能会很多且不固定,比如一个网页的数据,除了它的内容外,可能还需要存储它相关的外链、关键字、锚点、标题、图片等。

那么根据这些应用的需求,对 BigTable 中的数据总结有以下特点:

  • 数据量大
  • 属性不固定
  • 插入多,但不存在频繁的修改
  • 存在历史版本数据

二、Table 组成元素

在 HBase 中,数据存储在具有行和列的表中,表的每行包含一个或多个列族,每个列族则可能包含一个或多个列,而行与列的交叉点则被称为单元格,用来存放数据的值。

表(Table)

Table 是在创建表时的 schema 声明定义的,其一旦创建便不可修改。

行(Row)

与传统关系系数据库类似却又不太相同,HBase 中的行具有如下特点:

  • 行由一个或多个列族组成,每个列族包含一个或多个列,列可以动态添加;
  • 每个行都包含一个行键(Rowkey),类似于关系型数据库中的主键。
    • 行键是不可分割的字节数组,Table 中的行按照行键的字典序由低到高有序排列。
  • 每行可以存储多个历史版本,默认读取的为最新的版本;

列族(Column Family)

列族是一个或多个列的集合,列可以动态增减,但是列族则需要在创建或修改表时提前定义。同一个列族下的所有列使用相同的前缀来标识其属于哪一个列族,比如列courses:historycourses:math都是列族courses的成员。

在物理存储上,一个列族下的所有成员在文件系统上是存储在一起的,这个原理对于之后的优化有着重要的意义。

单元格(Cells)

单元格是行与列的交叉点,同时因为版本的存在,所以它类似于一个3维元祖 {row, column, version},同行键一样,单元格中的内容也是不可分割的字节数组。

三、示例

以稍微修改过的 BigTable 论文中的 Webtable 为例:有一个名为 WebTable 的表格,其中包含两行(com.cnn.www 和 com.example.www)和三个名为 contents、anchor 和 people 的列族。对于第一行(com.cnn.www),anchor 包含两列(anchor:cssnsi.com,anchor:my.look.ca),contants 包含一列(contents:html)。同时,row key 为 com.cnn.www 的行保存了 5 个版本(5 个历史数据),row key 为 com.example.www 的行则只保存了 1 个版本。contents 列族中,html 列限定符中包含指定网站的整个 HTML 内容。anchor 列族中,每个限定符都包含链接到该行所代表的站点的外部站点,以及它在链接锚点(anchor)中使用的文本。people 列族中则保存与该网站相关的人员。

那么根据这个示例,可以得到如下的逻辑视图与物理视图。

逻辑视图

Row Key Time Stamp ColumnFamily contents ColumnFamily anchor ColumnFamily people
“com.cnn.www” t9   anchor:cnnsi.com = “CNN”  
“com.cnn.www” t8   anchor:my.look.ca = “CNN.com”  
“com.cnn.www” t6 contents:html = “<html>…​”    
“com.cnn.www” t5 contents:html = “<html>…​”    
“com.cnn.www” t3 contents:html = “<html>…​”    
“com.example.www” t5 contents:html = “<html>…​”   people:author = “John Doe”

与传统的关系型数据库不同的是,此表中为空的单元格(Cell)在实际中并不会占用空间或者说事实上并不存在,这正是 HBase “稀疏”的原因。使用表格只是查看 HBase 数据的一种方式,同样也可以转换成 JSON 格式:

{
"com.cnn.www": {
contents: {
t6: contents:html: "<html>..."
t5: contents:html: "<html>..."
t3: contents:html: "<html>..."
}
anchor: {
t9: anchor:cnnsi.com = "CNN"
t8: anchor:my.look.ca = "CNN.com"
}
people: {}
}
"com.example.www": {
contents: {
t5: contents:html: "<html>..."
}
anchor: {}
people: {
t5: people:author: "John Doe"
}
}
}

物理视图

HBase 的数据按照列族(cloumn family)物理存储。也即是说不同列族下的数据被分开存放,您可以随时将新的列限定符(column_family:column_qualifier)添加到现有的列族。对应上面的示例,它的物理存储如下:

列族 anchor:

Row Key Time Stamp Column Family anchor
“com.cnn.www” t9 anchor:cnnsi.com = “CNN”
“com.cnn.www” t8 anchor:my.look.ca = “CNN.com”

列族 contents:

Row Key Time Stamp Column Family contents
“com.cnn.www” t6 contents:html = “<html>…​”
“com.cnn.www” t5 contents:html = “<html>…​”
“com.cnn.www” t3 contents:html = “<html>…​”

列族 people:

Row Key Time Stamp Column Family people
“com.example.www” t5 people:author = “John Doe”

这样的物理视图有 3 个特点:

  1. 概念视图中的空的单元格不会被存储;
  2. 通过 Rowkey、时间戳、列族与限定符可以定位到一条数据;
  3. 如果未指定时间戳,将返回最新的数据。比如 get(RowKey=”com.cnn.www”, column_family:column_qualifier=”contents:html”),将返回 t6 时间的值。

参考链接

HBase 架构与工作原理1 - HBase 的数据模型的更多相关文章

  1. HBase 架构与工作原理2 - HBase 组件

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.HBase 组件概览 Master-Slave 模式: HBase 体系结构遵循传统的 master-slave 模式,由一 ...

  2. HBase 架构与工作原理3 - HBase 读写与删除原理

    本文系转载,如有侵权,请联系我:likui0913@gmail.com 一.前言 在 HBase 中,Region 是有效性和分布的基本单位,这通常也是我们在维护时能直接操作的最小单位.比如当一个集群 ...

  3. HBase(三)HBase架构与工作原理

    一.系统架构 注意:应该是每一个 RegionServer 就只有一个 HLog,而不是一个 Region 有一个 HLog. 从HBase的架构图上可以看出,HBase中的组件包括Client.Zo ...

  4. HBase 架构与工作原理5 - Region 的部分特性

    本文系转载,如有侵权,请联系我:likui0913@gmail.com Region Region 是表格可用性和分布的基本元素,由列族(Column Family)构成的 Store 组成.对象的层 ...

  5. HBase 架构与工作原理4 - 压缩、分裂与故障恢复

    本文系转载,如有侵权,请联系我:likui0913@gmail.com Compacation HBase 在读写的过程中,难免会产生无效的数据以及过小的文件,比如:MemStore 在未达到指定大小 ...

  6. 转载->CPU的内部架构和工作原理

    CPU的内部架构和工作原理 本片博客转自:http://www.cnblogs.com/onepixel/p/8724526.html  感谢博主分享! 内部架构 CPU 的根本任务就是执行指令,对计 ...

  7. CPU处理器架构和工作原理浅析

    CPU处理器架构和工作原理浅析 http://c.biancheng.net/view/3456.html 汇编语言是学习计算机如何工作的很好的工具,它需要我们具备计算机硬件的工作知识. 基本微机设计 ...

  8. 1、cpu架构和工作原理

    cpu架构和工作原理 计算机有5大基本组成部分,运算器,控制器,存储器,输入和输出.运算器和控制器封装到一起,加上寄存器组和cpu内部总线构成中央处理器(CPU).cpu的根本任务,就是执行指令,对计 ...

  9. CPU的内部架构和工作原理 (转,相当不错)

    http://blog.chinaunix.net/uid-23069658-id-3563960.html 一直以来,总以为CPU内部真是如当年学习<计算机组成原理>时书上所介绍的那样, ...

随机推荐

  1. 获取当前页面的所有链接的四种方法对比(python 爬虫)

    ''' 得到当前页面所有连接 ''' import requests import re from bs4 import BeautifulSoup from lxml import etree fr ...

  2. 解决公司的垃圾wifi dhcp获取不到ip 以及配上ip也不能联网的原因

    用手机连公司的wifi时,发现dhcp自动获取不到ip,然后配置了静态ip,但是还是无法联网, 然后发现鸡巴垃圾公司傻逼操她妈的逼原来是google的dns导致不能用???  换成114.114.11 ...

  3. SQL Server 日期格式和日期操作

    SQL Server发展至今,关于日期的格式的控制方法,有传统的方法,比如CONVERT(),也有比较便利的新方法,比如FORMAT():同样,关于日期的操作函数,也分为传统方法:DATEADD()等 ...

  4. [webapp]ios safari 正确使用js跳转

    在safari上,以往屡试不爽的location.href = url; 变得不好用了.使用该方法跳转到新的网页,无法使用后退按钮回到上个页面.想想也是,直接修改值得方式跳转总是怪怪的,但是从刚学网页 ...

  5. javascript中的toString()方法

    javascript中的toString()方法,主要用于Array.Boolean.Date.Error.Function.Number等对象.下面是这些方法的一些解析和简单应用,做个纪律,以作备忘 ...

  6. [PLC]ST语言一:LD_LDI_AND_ANI_OR_ORI

    一:LD_LDI_AND_ANI_OR_ORI基本指令 说明:简单的顺控指令不做其他说明. 控制要求:无 编程梯形图: 结构化编程ST语言: M400:=(M0 OR M1) AND M2; M401 ...

  7. Unity3D之AR开发(一)

    近期研究了下AR技术,下面给大家分享一下. 第一种方法:高通AR(Vuforia) Vuforia插件下载地址(官网): https://developer.vuforia.com/downloads ...

  8. 使用python实现解析二元一次方程

    二元一次函数的实现 import cmathimport mathimport sys 这里导入cmath包是在后面用来处理复数的情况导入math使用来处理 平方 根号等的运算而导入sys的意义是为了 ...

  9. 前端基础css

    CSS主要学习的是选择器和样式属性. 导入css的方式:行内样式,内部样式,外部样式(推荐使用) 行内样式:在标记的style属性中设定CSS样式 <p style="color: g ...

  10. Windows Server平台 confluence6.7.1安装与破解

    1.1硬件需求建议: CPU:32/64 bit 2.27GHz双核心以上之CPU: 内存:8GB以上: 硬盘:300GB,7200转以上: 建议数据库.Confluence等各自独立一台服务器. 1 ...