HBase
Hbase是一个分布式的、面向列的开源数据库,该技术来源于Chang et al所写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。
就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bittable的能力。
HBase是Apache的Hadoop项目的子项目。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另一个不同的是HBase基于列的而不是基于行的模式。
BIG Table表的想法:
以存放关系的学生表为例:
用bigtable的想法为,三个列的大表:学号(key)、属性(姓名、年龄、、、)、值(value)
世界上所有的二维表,都可以用三个列的大表来表示:
行键(key)对象的标识值、
属性、
Value
Bigtable表查询: 对key-value的查询很快
HBase逻辑模型:
以表的形式存放数据;
表由行与列组成,每个列属于某个列族,由行和列确定的存储单元称为元素;
每个元素保存了同一份数据的多个版本,由时间戳来标识区分;
HABASE有多表
列族需要预先定义,列族里面的列不需要预先定义列族里面的列由限定符限制;
行键可以重复;
HBASE解决HDFS文件系统不能修改问题:
打删除标记
在内存中建立机制,数据存储内存,数据在内存中修改(追加、)内存中数据重整机制、
内存中收集一定时间的数据后,向硬盘中一写就一个文件一个块
每隔一断时间进行一数据重整合并,合并小的文件,解决删除问题
面向时间查询:适合社交网站等应用场景
行键:
行键是数据行在表里的唯一标识,并作为检索记录的主键;
访问表里的行只有三种方式:
通过单个行键访问
给定行键的范围访问
全表扫描
行键可以是最大长度不超过64kb的任意字符串,并按照字典序存储;
对于经常要一起读取的行,要对行键值精心设计,以便它们能放在一起存储;
列族与列:
列表示为<列族>:<限定符>
列族是预先定义好的,列族中的列是随意添加的。
Hbase在磁盘上按照列族存储数据,这种列式数据库的设计非常适合于数据分析的情形;
列族里的元素最好具有相同的读写方式(例如等长的字符串),以提高性能;
面向列存储意义:在行键相同的情况下,列族相同的会放在一起,
时间戳:
对应每次数据操作的时间,可由系统自动生成,也可以由用户显示的赋值;
HBase支持两种数据版本回收方式:
1、每个数据单元,只存储指定个数的最新版本
2、保存指定时间长度的版本
常见的客户端时间查询“某个时刻起的最新数据”或“给我全部版本的数据”
元素由行键,列族限定符,时间戳唯一决定;
元素以字节码形式存放,没有类型之分;
Hbase物理模型: