HBase概述

数据库 Quarterback 33℃ 0评论

本文主要讨论这几个问题:

  1. 什么是HBase
  2. HBase的特点
  3. HBase的适用场景
  4. HBase的缺点

1. 什么是HBase

HBase是参考Google BigTable模型的开源实现,HBase是:
        Java开发的、
        非关系型的、
        列存储(同时也可称为是KV键值存储的)、
        持久化的、
        构建于Hadoop分布式文件系统(HDFS)之上的(默认,也可构建在符合接口的其他文件系统之上)、
        强一致性的(CP),
        高可靠的(HBase是通过底层HDFS的副本机制实现数据的冗余存储及高可靠性)、
        高性能的(HBase具有近似最优的写性能(能使I/O利用率达到饱和),以及较出色的读性能)、
        开源分布式数据库(NoSQL)。

2. HBase的特点

  • 面向列:
    • 按列存储,因为相同的列都是近似的数据,更适合压缩,适合加载后进行分析等需求。在查询只需要少量列字段的时候,可以避免加载无用列数据,减少IO。
  • 稀疏性:
    • 列数据为空的可以在实际存储时不存NULL值占位,即为空的列不占用存储空间。
  • 数据多版本:
    • 单元格(table, rowkey, column-family, column, timestamp)可以保存多个版本的值,由时间戳(timestamp)来区分
  • 灵活模式:
    • 创建表时只需要指定表名和列族,不需要定义列。因此可以在写入时动态创建列,并且存储的稀疏性,每行的列都可以不同。
  • 可以存储结构化、半结构化和非结构化数据
  • 压缩:
    • 支持指定列族压缩,以及选择压缩算法
  • 单行操作原子性:
    • 无锁CAS操作
  • 读/写强一致性:
    • 表中每行数据只会存在一个Region(即只会存在一台Region Server服务器)上,并且读写都只在这一个region上,不会同时也在副本上进行。
  • 扩展性:
    • 数据自动分区(表按Region进行拆分,一个Region保存了一段rowkey范围的行数据)
    • 负载均衡(Region会自动分割,可以重新分配迁移到其他Region Server服务器上)
    • 因此可以通过增加机器(region server)的方式扩展集群。
  • 高可靠:
    • 多副本(依靠HDFS提供的副本和自动故障转移机制)
    • WAL(预写日志)
  • 高性能:
    • 近似最优的写性能(得益于底层的LSM数据结构,按Rowkey有序存储)
    • 优秀的读性能(通过使用BloomFilter,使得按rowkey的检索理想情况下常数级别时间复杂度,Region的拆分和负载均衡可以提供读负载,以及缓存机制可加速数据获取)
  • 与Hadoop平台结合紧密
    • 底层存储可以基于Hadoop HDFS
    • 可以结合MapReduce计算框架(HBase可以作为source和sink)
    • 可以结合Hive(HBase表映射到Hive)
  • 多种client接口
    • Java client driver
    • Thrift协议接口
    • REST接口(HTTP)

3. HBase适用场景

  • 海量数据存储
  • 中小对象存储
  • 高性能写入需求
  • 按键检索,按键范围扫描
  • 数据分析(并且可以结合Hadoop MapReduce等进行计算)。

4. HBase缺点

  • 不支持跨行事务
  • 原生不支持二级索引(有其他方案构建二级索引,但很麻烦,功能也不完善)
  • 原生不支持SQL查询(可以通过Phoenix,但是有很多限制以及性能问题)
  • Java编写,GC问题导致的卡顿
  • 除按键检索,按键范围扫描外,不支持复杂查询。不支持排序(只能从rowkey上设计,按rowkey顺序)


/* 本文属于原创文章,转载请注明作者和出处 quarterback.cn,请勿用于任何商业用途 */




喜欢 (0)or分享 (0)
Quarterback.cn 打赏作者
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址