HBase数据结构

HBase数据结构

HBase数据模型

HBase和传统的数据库有很大的不同之处,比如MySQL,PostGreSQL,Oracle等

设计hbase的表和传统关系数据库非常不同

一个key-value存储结构的
或者说是面向列族的数据库
多版本映射的数据库

行(Row)
在表中数据依赖于行来存储,行通过行键来区分。行键没有数据类型,通常是一个字节数组。

列族(Column Family)
行中的数据通过列族来组织。列族也暗示了数据的物理排列。所以列族必须预先定义,并且不容易被修改。每行都拥有相同的列族,可能有些行的数据为空。列族是字符串和字符的组合,可以在文件系统路径
中使用。

列标识(Column Qualifier)
数据在列族中的位置是通过列标识来指定的。列标识不需要预先指定,每行的列标识也不需要相同。就像行键一样,列标识没有数据类型,通常也是字节数组。

单元(Cell)
单元是行键、列族、列标识的组合。这些数据存储在单元中,被称作单元数据。数据也不需要数据类型,通常也是字节数组。

时间戳(Timestamp)
单元数据是有版本的。版本的区分就是他们的版本号,版本号默认就是时间戳。当写入数据时,如果没有指定时间,那么默认的时间就是系统的当前时间。读取数据的时候,如果没有指定时间,那么返回的就是最新的数据。保留版本的数量根据每个列族的配置。默认的版本数量是3。

表包含两个列族,personal和office。每个列族都有两列。每个方格就是一个单元,行键根据字母顺序进行排序。

这些概念也通过API方式暴露给客户端。hbase的API数据管理包含三个主要方法:get,put和scan。get和put方法需要制定行键,scan操作是浏览一定范围的行。范围可以通过开始和结束的行键来指定。如果不指定那么就是浏览整个表数据。有时候,使用多维映射来理解数据模型可能更简单。多维映射就像下图所示

可以使用键值的方式来理解,键就是行键,值就是列中的值,但是给定一个行键仅仅能确定一行的数据。你可以把行键,列族,列标识,时间戳都看做键。而值就是单元中的数据

多版本(version)数据获取办法

当想要用HBase存储历史几个版本的数据是 (达到类似于git的效果时)可以设定版本号,
版本号为几 就是存储几个版本的数据

create ‘表名’,{NAME=‘列族名1’,VERSIONS=给定一个版本号},{NAME=‘列族名2’,VERSIONS=给定的版本号}
1、在shell端创建一个Hbase表:

create 't1','f1'

2、查看表结构

describe 't1'

表结构如下:

{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '1',... 

从上面的表结构中,我们可以看到,VERSIONS为1,也就是说,默认情况只会存取一个版本的列数据,当再次插入的时候,后面的值会覆盖前面的值。

3、修改表结构,让Hbase表支持存储3个VERSIONS的版本列数据

alter 't1',{NAME=>'f1',VERSIONS=>3}

修改后,再次查看表结构:

{NAME => 'f1', BLOOMFILTER => 'ROW', VERSIONS => '3',...

发现VERSIONS已经修改成了3.

4、插入3行数据

put 't1' ,'rowkey1','f1:name','A'
put 't1' ,'rowkey1','f1:name','B'
put 't1' ,'rowkey1','f1:name','C'

从上面可以看出,插入了3行数据到表中,并且3行数据的rowkey一致,然后使用get命令来获取这一行数据,发现只返回了最新的一行数据。

5、获取多行数据方法

get 't1' ,'rowkey1',{COLUMN=>'f1:name',VERSIONS=>3}

从上面的测试结果中,可以看出,一次性获取了3个版本的数据。

COLUMN                          CELL                                                                                     
 f1:name                        timestamp=1618813169582, value=C                                                         
 f1:name                        timestamp=1618813164775, value=B                                                         
 f1:name                        timestamp=1618813157388, value=A                                                         
1 row(s) in 0.1390 seconds
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

翁老师的教学团队

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

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

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

打赏作者

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

抵扣说明:

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

余额充值