这三者都是流行的 NoSQL 数据库,但设计目标、数据模型和适用场景有显著差异。以下是它们的核心对比:
1. 数据模型对比
特性 |
HBase |
MongoDB |
Redis |
数据模型 |
宽列存储(类似 BigTable) |
文档存储(BSON/JSON) |
键值存储(支持多种数据结构) |
结构 |
行 + 列族 + 动态列 |
灵活的嵌套文档 |
String / Hash / List / Set 等 |
Schema |
动态列(无严格 Schema) |
Schema-less(可动态调整) |
无 Schema(纯 Key-Value) |
示例 |
RowKey + cf:col → value |
{_id: 1, name: "Alice"} |
SET user:1 "Alice" |
2. 架构与扩展性
特性 |
HBase |
MongoDB |
Redis |
存储引擎 |
基于 HDFS(磁盘优先) |
WiredTiger(内存+磁盘) |
纯内存(可持久化到磁盘) |
扩展方式 |
水平分片(RegionServer) |
分片集群(Sharding) |
集群(Redis Cluster) |
一致性 |
强一致性(单行) |
可调一致性 |
强一致性(单线程模型) |
分布式设计 |
依赖 ZooKeeper + HDFS |
自管理分片副本 |
去中心化集群 |
3. 查询能力
特性 |
HBase |
MongoDB |
Redis |
查询语言 |
Scan + Filter(有限) |
丰富的 MongoDB Query |
简单命令(GET/SET 等) |
索引 |
仅 RowKey 和列族有限索引 |
支持多字段索引 |
无索引(纯 Key 查找) |
复杂查询 |
弱(需配合 Phoenix 或 Spark) |
强(聚合、地理查询等) |
弱(仅基础数据结构操作) |
JOIN |
不支持 |
有限支持($lookup) |
不支持 |
4. 性能特点
特性 |
HBase |
MongoDB |
Redis |
读写速度 |
高吞吐写入,随机读中等 |
读写均衡 |
超高速读写(内存级) |
延迟 |
毫秒级(依赖 HDFS) |
亚毫秒级 |
微秒级 |
适用负载 |
海量数据高并发写入 |
通用 OLTP |
高频读写缓存/队列 |
5. 适用场景对比
场景 |
HBase |
MongoDB |
Redis |
大数据存储 |
✅ 日志、用户行为数据(PB 级) |
⚠️ 适合中小规模文档存储 |
❌ 不适合 |
实时查询 |
✅ 按 RowKey 快速查询 |
✅ 灵活查询(索引优化) |
✅ 超高速 Key-Value 访问 |
高并发写入 |
✅ 适合时间序列、IoT 数据 |
✅ 写性能较好 |
✅ 极致写入(如计数器) |
事务支持 |
❌ 仅单行事务 |
✅ 多文档事务(4.0+) |
✅ 简单事务(WATCH/MULTI) |
缓存场景 |
❌ 不适用 |
⚠️ 可作缓存(不如 Redis 专业) |
✅ 主要用途 |
数据结构灵活性 |
⚠️ 动态列但查询受限 |
✅ 嵌套文档、动态字段 |
✅ 多种数据结构(Hash/List 等) |
6. 如何选择?
选 HBase 如果:
- 需要存储 海量结构化/半结构化数据(如日志、用户行为)。
- 依赖 Hadoop 生态(HDFS、Spark 集成)。
- 要求 高吞吐写入 和 按 RowKey 快速查询。
选 MongoDB 如果:
- 数据模型 灵活多变(如用户配置、商品目录)。
- 需要 复杂查询(如聚合、全文搜索)。
- 希望平衡 读写性能与灵活性。
选 Redis 如果:
- 需要 超低延迟访问(如缓存、会话存储)。
- 使用 高级数据结构(如排行榜、消息队列)。
- 业务依赖 原子操作(如库存扣减)。
7. 总结
- HBase:大数据存储 + 高吞吐写入,适合 Hadoop 生态。
- MongoDB:通用文档数据库,适合灵活模式和复杂查询。
- Redis:内存数据库,适合高速缓存和实时数据处理。
组合使用案例:
- 用 Redis 缓存热点数据,MongoDB 存储主业务数据,HBase 归档历史数据。
- 例如:电商系统中,用户会话存 Redis,订单数据存 MongoDB,用户行为日志存 HBase。