最近,在作大数据的知识储备,整理了一写本身学习的笔记,浅谈Hbase数据及设计,不足之处,还请你们多多指点。数据库
首选,HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储同样,HBase在Hadoop之上提供了相似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不一样于通常的关系数据库,它是一个适合于非结构化数据存储的数据库。另外一个不一样的是HBase基于列的而不是基于行的模式。分布式
HBase 是一个NoSQL数据库,用于处理海量数据,能够支持10亿行百万列的大表,下面咱们经过与关系数据库的对比来了解Hbase数据库的表设计oop
关系型数据库的表结构,为了更好的理解HBase表的思路,这里先回顾一下关系数据库中表的处理方式学习
例若有一个用户表user_info,有字段:id、name、tel,表名和字段须要在建表时指定大数据
create table user_info (spa
id 类型,设计
name 类型,ci
tel 类型table
)扩展
而后插入两条数据 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 存储数据的特色了