Chinaunix首页 | 论坛 | 博客
  • 博客访问: 242874
  • 博文数量: 63
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 750
  • 用 户 组: 普通用户
  • 注册时间: 2015-05-10 21:59
  • 认证徽章:
个人简介

付出,终有回报!

文章分类

全部博文(63)

文章存档

2018年(6)

2017年(24)

2016年(6)

2015年(27)

分类: HADOOP

2017-02-23 22:57:55

在HBase中,数据存储在表中,表中有行和列。这个与关系型数据库(RDBMSs)的术语有些类似,但这并不是一个对我们有帮助的类比。相反,把一个HBase的表当成一个多维的Map对我们更有益处。

HBase数据模型术语

Table(表)

一个HBase表包含多个行

Row(行)

在HBase里,row是由row key和一个或多个列及其值组成。数据在被存储的时候,是按row key的字母排序存储的。因此,row key的设计是非常重要的。这样存储数据的目的就是为了让相关的行存储在相邻的位置。一个常见的row key模式是一个网站的域名。如果你的row key是域名,你应该倒着存储他们(org.apache.www,org.apache.mail,org.apache.jira)。这种方式,使得所有的Apache域名在表中是相邻存储的,而不是基于子域名的首字母展开。

Column(列)

HBase的一列由列簇和列修饰符组成,他们通常由冒号(:)分隔。

Column Family(列簇)

通常为了性能原因的考虑,列簇会把列和相应的值物理上联合在一起。每个列簇是一个存储属性的集合,例如它的值是否应该缓存在内存中,它的数据是如何压缩或它的row key是如何编码,以及其他。表中的每个行都有相同的列簇,但是一行也可能没有存储一个列簇里的任何数据。

Column Qualifier

列修饰符被加到一个列簇,以提供对一个数据片段的索引。规定一个列簇为content,一个列修饰符可能是content:html,另外一个可能是content:pdf。尽管列簇是在创建表的时候固定了,但列修饰符是可变的,在行之间可能存在很大的不同。

Cell

一个Cell是行,列簇和列修饰符的组合,并且包含一个值和时间戳,时间戳代表着值的版本。

Timestamp(时间戳)

一个时间戳是連同值一起被写入的,是值版本的唯一标识,默认情况下,时间戳表示数据写入时RegionServer的时间,但是当你在写数据到Cell的时候,你可以指定一个不同的时间戳。

一、概念视图

你可以从Jim R. Wilson写的Understanding HBase and BigTable博文中读到一个对HBase数据模型很好理解的解释。另外一个好的描述是Amandeep Khurana的Introduction to Basic Schema Design

它可能可以帮助你读到不同的方面,以此让你获得一个对HBase模式设计的更好的理解。链接的文章覆盖了这部分信息的相同范围。

下面这个例子是对BigTable论文的第2頁的表进行了轻微的修改的形式。有一个表叫做webtable,它包含两行(com.cnn.www和com.example.www)和三个列簇(contents,anchor,和people)。在这个例子中,对于第一行(com.cnn.www),anchor包含两列(anchor:cssnsi.com,anchor:my.look.ca)和包含一个列(contents:html)的contents。这个例子包含了5个row key为com.cnn.www的版本,和1个row key为com.example.www的版本,列修饰符contents:html包含了网站的整个html,anchor列簇的修饰符含有該行出现的外部站点及文本,即超链接的文本和链接地址。列簇people表示与站点相关的人。

列名 按照惯例,一个列名由它的列簇的前缀和一个修饰符组成。例如,列contents:html是由列簇contents和修饰符html构成。列簇和列修饰符由冒号(:)分隔开来。

Table 4. 表webtable

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 = “
...”
"com.cnn.www" t5 contents:html = "
..."
"com.cnn.www" t3 contents:html = "
..."

在HBase里,表里的Cell要么实际存在,要么为空且不占用空间。这就使得HBase变得“稀疏”。表格的方式不是查看HBase数据的唯一或最准确的方式。以下使用多维Map呈现了同样的信息。这只是为了描述为目的的一个模拟,可能不是非常准确。

{
  "com.cnn.www": {
    contents: {
      t6: contents:html: "..."
      t5: contents:html: "..."
      t3: contents:html: "..."
    }
    anchor: {
      t9: anchor:cnnsi.com = "CNN"
      t8: anchor:my.look.ca = "CNN.com"
    }
    people: {}
  }
  "com.example.www": {
    contents: {
      t5: contents:html: "..."
    }
    anchor: {}
    people: {
      t5: people:author: "John Doe"
    }
  }
}
阅读(1526) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
请登录后评论。

登录 注册