[ PROMPT_NODE_25010 ]
nosql-expert
[ SKILL_DOCUMENTATION ]
# NoSQL 专家模式 (Cassandra & DynamoDB)
## 概述
此技能提供针对**分布式宽列存储和键值存储**(特别是 Apache Cassandra 和 Amazon DynamoDB)的专业思维模型和设计模式。
与 SQL(建模数据实体)或文档存储(如 MongoDB)不同,这些分布式系统要求您**优先对查询进行建模**。
## 何时使用
- **为规模化设计**:超越简单的单节点数据库,转向分布式集群。
- **技术选型**:评估或使用 **Cassandra**、**ScyllaDB** 或 **DynamoDB**。
- **性能调优**:排查现有 NoSQL 系统中的“热分区”或高延迟问题。
- **微服务**:实现需要高度优化读取的“每个服务一个数据库”模式。
## 思维转变:SQL vs. 分布式 NoSQL
| 特性 | SQL (关系型) | 分布式 NoSQL (Cassandra/DynamoDB) |
| :--- | :--- | :--- |
| **数据建模** | 实体 + 关系建模 | **查询** (访问模式) 建模 |
| **连接 (Joins)** | CPU 密集型,读取时执行 | 写入时**预计算** (反规范化) |
| **存储成本** | 昂贵 (最小化冗余) | 便宜 (为读取速度冗余数据) |
| **一致性** | ACID (强一致性) | **BASE (最终一致性)** / 可调 |
| **可扩展性** | 垂直扩展 (更强的机器) | **水平扩展** (更多的节点/分片) |
> **黄金法则:** 在 SQL 中,您设计数据模型是为了回答*任何*查询。在 NoSQL 中,您设计数据模型是为了高效地回答*特定*查询。
## 核心设计模式
### 1. 查询优先建模 (访问模式)
通常情况下,如果不进行迁移或创建新表/索引,您无法“事后添加查询”。
**流程:**
1. **列出所有实体** (用户, 订单, 产品)。
2. **列出所有访问模式** (“通过邮箱获取用户”, “按日期获取用户的订单”)。
3. **专门设计表**以通过单次查找来服务这些模式。
### 2. 分区键是关键
数据根据**分区键 (PK)** 分布在物理节点上。
- **目标:** 数据和流量的均匀分布。
- **反模式:** 使用低基数 PK(例如 `status="active"` 或 `gender="m"`)会产生**热分区**,将吞吐量限制在单个节点的容量内。
- **最佳实践:** 使用高基数键(用户 ID、设备 ID、复合键)。
### 3. 集群键 / 排序键
在分区内,数据在磁盘上按**集群键 (Cassandra)** 或 **排序键 (Dynamo**