关于 database-design-patterns
面向开发者的数据库设计指导技能,涵盖关系型与 NoSQL 系统的模式和持久化层设计。内容按主题整理,涉及数据建模、查询性能、扩展与一致性决策。
主要功能
- 01模式与数据建模指导
- 02ACID、BASE 和 CAP 概念
- 03索引与查询优化
- 04分区、分片与复制
- 05缓存和连接池实践
- 06按主题组织的参考文件
适用场景
- 01为新应用设计模式
- 02排查慢查询和索引问题
- 03规划数据库扩展与复制
- 04选择一致性和持久化策略
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ nickcrew/ claude-cortex --skill database-design-patterns安装后在 Claude Code 中输入/database-design-patterns确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/core-principles.mdindexing-strategies.mdpartitioning-patterns.mdquery-optimization.mdreplication-patterns.mdschema-design-patterns.md详细介绍
数据库设计模式
为设计可扩展的数据库架构、优化查询性能,以及在关系型和 NoSQL 数据库中实现稳健的数据持久化层提供专家指导。
何时使用此技能
- 为新应用设计数据库架构
- 优化慢查询和数据库性能
- 在规范化与反规范化策略之间进行选择
- 实现分区、分片或复制策略
- 在不同数据库技术之间迁移(SQL 转 NoSQL,或反之)
- 针对高可用性和灾难恢复进行设计
- 实现缓存策略和只读副本
- 对数据库进行水平或垂直扩展
- 确保分布式系统中的数据一致性
核心概念
数据建模
设计能够反映业务领域、访问模式和一致性要求的架构。根据工作负载特征,在规范化(数据完整性)与反规范化(读取性能)之间取得平衡。
ACID 与 BASE
- ACID(关系型):原子性、一致性、隔离性、持久性——提供强保证
- BASE(NoSQL):基本可用、软状态、最终一致——更加灵活
CAP 定理
分布式系统只能在以下三者中选择两项:一致性、可用性、分区容错性。
多语言持久化
针对不同用例使用合适的数据库:PostgreSQL 用于事务,MongoDB 用于文档,Redis 用于缓存,Elasticsearch 用于搜索,Cassandra 用于时间序列,Neo4j 用于图数据。
快速参考
| 任务 | 加载参考资料 |
|---|---|
| 数据库核心原则(ACID、BASE、CAP) | skills/database-design-patterns/references/core-principles.md |
| 架构模式(规范化、星型架构、文档) | skills/database-design-patterns/references/schema-design-patterns.md |
| 索引类型和策略(B-tree、哈希、覆盖索引) | skills/database-design-patterns/references/indexing-strategies.md |
| 分区和分片方法 | skills/database-design-patterns/references/partitioning-patterns.md |
| 复制模式(主副本、多主) | skills/database-design-patterns/references/replication-patterns.md |
| 查询优化和缓存 | skills/database-design-patterns/references/query-optimization.md |
工作流
阶段 1:需求分析
- 识别访问模式(读密集型还是写密集型)
- 确定一致性要求(强一致性还是最终一致性)
- 估算数据量和增长率
- 定义 SLA 要求(延迟、可用性)
阶段 2:架构设计
- 对实体及其关系建模
- 根据工作负载选择规范化程度
- 针对查询模式进行设计,而不只是考虑存储
- 考虑数据分布策略(分区/分片)
阶段 3:性能优化
- 分析查询执行计划(
EXPLAIN ANALYZE) - 为频繁执行的查询添加索引
- 在适当场景实现缓存
- 配置连接池
- 监控并迭代优化
阶段 4:扩展策略
- 使用只读副本扩展读取能力
- 考虑为大型表(>100M 行)进行分区
- 为水平扩展规划分片策略
- 通过复制实现高可用性
常见错误
过度规范化:过多的联接会拖慢读取速度。对于读密集型工作负载,应进行反规范化。
缺少索引:分析查询模式,并为频繁出现在 WHERE/JOIN 子句中的列添加索引。
索引类型错误:使用复合索引时,应采用正确的列顺序(先等值条件,再范围条件)。
忽视复制延迟:使用读后写模式处理最终一致性。
分区键不当:选择能够均匀分布数据且与查询模式相匹配的键。
N+1 查询:使用 JOIN 或批量加载,而不是在循环中逐条查询。
低效分页:对于大型数据集,使用键集分页代替 OFFSET。
连接耗尽:根据工作负载配置合适规模的连接池。
最佳实践
- 根据访问模式建模 - 围绕数据的查询方式设计架构
- 有策略地建立索引 - 为经常查询的列建立索引,避免过度索引
- 对大型表进行分区 - 用于超过 1 亿行的表或时序数据
- 通过复制扩展读取能力 - 使用主从复制扩展读取能力,使用多主复制实现地理分布
- 优化查询 - 分析执行计划,避免 N+1 问题,使用合适的分页方式
- 缓存热点数据 - 在应用层进行缓存,并设置合适的 TTL
- 使用连接池 - 根据工作负载设置连接池大小
- 持续监控 - 跟踪查询性能、索引使用情况和复制延迟
- 为增长做好规划 - 按当前负载的 3 倍进行设计
- 谨慎选择一致性级别 - 根据业务需求选择一致性级别
资源
书籍:
- 《Designing Data-Intensive Applications》(Kleppmann)
- 《High Performance MySQL》(Schwartz)
网站:
- use-the-index-luke.com
- PostgreSQL 文档
- MongoDB 文档
工具:
- EXPLAIN ANALYZE
- pg_stat_statements
- Percona Toolkit
- pt-query-digest
评论
支持 Markdown