一、为什么要使用 HBase
HBase 不是关系型数据库,也不支持 SQL ,是一个适合于非结构化数据存储的数据库,而且 HBase 是一个列式数据库,不是以行式的方式存储。
当数据量越来越大,关系型数据库在服务器响应和时效性上会越来越慢,这就出现了读写分离策略,通过一个 Master 专门负责写操作,多个 Slave 负责读操作,服务器成本倍增;随着压力增加,Master 开始承受不住,这会采用分库机制, 把关联不大的数据分开部署,一些 join 查询不能使用, 需要借助中层。 随着数据量的进一步增加, 一个表的记录越来多,查询就变得很慢,于是又得搞分表,比如按 ID 取模分成以减少单个表的记录数。
使用 HBase 就简单了,只需要增加机器就可以了,HBase 会自动水平切分扩展,跟 Hadoop 的无缝集成保障了数据可靠性(HDFS)和海量数据分析的高性能(MapReduce)。
二、HBase 的应用场景
HBase 作为常用的大数据存放工具,基本解决以下三大类场景。
1. 平台类
使用 HBase 作为数据存储,捕获来自于各种数据源的增量数据。此类存放的往往是平台的数据,有时候甚至是无业务含义的,作为平台的底层存储使用。
2. 内容服务类
此类主要面向各种业务系统,将数据直接存放到 HBase 中,再读取。难度就是需要支持千万级别的并发访问及读取,需要解决服务质量的问题。这种应用场景通常业务简单,不需要关系型数据库中的很多特性。
3. 信息展示类
通过 HBase 的高存储,高吞吐等特性,可以将人们感兴趣的信息快速展现出来(如阿里巴巴的天猫双十一大屏)。
三、HBase 适合的场景:
(1)有足够多数据,如果有上亿或上千亿行数据,HBase 是很好的选择。如果只是上千万或者上百万,则使用传统的 RDBMS 可能是更好的选择,因为所有数据如果只需要在一两个节点进行存储,会导致集群其他节点限制。
(2)确信可以不依赖于 RDBMS 的额外特性(如:列数据类型、第二索引、事务、高级查询语言等)
(3)确保有足够的硬件,因为 HDFS 在小于5个数据节点时,基本体现不出它的优势。