一、传统关系型数据库
为了更好的理解HBase表的思路,先回顾一下关系数据库中表的处理方式
例如有一个用户表user_info,有字段:id、name、tel,表名和字段需要在建表时指定
create table user_info ( id 类型, name 类型, tel 类型 )
讯享网
然后插入两条数据
讯享网insert into user_info values(...)
表结构
| ID | NAME | TEL |
| 1 | 小明 | 123 |
| 2 | 小王 | 456 |
后来字段不够用了,新用户需要记录地址,就要新增一个字段
| id |
name |
tel |
addr |
|---|---|---|---|
| 1 |
小明 |
123 |
|
| 2 |
小王 |
456 |
以后再增加需求时,就继续新增字段,或者添加一个扩展表
上面的内容主要说明的是:
- 建表的方式,需提前指定表名和字段
- 插入记录的方式,指定表名和各字段的值
- 数据表是二维结构,行和列
- 添加字段不灵活
二、HBase的表结构
建表时要指定的是:表名、列族
建表语句
create 'user_info', 'base_info', 'ext_info'
意思是新建一个表,名称是user_info,包含两个列族base_info和ext_info
这时的表结构:
| row key |
base_info |
ext_info |
|---|---|---|
| ... |
... |
... |
row key 是行键,每一行的ID,这个字段是自动创建的,建表时不需要指定
插入一条用户数据:name为‘a’,tel为‘123’
插入语句
讯享网put 'user_info', 'row1', 'base_info:name', 'a' put 'user_info', 'row1', 'base_info:tel', '123'
意思是向user_info表中行健为row1的base_info列族中添加一项数据 name:a,接着又添加一项数据tel:123
name和tel就是具体字段,属于base_info这个列族
这时的表结构:
| row key |
base_info |
ext_info |
|---|---|---|
| row1 |
name:a, tel:123 |
|
再插入一条数据:name为‘b’,addr为‘beijing’
put 'user_info', 'row2', 'base_info:name', 'b' put 'user_info', 'row2', 'ext_info:addr', 'bj'
这时的表结构:
| row key |
base_info |
ext_info |
|---|---|---|
| row1 |
name:a, tel:123 |
|
| row2 |
name:b |
addr:bj |
三、总结一下
通过上面的例子,大家应该对HBASE的数据存储结构有了一个简单认识,下面,我们通过一些图来回顾及补充一下:
1、数据模型相关概念

- 表:HBase采用表来组织数据,表由行和列组成,列划分为若干个列族。
- 行:每个HBase表都由若干行组成,每个行由行键(row key)来标识。
- 列族:一个HBase表被分组成许多“列族”(Column Family)的集合,它是基本的访问控制单元。
- 列限定符:列族里的数据通过列限定符(或列)来定位。
- 单元格:在HBase表中,通过行、列族和列限定符确定一个“单元格”(cell),单元格中存储的数据没有数据类型,总被视为字节数组byte[]。
- 时间戳:每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。

2、数据坐标
HBase中需要根据行键、列族、列限定符和时间戳来确定一个单元格


版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/69120.html