这是我参与「第四届青训营 」 笔记创作活动的第7天
HBase设计理念
HBase基于HDFS实现存储计算分离架构的分布式表格存储服务。Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。
定义
-
HBase是一个开源的NoSQL分布式数据库,参考Google BigTable的设计,对稀疏表提供更高的存储空间使用率和读写效率。
-
采用存储计算分离架构
- 存储层基于HDFS存储数据
- 计算层提供灵活快速的水平扩展,负载均衡和故障恢复能力
-
提供强一致语义,在CAP理论中属于CP系统
区别
HBase和关系型数据库的区别:
-
数据结构
- HBase半结构化,无数据类型;按照列族稀疏存储,缺省数据不占用存储空间;支持多版本数据;
- 关系型数据库是结构化的,数据类型丰富;按完整行存储,缺省的列需要存储占位符,不支持多版本数据;
-
读写模式
- HBase支持按需读写部分列;关系型数据库支持完整的事务语义
-
事务支持
- HBase仅支持单行内原子性;;关系型数据库支持完整的事务语义
-
数据规模
- HBase适用于TB,PB级海量数据,水平扩展快速平滑;关系型数据库仅适用于GB、小量TB级,扩展过程较复杂
-
索引支持
- HBase仅支持rowkey主键索引;关系型数据库支持二级索引
补充
1.数据类型,HBase只有简单的字符类型,所有的类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型和存储方式。 2.数据操作:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接操作。 3.存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件时分离的。而传统的关系型数据库是基于表格结构和行模式保存的 4.数据维护,HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改 5.可伸缩性,Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能
HBase数据模型
Hbase是半结构化数据模型。以列族为单位存储数据,以行键索引数据
逻辑结构
- 其中Row key根据字典序实现自动排序。按照Region分别进行维护,按照列族进行切分store,底层以store为单位进行存储,一个region的数据存储在一个机器中,一个store存储为一个文件。
- 适合稀疏数据,缺省列不占用存储空间。
- 通过(rowkey, column family, column qualifier, version)唯一指定一个具体的值。
- 允许批量读取多行的部分列族/列数据。
物理结构
- 物理数据结构最小单元是KeyValue结构:
- 每个版本的数据都携带全部行列信息。
- 同一行,同一列族的数据物理上连续有序存储。
- 同列族内的KeyValue按rowkey字典序升序,column qualifier升序,version 降序排列。
- 不同列族的数据存储在相互独立的物理文件,列族不保证数据全局有序。
- 同列族下不同物理文件间不保证数据全局有序。
- 仅单个物理文件内有序。
HBase适用场景
- “近在线”的海量分布式KV /宽表存储,数据量级可达到PB级以上
- 写密集型、高吞吐应用,可接受一 定程度的时延抖动
- 宇典序主键索引、批量顺序扫描多行数据的场景
- Hadoop大数据生态友好兼容
- 半结构化数据模型,行列稀疏的数据分布,动态增减列名
- 敏捷平滑的水平扩展能力,快速响应数据体量、流量变化
HBase业界典型应用
-
半结构化/字典序有序索引的数据
- 典型用例:字节跳动推荐中台基于HBase提供“近在线”读写推荐候选数据集
-
“近在线”海量分布式lv/宽表存储
- 典型用例:Facebook存储用户的互动消息
-
写密集型高吞吐场景
- 时序存储引擎,典型场景是日志,监控数据存储
参考文献