HBase数据库介绍
HBase是基于Google BigTable模型开发的,典型的key/value系统。正如Bigtable利用Google文件系统提供的分布式数据存储一样,HBase在Hadoop和HDFS之上提供类似Bigtable的功能。
它是建立在hdfs之上,提供高可靠性、高性能、列存储、可伸缩、实时读写nosql的数据库系统。
它是Apache Hadoop生态系统中的重要一员,主要用于海量结构化和半结构化数据存储。
它介于nosql和RDBMS之间,仅能通过主键(row key)和主键的range来检索数据,仅支持单行事务(可通过hive支持来实现多表join等复杂操作)。
HBase查询数据功能很简单,不支持join等复杂操作,不支持复杂的事务(行级的事务)
与hadoop一样,Hbase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力。
该项目的目标是托管非常大的表 (数十亿行X百万列 ) 在硬件集群上。
官方地址:http://hbase.apache.org/
HBase特点
(翻译自官网)
线性、模块化、可扩展。
严格一致的读写操作。
表的自动和可配置分片
RegionServers之间的自动故障转移支持,高可用性。
HBase表支持Hadoop MapReduce作业。
易于使用的Java API,用于客户端访问。
阻塞缓存和Bloom Filters以进行实时查询。
提供了跨集群数据复制。
HBase的存储机制
HBase是一个面向列的数据库,在表中它由行排序。
表模式定义只能列族,也就是键值对。一个表有多个列族以及每一个列族可以有任意数量的列。后续列的值连续地存储在磁盘上。表中的每个单元格值都具有时间戳。
总之,在一个HBase:
表是行的集合。
行是列族的集合。
列族是列的集合。
列是键值对的集合。
注:
面向列的数据库是存储数据表作为数据列的部分,而不是作为行数据。它们拥有列族。
行式数据库 | 列式数据库 |
---|---|
它适用于联机事务处理(OLTP)。 | 它适用于在线分析处理(OLAP)。 |
这样的数据库被设计为小数目的行和列。 | 面向列的数据库设计的巨大表。 |
HBase中的表的特点
大:一个表可以有上十亿行,上百万列
无模式:每行都有一个可排序的主键和任意多的列,列可以根据需要动态的增加,同一张表中不同的行可以有截然不同的列;
面向列:面向列(族)的存储和权限控制,列(族)独立检索。
稀疏:对于为空(null)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
数据多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
数据类型单一:Hbase中的数据都是字节数组 byte[]。
HBase | RDBMS |
---|---|
无模式,不具有固定列模式的概念;仅定义列族。 | 有模式,描述表的整体结构的约束。 |
专门创建为宽表。 HBase是横向扩展。 | 都是细而专的小表。很难形成规模。 |
没有任何事务。 | RDBMS是事务性的。 |
反规范化的数据。 | 具有规范化的数据。 |
适合用于半结构以及结构化数据。 | 适合用于结构化数据。 |