NoSQL数据库对比
NoSQL 类型对比
| 数据库 | 类型 | 数据模型 | 最适合 | 一致性 |
|---|---|---|---|---|
| MongoDB | 文档型 | JSON/BSON 文档 | 灵活 Schema、通用业务 | 强一致(副本集)/ 最终一致 |
| Redis | 键值 / 内存型 | 字符串、哈希、列表、集合、有序集合 | 缓存、会话、排行榜、发布订阅 | 单机强一致 / 集群最终一致 |
| Cassandra | 宽列型 | 表(分区键 + 聚簇键) | 时序数据、写多读少、全球多活 | 可调一致性(ONE 到 ALL) |
| DynamoDB | 键值 + 文档 | 条目(主键 + 可选排序键) | Serverless、可预测延迟、自动伸缩 | 最终一致 / 强一致(可选) |
| ClickHouse | 列式 OLAP | 列存 + 物化视图 | 分析查询、聚合、日志分析 | 最终一致 |
| Neo4j | 图数据库 | 节点 + 边 + 属性 | 关系分析、欺诈检测、推荐系统 | 强一致(ACID) |
| InfluxDB | 时序型 | 度量值、标签、字段、时间戳 | 监控指标、IoT 数据 | 最终一致 |
CAP 定理实践
| 类型 | 保证 | 示例 | 取舍 |
|---|---|---|---|
| CP(一致性 + 分区容忍) | 数据始终一致;网络分区时可能拒绝写入 | MongoDB(w:majority)、HBase、Zookeeper | 网络分区期间可用性下降 |
| AP(可用性 + 分区容忍) | 始终响应,但可能返回旧数据 | Cassandra、DynamoDB、CouchDB | 读取可能不是最新数据 |
| CA(一致性 + 可用性) | 一致且可用,但不容忍网络分区 | 单节点传统关系数据库 | 无法水平扩展 |
选型指南
选 MongoDB:
✓ Schema 灵活、不断变化
✓ 需要丰富的文档查询
✓ 通用业务应用数据库
✗ 全球级别高写入吞吐(选 Cassandra)
选 Redis:
✓ 需要亚毫秒级延迟
✓ 缓存、限流、会话、发布订阅
✗ 数据持久性要求极高
选 Cassandra:
✓ 十亿级数据、多地区写入
✓ 时序或追加型写入负载
✗ 复杂查询、JOIN(需围绕查询建模)
选 DynamoDB:
✓ AWS 原生、Serverless、自动伸缩
✓ 任意规模下个位数毫秒延迟
✗ 复杂查询(需精心数据建模)
选 ClickHouse:
✓ 数十亿行数据的分析查询
✓ 实时聚合、数据看板
✗ OLTP 场景(行级低延迟写入)