Hadoop Database

便于时间查询; 

Hbase是一个分布式的、面向列的开源数据库,该技术来源于Chang et al所写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。

就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBaseHadoop之上提供了类似于Bittable的能力。

HBaseApacheHadoop项目的子项目。

HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另一个不同的是HBase基于列的而不是基于行的模式。

 

 

BIG Table表的想法:

以存放关系的学生表为例:

bigtable的想法为,三个列的大表:学号(key)、属性(姓名、年龄、、、)、值(value

 

世界上所有的二维表,都可以用三个列的大表来表示:

行键(key)对象的标识值、

属性、

Value

 

Bigtable表查询:  key-value的查询很快

 

HBase逻辑模型:

以表的形式存放数据;

表由行与列组成,每个列属于某个列族,由行和列确定的存储单元称为元素;

每个元素保存了同一份数据的多个版本,由时间戳来标识区分;

HABASE有多表

列族需要预先定义,列族里面的列不需要预先定义列族里面的列由限定符限制;

 

行键可以重复;

 

HBASE解决HDFS文件系统不能修改问题:

打删除标记

在内存中建立机制,数据存储内存,数据在内存中修改(追加、)内存中数据重整机制、

内存中收集一定时间的数据后,向硬盘中一写就一个文件一个块

每隔一断时间进行一数据重整合并,合并小的文件,解决删除问题

 

 

行键:

 

行键是数据行在表里的唯一标识,并作为检索记录的主键;

访问表里的行只有三种方式:

         通过单个行键访问

         给定行键的范围访问

         全表扫描

行键可以是最大长度不超过64kb的任意字符串,并按照字典序存储;

对于经常要一起读取的行,要对行键值精心设计,以便它们能放在一起存储;

 

列族与列:

 

列表示为<列族>:<限定符>

列族是预先定义好的,列族中的列是随意添加的。

Hbase在磁盘上按照列族存储数据,这种列式数据库的设计非常适合于数据分析的情形;

列族里的元素最好具有相同的读写方式(例如等长的字符串),以提高性能;

面向列存储意义:在行键相同的情况下,列族相同的会放在一起,

 

时间戳:

 

对应每次数据操作的时间,可由系统自动生成,也可以由用户显示的赋值;

HBase支持两种数据版本回收方式:

1、每个数据单元,只存储指定个数的最新版本

2、保存指定时间长度的版本

常见的客户端时间查询“某个时刻起的最新数据”或“给我全部版本的数据”

元素由行键,列族限定符,时间戳唯一决定;

元素以字节码形式存放,没有类型之分;

 


Hbase物理模型:

 wKioL1QHVYKzK1M7AAIcMsaxpOo869.jpg

 

 

RegionRegion服务器:

 

表在行方向上,按照行键范围划分成苦干的Region;

每个表最初只有一个region,当记录数增加到超过某个阈值时,开始分裂成两个region

物理上所有数据存放HDFS,region服务器提供region的管理;

一台物理节点只能跑一个 HRedionServer

一个 HRegionserver可以管理多个Region实例;

一个Region实例包括Hlog日志和存放数据的Store

Hmaster作为总控节点;

Zookeeper负责调度;

 

Hlog:

 

用于灾难恢复;             

预写式日志,记录所有更新操作,操作先记录日志,数据才会写入

 

-ROOT- .META.

 

HBase中两张特殊的表

.META. -----à记录了用户表的Region信息, .META. 可以有多个region;

-ROOT- -----à记录了 .META.表的region信息, --ROOT-  只有一个region;

Zookeeper中记录了 –ROOT-表的location

 

Memstorestorefile:

 

一个region由多个store组成,每个store包含一个列族的所有数据

Store包括位于把内在的memstore和位于硬盘的storefile;

写操作先写memstore,当memstore中的数据量达到某个阈值,Hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile

storefile文件的数量增长到一定阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成更大的storefile;

storefile大小超过一定阈值后,会把当前的region分割为两个,并由hmaster分配,到相应的region服务器,实现负载均衡;

客户端检索数据时,先在memstore找,找不到再找storefile

 

Hbase应用场景:

 

适用于大量写,同时也有读的(key --- value查询、时间)

OLTP/OLAP不适合;联机事务处理,随机读写;

很适合按照时间排序top n的场景(社交网站等)

 

Hbase瓶颈是硬盘写, oracle瓶颈是硬盘寻道时间,

 

列式数据库与行式数据库对比:

减少I/O读取量。

压缩,减少磁盘占用;