这是我参与「第四届青训营」笔记创作活动的第四天
HBase 是一个开源的 NoSQL 分布式数据库
采用存算分离架构
在 CAP 理论中属于 CP 系统
HBase 和关系型数据库的区别
- 数据结构:HBase 半结构化,无数据类型,按列簇系数存储,缺省数据不占空间。关系数据库结构化,数据类型丰富,缺省数据需要存储占位符
- 读写模式:HBase 支持按需读写部分列,关系数据库必须整行读取
- 事务支持:HBase 仅支持单行内原子性,关系数据库支持完整的事务定义
- 数据规模:HBase 适用于 TB、PB 级海量数据,关系数据库仅适用于 GB、小量 TB 级
- 索引支持:HBase 仅支持 rowkey 主键索引,关系数据库支持二级索引
HBase 数据模型
以列族(column family)组织数据,以行键(rowkey)索引数据
适合稀疏数据
物理结构
数据结构的最小单元是 KeyValue 结构
每个版本的数据都会保留全部行列信息
同一行,同列族的数据物理上连续有序存储
同列族内的 KV 按 rowkey 字典序升序,column qualifier 升序,version 降序排列
不同列族的数据存储在相互独立的物理文件,列族间不保证数据全局有序
同列族下不同物理文件间不保证数据全局有序
使用场景
- “近在线”的海量分布式 KV / 宽表存储,数据量级可达到 PB 级以上
- 写密集型、高吞吐应用,可接受一定程度的时延抖动
- 字典序主键索引、批量顺序扫描多行数据的场景
- Hadoop 大数据生态友好兼容
- 半数据化数据模型,行列稀疏的数据分布,动态增减列名
- 敏捷平滑的水平扩展能力,快速响应数据体量、流量变化
HBase 数据模型的优缺点
优点
- 稀疏表友好,不存储缺省列,支持动态新增列类型
- 支持保存多版本数据
- 支持只读取部分 column family 数据,避免读取不必要的数据
- 支持的数据规模相比传统关系数据库更高,更容易水平扩展
- 支持 rowkey 字典序批量扫描数据
缺点
- 每条数据都要冗余存储行列信息
- 不支持二级索引,只能通过 rowkey 索引,查询效率依赖 rowkey 设计
- column family 数量较多时可能引发性能衰退
- 不支持数据类型,一律按字节数组存储
- 仅支持单行内的原子性操作