nosql-distributed-db

star 0

当为 Cassandra/ScyllaDB/DynamoDB 等分布式宽列/键值库做查询优先建模、选分区键、单表设计与排查热分区/高延迟时使用;产出访问模式清单、分区/排序键方案、单表与反范式 schema、热分区/打分区与索引(GSI/LSI/TTL)策略;不适用于关系型 SQL 建模、MongoDB 文档建模或单机 KV 缓存选型;触发词:cassandra、scylladb、dynamodb、分区键、热分区、单表设计、GSI、宽列、查询优先建模

findscripter By findscripter schedule Updated 6/2/2026

name: nosql-distributed-db title: 分布式 NoSQL 数据库专家 description: 当为 Cassandra/ScyllaDB/DynamoDB 等分布式宽列/键值库做查询优先建模、选分区键、单表设计与排查热分区/高延迟时使用;产出访问模式清单、分区/排序键方案、单表与反范式 schema、热分区/打分区与索引(GSI/LSI/TTL)策略;不适用于关系型 SQL 建模、MongoDB 文档建模或单机 KV 缓存选型;触发词:cassandra、scylladb、dynamodb、分区键、热分区、单表设计、GSI、宽列、查询优先建模 domain: 数据/sql triggers: [cassandra, scylladb, dynamodb, 宽列数据库, wide-column, 分区键, partition key, 热分区, hot partition, 单表设计, single-table design, GSI, LSI, TTL, 查询优先建模, access pattern, ALLOW FILTERING, 反范式, denormalization, tombstone, 墓碑] tags: [nosql, cassandra, scylladb, dynamodb, wide-column, key-value, data-modeling, distributed-database, single-table-design, partitioning] level: 进阶 status: stable agents: [claude-code, codex, cursor, gemini-cli] tools: [Cassandra, ScyllaDB, DynamoDB, CQL] requires: [] related: [erd-schema-designer, database-design-advisor, postgresql-optimization, snowflake-development] combines_with: [erd-schema-designer, data-pipeline-engineer, database-design-advisor] license: MIT source: sickn33/antigravity-awesome-skills source_license: MIT

分布式 NoSQL 数据库专家

domain:数据/misc|name:nosql-distributed-db|status:stable agents:claude-code、codex、cursor、gemini-cli|license:MIT

何时使用

  • 设计面向规模的分布式宽列/键值存储:Apache Cassandra、ScyllaDB、Amazon DynamoDB。
  • 选型评估:在上述分布式库之间权衡,或判断该不该从单机库迁过来。
  • 性能调优:排查既有 NoSQL 系统的「热分区(hot partition)」、高延迟、吞吐打满单节点。
  • 微服务「一服务一库」:需要为高度优化的读路径预先建模。

核心心智:SQL 先建实体与关系、读时 JOIN;这类分布式库要查询优先建模——先列出访问模式,再为每个模式设计能一次查中的表/索引。

不该用的边界:

  • 关系型库 schema/范式/ERD 设计 → 用 erd-schema-designer,本条不做实体关系建模。
  • 写业务查询 SQL(联表/聚合/窗口)→ 用 sql-query-builder
  • MongoDB 等文档库的文档/嵌套建模、单机 Redis/KV 做缓存选型 → 不在本条范围。
  • 需要强一致事务、自由 ad-hoc 查询、跨表 JOIN/GROUP BY 的负载 → 这类库不适配,应回到关系型或 OLAP。

步骤

1. 查询优先建模(先模式,后表)
   a. 列全部实体(User / Order / Product)
   b. 列全部访问模式("按 email 取 User"、"按 User 取 Order 并按日期排序")
   c. 为每个模式设计能"单次查中"的表/索引——不要指望事后加查询
   注:这类库通常无法"以后再加查询",加新模式 = 建新表/新索引 + 数据迁移

2. 分区键(PK)定生死——决定数据落在哪个物理节点
   目标:数据与流量均匀分散
   反模式:低基数 PK(status="active"、gender="m")→ 热分区,吞吐被锁死在单节点
   正解:高基数键(User ID、Device ID、复合键)

3. 聚簇键 / 排序键——分区内磁盘排序
   Cassandra 叫 Clustering Key,DynamoDB 叫 Sort Key
   支持高效范围查询:WHERE user_id=X AND date > Y
   本质是为特定读取需求把数据预排序

4. 单表设计(邻接表,主要 DynamoDB)
   多实体类型塞一张表,PK 相同、SK 区分类型 → 一次网络请求拿全
   例:PK=USER#123 一把捞出 PROFILE + 所有 ORDER#xxx

5. 反范式与冗余——别怕一份数据存多处
   users_by_id(PK=uuid)、users_by_email(PK=email)各建一表
   代价:跨表一致性需自管(最终一致或批量写)

6. 收尾走"专家清单"逐项核对(见下)

指令

判断口诀与硬约束:

  • 建模顺序反过来:SQL 让模型回答任意查询;这里让模型高效回答特定查询。
  • 写便宜、读为王:LSM 树下 Insert/Update 只是追加,别担心写量,重点优化读效率。
  • 存储不值钱:为读速度复制数据是常态,不要为去重而牺牲读路径。
  • 一致性可调:BASE / 最终一致是默认;强一致要显式付出代价。

Cassandra / ScyllaDB 专项:

  • 主键结构:((Partition Key), Clustering Columns)
  • 无 JOIN、无聚合:聚合预算到单独的 counter 表,别想 JOIN / GROUP BY
  • ALLOW FILTERING:生产里出现它 = 数据模型错了,它意味着全集群扫描。
  • 墓碑(tombstones):删除是昂贵标记,避免高频删除模式(如把标准表当队列用)。

AWS DynamoDB 专项:

  • GSI(全局二级索引):建数据的「另一种视图」(如「按日期查 Order」而非按 User)。注意 GSI 是最终一致。
  • LSI(本地二级索引):在同一分区内换一种排序,必须建表时创建
  • WCU / RCU:理解容量模式;单表设计有助于优化消耗的容量单元。
  • TTL:用 Time-To-Live 属性自动过期旧数据(免费删除),避免产生墓碑。

示例

SQL vs 分布式 NoSQL 心智对照:

维度 SQL(关系型) 分布式 NoSQL(Cassandra/DynamoDB)
建模对象 实体 + 关系 查询(访问模式)
JOIN 读时算,吃 CPU 写时预计算(反范式)
存储成本 贵,尽量去重 便宜,为读速度复制
一致性 ACID(强) BASE(最终)/ 可调
扩展 垂直(换大机器) 水平(加节点/分片)

黄金法则:SQL 设计模型以回答任意查询;NoSQL 设计模型以高效回答特定查询。

DynamoDB 单表设计(邻接表)——一次请求拿 User + 全部 Order:

PK (Partition) | SK (Sort)   | Data Fields
USER#123       | PROFILE     | { name: "Ian", email: "..." }
USER#123       | ORDER#998   | { total: 50.00, status: "shipped" }
USER#123       | ORDER#999   | { total: 12.00, status: "pending" }

查询:PK = "USER#123"  →  一次网络请求返回 Profile 与所有 Order

专家上线前清单:

[ ] 访问模式覆盖:每个查询模式都映射到某张具体表/索引?
[ ] 基数检查:分区键唯一值是否足够多以均匀分散流量?
[ ] 分区膨胀风险:单分区(如某用户的全部订单)会否无限增长?
                  >10GB 就要"打分区",如 USER#123#2024-01
[ ] 一致性要求:该读模式能否容忍最终一致?

注意事项

三大反模式(看到就改):

  • 散播-聚合(Scatter-Gather):扫所有分区只为找一条(Scan)。
  • 热键(Hot Keys):把「周一」全部数据塞进一个分区。
  • 关系式建模:建 Author / Book 两表想在代码里 JOIN。改法:把 Book 摘要嵌进 Author,或把 Author 信息复制进 Book。

其他易错点:

  • 低基数分区键是最常见性能杀手——上线前务必过「基数检查」。
  • 生产出现 ALLOW FILTERING / 全表 Scan 几乎都是建模问题,不要靠加机器硬扛。
  • 反范式带来的跨表一致性由你负责,明确「谁负责同步冗余」。
  • 本条给的是心智模型与设计模式,不替代环境内的实测、压测与专家评审;缺关键输入(访问模式、规模、一致性要求)时先停下来追问。

互见

  • requires:无。
  • related:erd-schema-designer —— 关系型一侧的 schema/范式设计,与本条形成「关系 vs 分布式」对照;sql-query-builder —— 关系型查询编写;snowflake-development —— OLAP/数仓侧的数据开发。
  • combines_with:data-pipeline-engineer —— 反范式表常由管道写入与回填,组合解决「建模 + 灌数 + 跨表一致性」闭环。

本条采编自 sickn33/antigravity-awesome-skills(MIT 许可)。

Install via CLI
npx skills add https://github.com/findscripter/everything-skills --skill nosql-distributed-db
Repository Details
star Stars 0
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
findscripter
findscripter Explore all skills →