HBase 的表结构
HBase 的表结构
2016-10-13 杜亦舒
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中需要通过 行健、列族名、字段名、版本号才能定位到具体数据
- 插入数据时,一次插入一个字段的数据,不是像关系数据库那样一次插入多个字段
HBase 的表结构的更多相关文章
- HBase的表结构
HBase以表的形式存储数据.表有行和列组成.列划分为若干个列族/列簇(column family). 如上图所示,key1,key2,key3是三条记录的唯一的row key值,column-fa ...
- 怎样将关系型数据表转换至hbase数据表
首先须要把关系型数据库的数据表的数据添加由 "纵向延伸",转变为HBase数据表的"横向延伸" 一.Hbase的存储结构 a) HBase以表(HTa ...
- HBase-修改表结构
HBase修改表结构 package com.hbase.HBaseAdmin; import java.io.IOException; import org.apache.hadoop.conf.C ...
- Hbase之修改表结构
import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.HBaseConfiguration; impo ...
- HBase -ROOT-和.META.表结构
在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer.什么叫相应的RegionServer?就是管理你要操 ...
- hbase meta表的结构
下面看下hbase:meta 表的结构,hbase:meta表中,保存了每个表的region地址,还有一些其他信息,例如region的名字,HRegionInfo,服务器的信息.hbase:meta表 ...
- 4 hbase表结构 + hbase集群架构及表存储机制
本博文的主要内容有 .hbase读取数据过程 .HBase表结构 .附带PPT http://hbase.apache.org/ 读写的时候,就需要用hbase了,换句话说,就是读写的时候. ...
- HBase -ROOT-和.META.表结构(region定位原理)
在HBase中,大部分的操作都是在RegionServer完成的,Client端想要插入,删除,查询数据都需要先找到相应的RegionServer.什么叫相应的RegionServer?就是管理你要操 ...
- hbase表结构 + hbase集群架构及表存储机制
本博文的主要内容有 .hbase读取数据过程 .HBase表结构 .附带PPT http://hbase.apache.org/ 读写的时候,就需要用hbase了,换句话说,就是读写的时候.需要 ...
随机推荐
- html5 离线存储
在html页面中引入manifest文件 <html manifest="sample.appcache"> 在服务器添加mime-type text/cache-ma ...
- 夺命雷公狗-----React---27--小案例之react经典案例todos(清除已完成)
这个功能其实也是很简单的,就只是让todos里面的内isDown进行取反即可 然后在Zong里面进行下修改即可 效果如下所示: 代码如下所示: <!DOCTYPE html> <ht ...
- Jquery remove 高级用法
Jquery remove 高级用法 html 代码 <div class="file-image">abc1111</div><div class= ...
- 捷波朗 jabra BT3030 蓝牙耳机
蓝牙版本V2.0 通话时间 8小时 按键说明:轻敲 快按轻敲两下 在1.5秒内快速按两下按 大约 1秒钟按住 大约 4秒钟 充电提示绿灯闪亮 正在充电持续绿灯 已完全充满电 检查电量按 音量上调(+) ...
- int型、long型和long long型
long long本质上还是整型,只不过是一种超长的整型.int型:32位整型,取值范围为-2^31 ~ (2^31 - 1) . long:在32位系统是32位整型,取值范围为-2^31 ~ (2^ ...
- 【转】Tomcat版本是32位、64位问题
转载地址:http://www.cnblogs.com/greensleeves/p/3168541.html 最近遇到一个Tomcat windows安装版本是32位还是64位问题.由于一系列原因, ...
- Java读取Level-1行情dbf文件极致优化(3)
最近架构一个项目,实现行情的接入和分发,需要达到极致的低时延特性,这对于证券系统是非常重要的.接入的行情源是可以配置,既可以是Level-1,也可以是Level-2或其他第三方的源.虽然Level-1 ...
- R画图中英文字体完美解决方案
在某些时候,需要在R画图中添加中文,但是默认情况下,R对中文的支持不好. 当用R画PDF图,并且图中有中文的时候,安装并加载如下包library(showtext)然后:showtext.auto(e ...
- php封装微信SDK
<?phpclass JSSDK { private $appId = '你公众号的appid'; private $appSecret = '你公众号的appSecret'; public f ...
- 游戏对象消失三种方法的区别?(enabled/Destroy/active)
gameObject.renderer.enabled=fasle是控制一个物体是否在屏幕上渲染或显示 而物体实际还是存在的 只是想当于隐身 而物体本身的碰撞体还依然存在的GameObject.De ...