HBase高手之路3-HBase数据模型


image-20230220084553544

HBase高手之路3-HBase数据模型

一、简介

在HBASE中,数据存储在具有行和列的表中。这是看起来关系数据库(RDBMS)一样,但将HBASE表看成是多个维度的Map结构更容易理解。

ROWKEYC1列蔟C2列蔟
rowkey列1列2列3列4列5列6
rowkey0001
C1(Map)列1 => 值1列2 => 值2列3 => 值3
C2(Map)列4 => 值4列5 => 值5列6 => 值6
{
  "zzzzz" : "woot",
  "xyz" : "hello",
  "aaaab" : "world",
  "1" : "x",
  "aaaaa" : "y"
}

二、术语

1. 表(Table)

  • HBase中数据都是以表形式来组织的
  • HBase中的表由多个行组成

在HBase WebUI(http://hadoop001:16010中可以查看到目前HBase中的表)

image-20230327095011995

2. 行(row)

  • HBASE中的行由一个rowkey(行键)和一个或多个列组成,列的值与rowkey、列相关联
  • 行在存储时按行键按字典顺序排序
  • 行键的设计非常重要,尽量让相关的行存储在一起
  • 例如:存储网站域。如行键是域,则应该将域名反转后存储(org.apache.www、org.apache.mail、org.apache.jira)。这样,所有Apache域都在表中存储在一起,而不是根据子域的第一个字母展开

后续,我们会讲解rowkey的设计策略。

3. 列(Column)

  • HBASE中的列由列蔟(Column Family)和列限定符(Column Qualifier)组成
  • 表示如下——列蔟名:列限定符名。例如:C1:USER_ID、C1:SEX

4. 列蔟(Column Family)

image-20230327095134829

  • 出于性能原因,列蔟将一组列及其值组织在一起
  • 每个列蔟都有一组存储属性,例如:
    • 是否应该缓存在内存中
    • 数据如何被压缩或行键如何编码等
  • 表中的每一行都有相同的列蔟,但在列蔟中不存储任何内容
  • 所有的列蔟的数据全部都存储在一块(文件系统HDFS)
  • HBase官方建议所有的列蔟保持一样的列,并且将同一类的列放在一个列蔟中

5. 列标识符(Column Qualifier)

  • 列蔟中包含一个个的列限定符,这样可以为存储的数据提供索引
  • 列蔟在创建表的时候是固定的,但列限定符是不作限制的
  • 不同的行可能会存在不同的列标识符

6. 单元格(Cell)

  • 单元格是行、列系列和列限定符的组合
  • 包含一个值和一个时间戳(表示该值的版本)
  • 单元格中的内容是以二进制存储的
ROWCOLUMN+CELL
1250995column=C1:ADDRESS, timestamp=1588591604729, value=\xC9\xBD\xCE\xF7\xCA
1250995column=C1:LATEST_DATE, timestamp=1588591604729, value=2019-03-28
1250995column=C1:NAME, timestamp=1588591604729, value=\xB7\xBD\xBA\xC6\xD0\xF9
1250995column=C1:NUM_CURRENT, timestamp=1588591604729, value=398.5
1250995column=C1:NUM_PREVIOUS, timestamp=1588591604729, value=379.5
1250995column=C1:NUM_USEAGE, timestamp=1588591604729, value=19
1250995column=C1:PAY_DATE, timestamp=1588591604729, value=2019-02-26
1250995column=C1:RECORD_DATE, timestamp=1588591604729, value=2019-02-11
1250995column=C1:SEX, timestamp=1588591604729, value=\xC5\xAE
1250995column=C1:TOTAL_MONEY, timestamp=1588591604729, value=114

三、概念模型

Row KeyTime StampColumnFamily contentsColumnFamily anchorColumnFamily people
“com.cnn.www”t9anchor:cnnsi.com = “CNN”
“com.cnn.www”t8anchor:my.look.ca = “CNN.com”
“com.cnn.www”t6contents:html = “…”
“com.cnn.www”t5contents:html = “…”
“com.cnn.www”t3contents:html = “…”
“com.example.www”t5contents:html = “…”people:author = “John Doe”
  • 上述表格有两行(两个Row Key)、三个列蔟(contens、ancho、people)
  • “com.cnn.www”这一行anchor列蔟两个列(anchor:cssnsi.com、anchor:my.look.ca)、contents列蔟有个1个列(html)
  • “com.cnn.www”在HBase中有 t3、t5、t6、t8、t9 5个版本的数据
  • HBase中如果某一行的列被更新的,那么最新的数据会排在最前面,换句话说同一个rowkey的数据是按照倒序排序的
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

W_chuanqi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值