关于 data-systems-architecture
为数据系统设计提供参考的技能,整理分布式系统、PostgreSQL 与查询优化知识。通过按问题导航的参考文档,帮助设计数据模型、索引、扩展和事务方案。
主要功能
- 01数据系统架构原则
- 02数据建模与存储引擎参考
- 03索引与查询优化指导
- 04扩展与复制策略
- 05事务并发与应用集成指导
适用场景
- 01规划新数据库或模式
- 02评估规范化与反规范化取舍
- 03诊断慢查询和索引需求
- 04处理并发、扩展或 ORM 问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ ratacat/ claude-skills --skill data-systems-architecture安装后在 Claude Code 中输入/data-systems-architecture确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
01-foundational-principles.md02-data-modeling.md03-storage-engines.md04-indexing.md05-scaling-patterns.md06-transactions-concurrency.md07-application-integration.md详细介绍
数据系统架构
概述
核心原则: 良好的数据系统架构需要在可靠性(故障情况下仍能正确运行)、可扩展性(平稳应对增长)和可维护性(随着时间推移仍能高效地进行变更)之间取得平衡。每项架构决策都涉及这些方面之间的权衡。
本技能综合了三部基础著作中的知识:
- Designing Data-Intensive Applications(Kleppmann)——分布式系统、存储引擎、扩展
- The Art of PostgreSQL(Fontaine)——PostgreSQL 特定模式、将 SQL 视为编程语言
- PostgreSQL Query Optimization(Dombrovskaya 等)——执行计划、性能调优
适用场景
| 症状 | 从这里开始 |
|---|---|
| 设计新的数据库/模式 | 01-foundational-principles.md |
| 规范化与反规范化决策 | 02-data-modeling.md |
| 需要了解 OLTP 与 OLAP | 03-storage-engines.md |
| 查询缓慢、索引选择 | 04-indexing.md |
| 规划增长、只读副本 | 05-scaling-patterns.md |
| 竞态条件、死锁、隔离问题 | 06-transactions-concurrency.md |
| N+1 查询、ORM 问题、应用集成 | 07-application-integration.md |
导航
参考文件(按需加载)
01-foundational-principles.md - Reliability/Scalability/Maintainability, load parameters
02-data-modeling.md - Normalization, denormalization, schema design patterns
03-storage-engines.md - B-trees, LSM-trees, OLTP vs OLAP, PostgreSQL internals
04-indexing.md - Index types, compound indexes, covering indexes, maintenance
05-scaling-patterns.md - Replication, partitioning, sharding strategies
06-transactions-concurrency.md - ACID, isolation levels, MVCC, locking patterns
07-application-integration.md - ORM pitfalls, N+1, business logic placement, batch processing
快速决策框架
New system design?
├─ Yes → Read 01, then 02 for data model
└─ No → What's the problem?
├─ "Queries are slow" → Read 04 (indexing) + 03 (storage patterns)
├─ "Data is inconsistent" → Read 02 (modeling) + 06 (transactions)
├─ "Can't handle the load" → Read 05 (scaling) + 03 (OLTP vs OLAP)
├─ "App makes too many queries" → Read 07 (N+1, ORM patterns)
└─ "Race conditions/deadlocks" → Read 06 (concurrency)
核心概念(速查)
三大支柱
| 关注点 | 定义 | 关键问题 |
|---|---|---|
| 可靠性 | 系统在故障情况下仍能正确运行 | 出现故障时会怎样? |
| 可扩展性 | 平稳应对增长 | 负载增长 10 倍会是什么情况? |
| 可维护性 | 易于运维和演进 | 新工程师能理解它吗? |
数据模型选择
| 模型 | 最适合 | 避免使用的情况 |
|---|---|---|
| 关系型 | 多对多关系、联接、一致性 | 高度层次化的数据、频繁变更模式 |
| 文档型 | 自包含文档、树结构 | 需要联接、多对多关系 |
| 图 | 高度关联的数据、递归查询 | 简单的 CRUD、无需遍历关系 |
OLTP 与 OLAP
| 方面 | OLTP | OLAP |
|---|---|---|
| 查询模式 | 点查找、少量行 | 聚合、大量行 |
| 优化方式 | 为 WHERE 中使用的内容都创建索引 | 减少索引,全表扫描也可以 |
| 存储方式 | 面向行 | 可考虑面向列 |
索引类型速查
| 类型 | 用例 | PostgreSQL |
|---|---|---|
| B-tree | 相等、范围、排序 | 默认类型,适用于大多数查询 |
| Hash | 仅相等 | 精确匹配更快 |
| GIN | 数组、JSONB、全文搜索 | @>、@@ 运算符 |
| GiST | 几何类型、范围类型 | PostGIS、最近邻 |
| BRIN | 大型、自然有序的表 | 时序数据 |
隔离级别
| 级别 | 防止的问题 | PostgreSQL 默认值? |
|---|---|---|
| Read Committed | 脏读 | 是 |
| Repeatable Read | + 不可重复读 | 否 |
| Serializable | 所有异常 | 否(使用 SSI) |
设计检查清单
完成数据架构设计前:
- 已识别负载参数(读写比、数据量、延迟要求)
- 已选择合适的数据模型(关系型/文档型/图混合?)
- 先规范化至 3NF,仅在有测量结果支持时才进行反规范化
- 根据实际查询模式设计索引(而非假设的模式)
- 已考虑增长 10 倍的情景
- 已确定隔离级别要求
- 已明确业务逻辑所在位置(应用端、数据库端或两者)
- 已规划运维工作(备份、监控、迁移)
参考资料
- Kleppmann, M. Designing Data-Intensive Applications(O'Reilly,2017)
- Fontaine, D. The Art of PostgreSQL(第 2 版,2020)
- Dombrovskaya, H., Novikov, B., Bailliekova, A. PostgreSQL Query Optimization(Apress,2021)
评论
支持 Markdown