`
chakey
  • 浏览: 359594 次
  • 性别: Icon_minigender_1
  • 来自: 水星
社区版块
存档分类
最新评论

HBase的数据模型

阅读更多

Hbase的数据模型

row 行

column 列

row keys 行键

column keys 列键

column families 列族

 

 

Hbase的数据模型和Bigtable的数据模型是一致的,非常适用于数据密集型的系统.

简单的说,Hbase可以简化描述为一个Map<byte[], Map<byte[], Map<byte[], Map<Long, byte[]>>>>.

一个Map建立行键和它们的列族的映射关系;第二个Map建立列族和列键的映射关系;第三个Map建立列键和时间戳的映射关系;

最后一个Map将时间戳对应到一个值上.键通常情况下为string,时间戳是个long,值为字节数组.列键通常包含它的族名例如:family:key.

一个列族可以包含无限多的列键值.所以想获得一个值,使用者需要使用get命令指定3个键来获取:

row key+column key+timestamp -> value

 

Hbase的行键是一个字节数组,但是这个数组必须有一个字符串名称,这个名词是按照字典顺序建立的,相当于索引。例如:1到100这100个数是

按照如下次序存放:1,10,100,11,12,13,14,15,16,17,18,19,2,20,21,...,9,91,92,93,94,95,96,97,98,99

 

现实例子:

为了能够更好地说明Hbase的数据模型,下面介绍一个简单的blog的数据结构设计.

假设一个blog具有如下特性:

1:blog实体,包括标题,副标题,日期,作者,类别(也就是标签),内容和评论.对于登录的用户,可以创建和更新.

2:用户,包含用户名,密码和昵称,可以登录和登出.

3:评论,包括标题,作者,内容.评论可以由匿名用户产生,这个时候,通过验证码来区分用户.

 

实体关系图(ERD)如下:

BLOGENTRY USER

PK:id_blogentry    ----------> PK:id_user

FK1:          name

    title  login

    under_title  password

    id_user

    date       COMMENT

    text   <----------PK:id_comment

    type      FK1:id_blogentry

  date

  author

  title

  text

对应的Hbase架构:

Table

Row Key

Family

Attributs

blogtable

TTYYYYMMDDHHmmss

info:

Always contains the column keys author,title,under_title. Should be IN-MEMORY and have a 1 version

 

 

text:

No column key. 3 versions

 

 

comment_title:

Column keys are written like YYYMMDDHHmmss. Should be IN-MEMORY and have a 1 version

 

 

comment_author:

Same keys. 1 version

 

 

comment_text:

Same keys. 1 version

usertable

login_name

info:

Always contains the column keys password and name. 1 version

 

 

参考wiki:

http://wiki.apache.org/hadoop/Hbase/DataModel

0
2
分享到:
评论
1 楼 shanxu9198 2013-12-15  
geilivable

相关推荐

Global site tag (gtag.js) - Google Analytics