键值型数据库
键值型数据库通过 Key-Value 键值的方式来存储数据,其中 Key 和 Value 可以是简单的对象,也可以是复杂的对象。Key 作为唯一的标识符,优点是查找速度快,在这方面明显优于关系型数据库,缺点是无法像关系型数据库一样使用条件过滤(比如 WHERE),如果你不知道去哪里找数据,就要遍历所有的键,这就会消耗大量的计算。
键值型数据库典型的使用场景是作为内存缓存。Redis 是最流行的键值型数据库。

文档型数据库
此类 数据库可存放并获取文档,可以是XML、JSON等格式。在数据库中文档作为处理信息的基本单位,一个文档就相当于一条记录。文档数据库所存放的文档,就相当于键值数据库所存放的“值”。MongoDB 是最流行的文档型数据库。此外,还有CouchDB等。
搜索引擎数据库
虽然关系型数据库采用了索引提升检索效率,但是针对全文索引效率却较低。搜索引擎 数据库是应用在搜索引擎领域的数据存储形式,由于搜索引擎会爬取大量的数据,并以特定的格式进行存储,这样在检索的时候才能保证性能最优。核心原理是“倒排索引”。
典型产品:Solr、Elasticsearch、Splunk 等。
列式数据库
列式数据库是相对于行式存储的数据库,Oracle、MySQL、SQL Server 等数据库都是采用的行式存储(Row-based),而列式数据库是将数据按照列存储到数据库中,这样做的好处是可以大量降低系统的 I/O,适合于分布式文件系统,不足在于功能相对有限。典型产品:HBase等。

深度本质解析:列式存储 & 宽列数据库(HBase 为代表)
先纠正一个高频误区: 很多人把 HBase 简单叫「列式数据库」,严格区分两类:
- 纯列式存储(OLAP 分析):ClickHouse、Hive、Parquet,按字段横向切分,面向批量统计分析;
- 宽列存储 / 列族数据库(NoSQL):HBase、Cassandra,按行 + 列族纵向分区,属于分布式 KV 衍生,面向海量随机读写;
HBase 属于宽列数据库(Column-Family Store),是分布式有序 KV 的极致扩展,和传统列式 OLAP 完全不是一套设计。
下面先把四类数据库基础模型再升级到五类,建立全局视角:
- Redis:内存单值 KV
- MongoDB:文档库(JSON 结构化单记录)
- MySQL:关系型二维行式存储
- ES:文档搜索引擎(倒排索引)
- HBase:分布式有序宽列 / 列族存储(海量离线、万亿级稀疏数据)
一、HBase 底层数学本质:有序多维 KV 映射
1. 核心五层定位键(唯一确定一个单元格)
RowKey(行键) + ColumnFamily(列族) + ColumnQualifier(列名) + Timestamp(版本) → Cell(单元格值)
你可以理解为:四维复合主键定位一个最小数据单元 对比 Redis key→value 一维 KV,HBase 是多维有序 KV。
举个直观例子:
RowKey = user_1001
ColumnFamily = info
ColumnQualifier = name
Timestamp = 1750000000
Cell Value = "张三"
2. 最关键特性:全局按 RowKey 有序排序
Redis 哈希表无序;Mongo/MySQL 主键有序但单机容量有限; HBase 所有行数据全局按 RowKey 字典序有序排列,底层基于 HDFS 持久化,天然支持范围扫描 scan startRow ~ endRow。
3. 稀疏存储天然优势(宽列核心价值)
传统行数据库(MySQL/Mongo)每行要预留全部字段空间,字段缺失也占用存储; HBase 一行可以有百万级不同列,不存在的列完全不占用磁盘,完美适配稀疏数据:
- 用户海量标签、行为日志、埋点、设备多维度指标、时序数据。
二、HBase 核心抽象概念,对标其他数据库
| HBase 概念 | MySQL 类比 | Redis 类比 | 含义 |
|---|---|---|---|
| Table 表 | Table 表 | 全局 hash 表 | 一张大宽表,万亿行无上限 |
| RowKey 行键 | 主键 PRIMARY KEY | Redis Key | 行唯一标识,全局有序,分片路由依据 |
| ColumnFamily 列族 | 分组字段 | 独立 Hash 结构 | 列的分组,物理存储隔离,必须建表提前定义 |
| Column Qualifier 列 | 字段 Column | Hash 的 field | 动态新增,无需提前定义,每行可完全不同 |
| Cell 单元格 | 单元格 (行 + 列) | HSET 单条 field-value | 最小存储单元,自带多版本时间戳 |
| Timestamp 时间戳 | 无原生多版本 | 无 | 同一行列保留多版本数据,自动过期 |
| Region 分区 | 分表 / 分片 | Redis Cluster slot | 表横向拆分分片,按 RowKey 区间划分 |
核心灵魂:列族物理隔离
同一个 RowKey 下,不同列族的数据存在完全不同的物理文件。 举例: info 列族存用户基础信息(name/age)、log 列族存行为埋点(几十万个动态列) 读取 info 时不会加载海量 log 列数据,IO 隔离,大幅减少磁盘读取量。 这是「列族」和普通列式最本质区别。
三、HBase 完整底层存储架构(从写入到磁盘)
HBase 构建在两大基础之上:
- HDFS:分布式持久化磁盘,高可靠、无限扩容
- Zookeeper:元数据管理、Region 分片分配、集群协调
1. 写入流程:LSM-Tree 结构(重中之重)
HBase、RocksDB、LevelDB 统一使用 LSM 树(日志合并树),和 MySQL B + 树、ES 倒排、Redis 哈希完全区分。 LSM 核心设计思想:牺牲少量读性能,换取超高写入吞吐。 分层结构:
- MemStore(内存有序缓冲区) 写入先放内存有序跳表,RowKey 有序,内存满后刷入磁盘生成 HFile。
- HFile(磁盘有序只读文件) 持久化文件,有序、不可修改,类似 ES 的 Segment; 更新 / 删除不会修改旧文件,仅写入带时间戳的新版本 / 删除标记。
- WAL 预写日志 写入 MemStore 前先写日志,宕机不丢数据,类似 MySQL Redo。
- 后台 Compaction 合并 大量小 HFile 后台合并,清理过期版本、删除标记,减少查询时文件扫描数量。
LSM vs B + 树核心差异
- B + 树:更新原地覆盖磁盘页,随机写多,写入吞吐低;查询快;适合在线业务库 MySQL。
- LSM 树:全部顺序写,无随机磁盘修改,百万级写入吞吐;查询需要遍历多文件,读放大;适合海量日志、离线宽表 HBase。
2. 物理文件存储结构 HFile
每个列族独立生成 HFile,文件内部有序: RowKey 升序 → 同一行内列族有序 → 列名有序 → 多版本时间戳倒序。 文件自带索引块,支持 RowKey 快速随机查 Get、区间 Scan。
3. 分布式分片:Region 区间分片
一张大表按 RowKey 切割多个 Region,每个 Region 由一台 RegionServer 管理:
- 分片规则:区间分片(0~1000,1000~2000),不同于 Redis/Mongo 哈希分片; 优势:支持大范围连续扫描,非常适合时序、有序流水数据; 劣势:RowKey 设计不当会出现热点 Region(大量数据集中一个分片)。
四、HBase 四大独有底层能力(其他数据库无法替代)
1. 天然多版本并发控制(基于 Timestamp)
每一个 Cell 自带时间戳,同一行同一列自动保存多份历史数据:
- 查询可指定读取某一历史版本;
- 支持设置 TTL,旧版本自动过期清理; 埋点、时序数据、变更记录场景刚需。
2. 极致稀疏宽表,动态无限列
建表只需要定义列族,列可以写入时随意新增,一行可以拥有几十万不同列; 对于用户行为、设备指标、实时埋点这种「每行字段完全不一样」的数据,存储压缩率远高于 MySQL/Mongo。
3. 万亿级海量数据存储,无限横向扩容
依托 HDFS 分布式存储,单表轻松支撑千亿行、PB 级数据; MySQL 分库分表到一定量级成本极高,Redis 受内存成本限制,Mongo 单集群存储上限远低于 HBase。
4. 高吞吐实时写入,适配海量日志
LSM 顺序写架构,每秒百万条写入无压力,适合实时数据流、Flink/Spark 实时数仓落地存储层。
五、区分:HBase 宽列存储 VS ClickHouse 纯列式 OLAP
很多人混淆两者,底层模型完全不同:
1. HBase(宽列 / 列族 NoSQL,OLTP 实时读写)
- 拆分维度:按行区间分 Region,列族物理隔离;
- 读写场景:随机单行 Get、区间 Scan、实时写入;
- 索引:仅 RowKey 有序主键,无二级索引;
- 存储引擎:LSM-Tree;
- 适用:实时埋点、时序设备数据、海量用户宽表、离线大表存储。
2. ClickHouse(纯列式 OLAP 分析库)
- 拆分维度:按字段横向切割,同一字段全部数据放一块;
- 读写场景:批量导入、海量聚合统计、报表分析;
- 短板:单行随机查询极慢,不适合实时更新;
- 存储引擎:列式压缩、分块存储;
- 适用:离线日志统计、大盘多维分析、数仓查询。
六、五大存储模型完整本质横向对比(Redis / Mongo / MySQL / ES / HBase)
| 数据库 | 核心底层结构 | 数据模型 | 读写优势 | 核心短板 | 核心场景 |
|---|---|---|---|---|---|
| Redis | 内存哈希表 | 一维 KV 黑盒 | 内存精准查询极致快 | 无法过滤内部字段、内存成本高 | 缓存、分布式锁、计数器 |
| MongoDB | B 树正排 | 单文档 JSON | 灵活嵌套、多维字段查询 | 海量全文检索弱、超大文档更新差 | 业务可变结构数据、中小量存储 |
| MySQL | B + 树行存 | 二维强 Schema 关系表 | 多表 JOIN、完整 ACID 事务 | 海量写入、稀疏宽表、模糊检索差 | 核心业务、订单、金融事务主库 |
| Elasticsearch | 倒排索引 + 正排 | 分词文档 | 全文检索、相关性打分、多维聚合 | 更新写放大、无强事务 | 商品搜索、全文检索、日志检索 |
| HBase | LSM-Tree 宽列列族 | 有序多维 KV 宽表 | 万亿级海量存储、高吞吐写入、有序区间扫描、稀疏数据 | 无二级索引、复杂查询弱、运维重 | 海量埋点、时序数据、超大宽表离线存储 |
七、HBase 天生优缺点(全部源于 LSM + 列族有序 KV 模型)
核心优势
- 支持 PB 级、万亿行超大规模数据,分布式无限扩容;
- LSM 顺序写入,超高吞吐,适配实时数据流;
- 行有序,支持高效区间扫描,完美适配时序数据;
- 稀疏宽表,动态列,多版本原生支持;
- 基于 HDFS,数据多副本,极高存储可靠性。
固有短板(模型无法根治)
- 仅 RowKey 主键查询高效,无成熟二级索引,按普通字段过滤必须全表 Scan;
- 读放大:查询需要合并多个 HFile,复杂查询性能一般;
- 不支持事务、JOIN、复杂聚合,计算能力弱,依赖 Spark/Flink 计算引擎;
- 运维复杂,依赖 HDFS、Zookeeper,集群维护成本高;
- 单行随机查询延迟高于 Mongo/Redis,不适合低延迟在线业务。
八、三层认知升华,吃透宽列存储本质
第一层(表层认知)
HBase 是大数据组件,存海量日志,一张表能存万亿行,支持很多动态列。
第二层(开发中层)
底层 LSM 树,数据有序存在 HDFS,按 RowKey 区间分片 Region;列族物理隔离,支持多版本、TTL;适合实时数据流落地,不适合在线复杂查询。
第三层(底层本质认知)
- HBase 本质是分布式有序多维 KV 存储,是一维 Redis KV 的扩展,通过 RowKey + 列族 + 列名扩展出宽表能力;
- LSM 树是它的核心取舍:放弃实时随机更新性能,换取海量数据高吞吐写入与磁盘持久化;
- 选型判断标准:
- 数据量亿级以上、稀疏多列、大量顺序写入、需要按主键区间遍历 → HBase 最优;
- 低延迟在线查询、多字段筛选、事务业务 → MySQL/Mongo;
- 全文检索、模糊搜索 → ES;
- 热点高速缓存 → Redis;
- 离线批量统计分析 → ClickHouse/Hive。
补充完整互联网分层存储全景
一套大数据全链路分层各司其职:
- MySQL:核心在线业务交易库
- Redis:热点高速缓存
- MongoDB:中等量级灵活结构业务数据
- ES:全文检索、日志检索
- HBase:海量实时埋点、时序宽表存储
- ClickHouse/Hive:离线数据仓库、多维统计分析
&spm=1001.2101.3001.5002&articleId=162675762&d=1&t=3&u=572c41e7e758482faa75b5130f5574dd)
327

被折叠的 条评论
为什么被折叠?



