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

数据系统架构技能专注于设计和优化数据密集型应用的数据系统,包括数据库模式设计、性能调优、索引策略、扩展规划以及OLTP和OLAP的权衡。关键词包括:数据系统架构、数据库设计、性能优化、索引、可扩展性、OLTP、OLAP、并发控制。

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

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

数据系统架构

概述

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

这项技能综合了以下三部基础著作的知识:

  • 设计数据密集型应用(Kleppmann) - 分布式系统、存储引擎、扩展
  • PostgreSQL的艺术(Fontaine) - PostgreSQL特定模式、SQL作为编程
  • PostgreSQL查询优化(Dombrovskaya等人) - 执行计划、性能调优

何时使用

症状 从何处开始
设计新的数据库/模式 01-基础原则.md
规范化和反规范化决策 02-数据建模.md
需要理解OLTP与OLAP 03-存储引擎.md
查询缓慢,索引选择 04-索引.md
规划增长,读副本 05-扩展模式.md
竞态条件、死锁、隔离问题 06-事务并发.md
N+1查询、ORM问题、应用集成 07-应用集成.md

导航

参考文件(根据需要加载)

01-基础原则.md    - 可靠性/可扩展性/可维护性、负载参数
02-数据建模.md    - 规范化、反规范化、模式设计模式
03-存储引擎.md    - B-树、LSM-树、OLTP vs OLAP、PostgreSQL内部机制
04-索引.md       - 索引类型、复合索引、覆盖索引、维护
05-扩展模式.md    - 复制、分区、分片策略
06-事务并发.md    - ACID、隔离级别、MVCC、锁定模式
07-应用集成.md    - ORM陷阱、N+1、业务逻辑放置、批处理

快速决策框架

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

核心概念(快速参考)

三大支柱

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

数据模型选择

模型 最适合 避免情况
关系型 多对多关系、连接、一致性 高度分层数据、常量模式更改
文档型 自包含文档、树结构 需要连接、多对多
图型 高度连接的数据、递归查询 简单CRUD、无关系遍历

OLTP vs OLAP

方面 OLTP OLAP
查询模式 点查找、少数行 聚合、多行
优化 索引WHERE中使用的所有内容 较少索引、全扫描OK
存储 行导向 考虑列导向

索引类型快速参考

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

隔离级别

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

设计检查清单

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

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

参考

  • Kleppmann, M. 设计数据密集型应用(O’Reilly, 2017)
  • Fontaine, D. PostgreSQL的艺术(2nd ed., 2020)
  • Dombrovskaya, H., Novikov, B., Bailliekova, A. PostgreSQL查询优化(Apress, 2021)