《HBase不睡觉书》学习笔记(1、初识HBase)

海量数据与NoSQL:

伯克利大学Eric Brewer教授,提出一个CAP理论:

Consistency(一致性):数据一致更新。

Availability(可用性):良好的响应性能。

Partition tolerance(分区容错性):可靠性。

定理:任何分布式系统,只可同时满足二点,没法三者兼顾。

 

对于CAP特性,带来了NoSQL。

但NoSQL对事务性的要求并不严格。

有些数据库在部分机器宕机的情况下,依然可以正常运行,其实原理就是,把同一份数据复制成了好几份放到了好几个地方。

HBase正式这种类型的NoSQL数据库。

 

HBase是怎么来的:

HBase刚开始,只是Hadoop的一部分。

随后HBase实现了BigTable的所有特性,成为了一个非关系型分布式数据库。

最后版本发布速度,超越了Hadoop。

 

为什么要用HBase:

HBase的存储是基于Hadoop。

Hadoop拥有着,高性能,高稳定,可管理的大数据应用平台。基于Hadoop衍生出大量的开源项目。

Hadoop实现了一个,分布式文件系统(HDFS)。

HDFS有,高容错性的特点,被设计用来部署在,低廉的硬件上,而且它提供高吞吐量以访问应用程序的数据。

基于Hadoop,意味着,HBase具有超强的扩展性和吞吐量。

HBase基于键值对,随着数据量大,查询性能几乎不会下降。

HBase又是一个列式数据库,可把不同的列,存储在不同的机器上。

ps:HBase并不快,只是当数据量很大的时候,它慢的不明显。

HBase的弱项是,数据分析,基本上不支持表关联。若想实现group by或order by,需写很多的代码来实现MapReduce。

数据分析需求若,或者不需要那么灵活或者实时,可使用HBase。

 

你必须懂的基本概念:

一个HBase集群,有两种服务器:一个Master服务器和多个RegionServer服务器。

Master负责维护表结构信息,实际的数据都存储在RegionServer服务器上,直接存储在Hadoop的。

特殊的一点:客户端获取数据由客户端直连RegionServer。

HBase非常依赖ZooKeeper,在HBase中扮演着管家的角色,它管理着所有RegionServer的信息,包括具体的数据段存放在哪个RegionServer上。

客户端每次连接HBase,需先与ZooKeeper通信,查询出需连接的RegionServer地址。

HBase的架构图:

Region是什么:

Region是一段数据的集合。HBase的表,拥有一个到多个Region。

Region不能跨服务器;数据量大的时候,需要拆分成多个Region;当进行负载均衡时,Region有可能跨RegionServer;Region所有的数据存取操作,都是调用了HDFS的客户端接口来实现的。

RegionServer:是存放Region的容器。

Master:只负责协调工作。如建删表、移动Region、合并操作。这些操作的共性是,需要跨RegionServer。

 

存储架构:

最基本的存储单位是列。HBase中,不同的行有不同的列。

每个行有行键唯一标识。每个列有多个版本,多个版本的值存储在单元格中。若干个列可组成一个列族。

row key是决定,row存储顺序的唯一凭证,字典顺序。

插入数据,用了存在的row key,会把之前存在的row更新掉,之前的row存放在历史记录里面。

数据存储的最小单元:单元格。

列族:

建表时,唯一需要确定的东西。每个列族可定义,各种如过期时间、数据块缓存、是否压缩等属性。

没有列族的表,是没有意义的。一个列的名称,之前总带着它所属的列族。

列族的意义,相同的列族的列,会尽量存放在同一台机器。

单元格:

唯一确定一条结果的表达式:行键:列族:列:版本号。

每个单元格的值,被赋予一个系统生成的时间戳。

Region跟行的关系:

一个Region就是多个行的集合。

HBase每个行都是离散的。因为列族的存在,行的概念被减弱到只有一个抽象的存在。

 

要精确地,写出数据要被存储到,哪个表的哪个列族的哪个行的哪个列。

如有一行有10列,那存储一行的数据得写10行的语句。

 

你可能感兴趣的:(后台开发)