Hbase 是一个面向列的分布式数据库.Hbase不是一个关系型数据库,其设计目标是用来解决关系型数据库在海量数据处理中理论和实现的不足和局限.传统的关系型数据库上世纪七八十年代为交易系统建立 ,以满足数据一致性(ACID)为目标,并没有考虑数据规模扩大时的拓展性,和单点系统失效时的可靠性.虽然经过技术的发展,实现了对关系数据库的弥补(并行数据库),但由于理论和实现的约束,拓展从来没超过40个节点的服务器.而Hbase从一开始就为TB和PB级别的海量数据的高速存储而设计,这要求数据能够被分配在数千台普通服务器上,并能够被大量用户并发访问.
Hbase自2008年商用以来,已经被越来越多的在线服务公司所采用.其中最大的是facebook新上线整合EMAIL SNS CHAT 和短消息的在线即时通信系统.
分布式数据库HBase的特点和优势.
高可拓展性
HBase是真正意义上的线性水平拓展.数据累积到一定程度,HBase 就会对数据进行水平切分并分布到多台服务器上,在大量用户访问时,访问请求也被分配到不同的服务器上.虽然每台普通服务器的服务能力有限,但是数千台普通服务器结合到一起能够提供极高性能的访问能力.其次HBase设计了高效的缓存机制,有效提高了访问的命中率和访问性能.
高性能
HBase 的设计目的之一就是支持高并发用户数的高速读写访问.这是通过两方面来实现的:首先数据行被水平切分到不同服务器上,在大量用户访问时,访问请求也被分布到不同的服务器上,虽然每台服务器的服务能力有限,但是数千台服务器汇总起来形成了极高的访问能力.其次,Hbase设计了高效的缓存机制,提高了访问的命中率,提高了访问性能.
高可用性
HBase建立在hdfs之上.hdfs提供数据自动复制和容错的功能.HBase的日志和数据都存放在hdfs之上,即使在读写过程中当前服务器出现故障(硬盘,内存,网络等故障),日志也不会丢失,数据都可以从日志中恢复过来.
HBase会自动分配其他服务器接管并恢复这些数据.因此一旦成功写入数据,数据就会保证被持久化并冗余复制,数据的高可用性得到保证.
数据模型及其特点
HBase是一个面向列的,稀疏的,分布式的,持久化存储的多维排序映射表.表的索引是行关键字,列簇名,列关键字以及时间戳.表中的每个值都是一个未经解析的字节数组.
面向列:指的是同一个列簇中的所有数据都存储在一个文件里,从而在磁盘读写时有效降低磁盘I/O开销.并且,由于类似数据存放在一起,提高了压缩比,经过压缩的数据通常达到原来的1/3到1/5,极大的节省了存储空间.
多维表:这是对传统二维表的极大扩充.传统的二维表有两维,行和列.列在设计表结构时必须预先固定,行可以动态增加,也就是说只有一维可以动态改变.
HBase的多维表有四维,列簇需要在设计表结构时预先设定,行,列,时间维都可以动态增加,也就是说有三个维度可以动态改变.这种结构非常适合来表述有嵌套关系的数据.另外动态增删列的能力也给很多业务带来便利,特别是这些业务在不停的演化,需要的列字段也在不停的增加,多维表结构可以随时进行改变以适应业务发展需求.
稀疏表:由于多维表的列可以动态增加,必然导致相同行不同列数据大部分为空,也就是说这个表是稀疏的 .不像传统关系型数据库,HBase不存放空值,只存放有内容的表格单元(cell),因此可以支持超大稀疏表,而不带来任何开销,这对传统的表结构也带来的观念上的大转变.