海量数据与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行的语句。