数据系统架构Skill data-systems-architecture

数据系统架构技能用于设计、优化和维护高性能数据系统,涵盖数据库设计、索引策略、事务处理、可扩展性规划和性能调优,适用于数据密集型应用。关键词包括数据系统设计、数据库架构、性能优化、可扩展性、OLTP与OLAP、事务并发、数据建模。

架构设计 0 次安装 0 次浏览 更新于 3/9/2026

name: 数据系统架构 description: 在设计数据密集型应用的数据库时使用,做出性能优化的模式决策,选择标准化与反标准化,选择存储/索引策略,规划可扩展性,或评估OLTP与OLAP的权衡。也用于遇到N+1查询、ORM问题或并发问题时。

数据系统架构

概述

核心原则: 良好的数据系统架构平衡可靠性(在故障下正确操作)、可扩展性(优雅处理增长)和可维护性(随时间推移实现高效变化)。每个架构决策都涉及这些关注点之间的权衡。

此技能综合了以下三本基础文本的知识:

  • 设计数据密集型应用 (Kleppmann) - 分布式系统、存储引擎、可扩展性
  • PostgreSQL的艺术 (Fontaine) - PostgreSQL特定模式、SQL作为编程
  • PostgreSQL查询优化 (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    - 可靠性/可扩展性/可维护性,负载参数
02-data-modeling.md              - 标准化、反标准化、模式设计模式
03-storage-engines.md            - B树、LSM树、OLTP与OLAP、PostgreSQL内部
04-indexing.md                   - 索引类型、复合索引、覆盖索引、维护
05-scaling-patterns.md           - 复制、分区、分片策略
06-transactions-concurrency.md   - ACID、隔离级别、MVCC、锁定模式
07-application-integration.md    - ORM陷阱、N+1、业务逻辑放置、批处理

快速决策框架

新系统设计?
├─ 是 → 阅读01,然后02用于数据模型
└─ 否 → 什么问题?
         ├─ "查询慢" → 阅读04(索引)+ 03(存储模式)
         ├─ "数据不一致" → 阅读02(建模)+ 06(事务)
         ├─ "无法处理负载" → 阅读05(扩展)+ 03(OLTP与OLAP)
         ├─ "应用查询过多" → 阅读07(N+1、ORM模式)
         └─ "竞态条件/死锁" → 阅读06(并发)

核心概念(快速参考)

三大支柱

关注点 定义 关键问题
可靠性 系统在故障下正确工作 事物失败时会发生什么?
可扩展性 优雅处理增长 10倍负载是什么样子?
可维护性 易于操作和演进 新工程师能理解这个吗?

数据模型选择

模型 最适用于 避免使用场景
关系型 多对多关系、连接、一致性 高度分层数据、模式频繁变更
文档型 自包含文档、树结构 需要连接、多对多
图形型 高度连接数据、递归查询 简单CRUD、无关系遍历

OLTP与OLAP

方面 OLTP OLAP
查询模式 点查找、少量行 聚合、多行
优化 WHERE子句中的所有索引 较少索引、全扫描可行
存储 行导向 考虑列导向

索引类型快速参考

类型 使用案例 PostgreSQL
B树 相等、范围、排序 默认,大多数查询
哈希 仅相等 精确匹配更快
GIN 数组、JSONB、全文 @>, @@ 操作符
GiST 几何、范围类型 PostGIS、最近邻
BRIN 大型、自然有序表 时间序列数据

隔离级别

级别 防止 PostgreSQL默认?
读已提交 脏读
可重复读 + 不可重复读
串行化 所有异常 否(使用SSI)

设计检查清单

在最终确定数据架构之前:

  • [ ] 识别负载参数(读写比率、数据量、延迟要求)
  • [ ] 选择合适数据模型(关系/文档/图形混合?)
  • [ ] 先标准化到3NF,反标准化仅在测量有理由时进行
  • [ ] 针对实际查询模式设计索引(非假设)
  • [ ] 考虑10倍增长场景
  • [ ] 建立隔离级别要求
  • [ ] 定义业务逻辑位置(应用、数据库或两者)
  • [ ] 规划运维(备份、监控、迁移)

参考文献

  • Kleppmann, M. Designing Data-Intensive Applications (O’Reilly, 2017)
  • Fontaine, D. The Art of PostgreSQL (2nd ed., 2020)
  • Dombrovskaya, H., Novikov, B., Bailliekova, A. PostgreSQL Query Optimization (Apress, 2021)