掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务

HBase 的表结构

HBase 是一个NoSQL数据库,用于处理海量数据,可以支持10亿行百万列的大表,下面就了解一下数据是如何存放在HBase表中的

关系型数据库的表结构


为了更好的理解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的处理方式

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表中还有一个重要概念:版本,每个字段的值都有版本信息(通过时间戳指定)

例如 base_info:name,每次修改时都会保留之前的值,就是说可以取到他的旧值

row key base_info ext_info
row1 name:a, tel:123
row2 name:c(v2)[name:b(v1)] addr:bj

小结


从上面建表、插入数据的过程可以看出 HBase 存储数据的特点了

  • 和关系数据库一样,也是使用行和列的结构
  • 建表时,定义的是表名和列族(字段的集合),而不是具体字段
  • 列族中可以包含任意个字段,字段名不需要预定义,每一行中同一列族中的字段也可以不一致
  • 多维结构,关系数据库的表是二维的,通过指行、列定位一个数据,HBase中需要通过 行健、列族名、字段名、版本号才能定位到具体数据
  • 插入数据时,一次插入一个字段的数据,不是像关系数据库那样一次插入多个字段


性能与架构.jpg

原文来自:性能与架构

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

掌握聚合最新动态了解行业最新趋势
API接口,开发服务,免费咨询服务
HBase 的表结构
发布:2016-10-13 10:37:54

HBase 是一个NoSQL数据库,用于处理海量数据,可以支持10亿行百万列的大表,下面就了解一下数据是如何存放在HBase表中的

关系型数据库的表结构


为了更好的理解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的处理方式

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表中还有一个重要概念:版本,每个字段的值都有版本信息(通过时间戳指定)

例如 base_info:name,每次修改时都会保留之前的值,就是说可以取到他的旧值

row key base_info ext_info
row1 name:a, tel:123
row2 name:c(v2)[name:b(v1)] addr:bj

小结


从上面建表、插入数据的过程可以看出 HBase 存储数据的特点了

  • 和关系数据库一样,也是使用行和列的结构
  • 建表时,定义的是表名和列族(字段的集合),而不是具体字段
  • 列族中可以包含任意个字段,字段名不需要预定义,每一行中同一列族中的字段也可以不一致
  • 多维结构,关系数据库的表是二维的,通过指行、列定位一个数据,HBase中需要通过 行健、列族名、字段名、版本号才能定位到具体数据
  • 插入数据时,一次插入一个字段的数据,不是像关系数据库那样一次插入多个字段


性能与架构.jpg

原文来自:性能与架构

声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com

选择想要的接口, 看看能免费获取多少次调用 选择(单选)或填写想要的接口
  • 短信API服务
  • 银行卡四元素检测[简]
  • 身份证实名认证
  • 手机状态查询
  • 三网手机实名制认证[简]
  • 身份证OCR识别
  • 证件识别
  • 企业工商信息
短信API服务
  • 短信API服务
  • 银行卡四元素检测[简]
  • 身份证实名认证
  • 手机状态查询
  • 三网手机实名制认证[简]
  • 身份证OCR识别
  • 证件识别
  • 企业工商信息
  • 确定
选择您的身份
请选择寻找接口的目的
预计每月调用量
请选择预计每月调用量
产品研发的阶段
请选择产品研发的阶段
×

前往领取
0512-88869195
数 据 驱 动 未 来
Data Drives The Future