HBase是一个建立在HDFS之上的分布式,提供高可靠性,高性能,列存储,可伸缩,实时读写NoSQL的数据库系统。
1. HBase优点
- 支持大数据:一个表可以有上十亿行,上百万列
- 列式存储:面向列(簇)的存储和权限控制,列(簇)独立检索
- 记录稀疏:对于为空(null)的列并不占用内存空间,因此,表可以设计的非常稀疏,节省空间
- 支持多版本:每个单元中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
- 半结构化或非结构化数据:对于数据结构字段不够确定或杂乱无章非常难按一个概念去进行抽取的数据适合用HBase,因为HBase支持动态添加列
- 无模式:每一行都有一个可以排序的rowKey和任意多的列,列可以根据需要动态增加,同一张表的不同行可以有截然不同的列
- 高可靠性:
- WAL预写式日志(write-ahead log)机制保证了数据写入时不会因集群异常而导致写入数据丢失
- Replication机制保证了在集群出现严重的问题时,数据不会发生丢失或损坏
- Hbase底层使用HDFS,HDFS本身也有备份
- 高性能:
- 底层的LSM数据结构和Rowkey有序排列等架构上的独特设计,使得Hbase具有非常高的写入性能
- region切分,主键索引和缓存机制使得Hbase在海量数据下具备一定的随机读取性能,该性能针对Rowkey的查询能到达到毫秒级别
2. HBase缺点
- HBase是一个非关系型数据库但是它不支持SQL语句
- 单一RowKey固有的局限性决定了它不可能有效地支持多条件查询
- 数据类型单一,HBase中数据类型都是字符串
- 不适合于大范围扫描查询
- 不支持事务
- 不能对表数据进行修改
- 不能对列建立索引
3. HBase优化
3.1 支持多条件查询
- 使用hbase提供的filter进行多条件过滤查询
- hbase+solr,用solr实现二级索引,查询多符合条件的行健,然后再查询hbase