数据系统

数据库解决的核心问题是:如何可靠地存储、组织和检索数据,同时保证并发访问的正确性。

这个问题的答案,在过去五十年里经历了三次范式演变:

第一次:从文件到关系型数据库。Edgar Codd 在 1970 年提出关系模型,把数据组织从”如何存”的物理问题,变成了”数据之间是什么关系”的逻辑问题。SQL 成为了通用语言,ACID 成为了正确性的保证。

第二次:NoSQL 的兴起。互联网规模下,关系型数据库的强一致性和固定 Schema 成了瓶颈。文档数据库、键值存储、宽列存储、图数据库——不同的数据模型面向不同的访问模式,CAP 定理成为了分布式数据库设计的基础约束。

第三次:从基础设施到服务。今天开发一个应用,你不需要部署数据库、管理连接池、配置备份策略、处理扩容——这些全部变成了云厂商的责任。开发者只需要声明”我需要一个 Postgres”,然后直接写业务逻辑。Serverless 架构、BaaS 模型、边缘数据库、AI 原生存储,是这次范式转变的具体形态。

这个系列按三个比例组织:30% 核心基础(理论与原理)、40% 主流数据库系统(各范式的代表实现)、30% 云原生范式(新的最佳实践与开发模式)。


一、目录

本系列共 19 篇文章,分三层:核心基础(01-05)覆盖理论与原理,主流数据库系统(06-12)覆盖各范式代表实现,云原生范式(13-19)覆盖现代开发模式。

60-data-systems/
├── 00-data-systems-MOC.md                                     ← 本文件

├── ── 核心基础层(01-05)──────────────────────────────────── # 理论与原理,稳定二十年以上
├── 01-数据库概述:为什么需要数据库系统.md                     ← 历史 / DBMS 核心问题 / 分类全景
├── 02-关系型数据库:关系代数与 ACID 理论.md                   ← 关系代数 / 范式化 / ACID / MVCC 原理
├── 03-SQL:关系数据库的通用语言.md                            ← DDL·DML·TCL / 索引 / 执行计划 / 性能陷阱
├── 04-NoSQL:多模型数据库的兴起.md                            ← CAP / BASE / 四种数据模型 / 一致性哈希
├── 05-数据库内核基础:存储引擎、索引与锁.md                   ← B-Tree / LSM / 锁层次 / WAL / Buffer Pool

├── ── 主流数据库系统(06-12)──────────────────────────────── # 各范式代表实现
├── 06-PostgreSQL:最强的开源关系型数据库.md                   ← MVCC 细节 / 扩展生态(pgvector)/ 云原生核心
├── 07-MySQL:最广泛部署的关系型数据库.md                      ← InnoDB / 主从复制 / Vitess 水平分片
├── 08-SQL Server:微软生态的关系型数据库.md                   ← Always On / 列存储索引 / Azure SQL
├── 09-Redis:内存数据结构服务器.md                            ← 核心数据结构 / 持久化 / Cluster 分片
├── 10-MongoDB:文档数据库的代表.md                            ← 文档模型 / Aggregation Pipeline / Atlas
├── 11-Elasticsearch:搜索与全文索引.md                        ← 倒排索引 / BM25 / kNN 向量搜索 / OpenSearch
├── 12-ClickHouse:OLAP 与实时分析.md                          ← 列式存储 / MergeTree / 实时报表场景

└── ── 云原生范式层(13-19)────────────────────────────────── # 数据库的新开发模式(30%)
    ├── 13-云原生数据库的新范式:从基础设施到服务.md            ← Serverless / 零运维 / Neon·Supabase·Turso
    ├── 14-Serverless 数据库架构:计算存储分离与 Scale-to-Zero.md ← Neon 架构 / 连接池 / 冷启动权衡
    ├── 15-NewSQL:分布式 SQL 的下一步.md                      ← Spanner / CockroachDB / TiDB / PlanetScale
    ├── 16-BaaS 全栈数据库模型:Supabase 的范式.md             ← PostgREST / RLS / Firebase 对比
    ├── 17-数据库分支与开发工作流:GitOps for Databases.md     ← DB Branching / Preview Env / ORM 迁移
    ├── 18-边缘数据库:数据离用户更近.md                       ← SQLite 复兴 / libSQL / Cloudflare D1 / 读副本
    └── 19-向量数据库与 AI 原生存储.md                         ← Embedding / HNSW / pgvector / RAG 模式

概念线索

线索一:数据模型决定了你能问什么问题

关系模型让你问”所有下单金额超过 1000 的用户的邮箱是什么”;文档模型让你高效地取出一个嵌套对象的全部字段;图数据库让你问”和用户 A 在三跳以内认识的所有人”;时序数据库让你问”过去一小时内 CPU 使用率的 P99 是多少”。没有哪种数据模型是万能的,选择数据模型就是选择你要高效回答的问题集合。

贯穿文章:03-SQL:关系数据库的通用语言04-NoSQL:多模型数据库的兴起11-Elasticsearch:搜索与全文索引12-ClickHouse:OLAP 与实时分析

线索二:一致性、可用性、性能——永远只能选两个半

ACID 保证了事务的正确性(原子性、一致性、隔离性、持久性),但代价是性能和分布式扩展的复杂度。NoSQL 的 BASE 模型(基本可用、软状态、最终一致)换来了更好的扩展性,但应用层必须处理数据不一致的情况。CAP 定理说明了在网络分区时,你只能在一致性和可用性之间选一个。这个三角不是技术问题,是物理约束。

贯穿文章:02-关系型数据库:ACID 与关系代数04-NoSQL:多模型数据库的兴起05-数据库内核基础15-NewSQL:分布式 SQL 的下一步

线索三:数据库从基础设施变成了服务

二十年前,部署一个数据库意味着采购服务器、配置主从复制、写备份脚本、规划容量。今天,Supabase 可以在 30 秒内给你一个带 Auth、Realtime、Storage 的完整 Postgres 后端;Neon 可以在几毫秒内从 Scale-to-Zero 冷启动;数据库分支(Database Branching)让你像管代码一样管数据库的状态。这不只是运维负担的减少,是开发工作流的根本重构。

贯穿文章:13-云原生数据库的新范式14-Serverless 数据库架构16-BaaS 全栈数据库模型17-数据库分支与开发工作流

线索四:AI 重新定义了”检索”的含义

传统数据库的检索是精确匹配(WHERE id = 42)或关键词匹配(LIKE ‘%关键词%’)。AI 时代的检索是语义相似度——“找和这段文字意思最接近的内容”。向量数据库把语义搜索变成了数学问题(高维空间的近邻搜索),pgvector 把这个能力直接集成进了 Postgres。向量存储不是数据库的替代品,是数据库能力的新维度。

贯穿文章:04-NoSQL:多模型数据库的兴起19-向量数据库与 AI 原生存储


核心基础层

数据库理论与原理,稳定二十年以上。

  • 01-数据库概述:为什么需要数据库系统 从文件到数据库的历史,数据库管理系统(DBMS)解决的核心问题(并发、持久、查询),数据库的分类全景,关键历史节点(IMS → 关系模型 → NoSQL → NewSQL → 云原生)

  • 02-关系型数据库:关系代数与 ACID 理论 Edgar Codd 的关系模型,关系代数(选择、投影、连接、并集),范式化(1NF/2NF/3NF/BCNF)与反范式化,ACID 的含义与工程实现,事务隔离级别(读未提交/读已提交/可重复读/可串行化)与各级别的并发问题,MVCC 的基本原理

  • 03-SQL:关系数据库的通用语言 SQL 的历史与标准(SQL-92/SQL:1999/SQL:2003),DDL/DML/DCL/TCL 的分类,核心语法(SELECT/JOIN/GROUP BY/窗口函数),索引的使用与执行计划分析(EXPLAIN),常见性能陷阱(N+1 查询、隐式类型转换、全表扫描)

  • 04-NoSQL:多模型数据库的兴起 NoSQL 的历史背景(Google Bigtable 论文、Amazon Dynamo 论文),CAP 定理与 BASE 模型,四种 NoSQL 数据模型(键值/文档/宽列/图)及各自适用场景,一致性哈希与数据分片,最终一致性的工程含义

  • 05-数据库内核基础:存储引擎、索引与锁 B-Tree 索引与 LSM Tree 存储引擎(见 00-storage-MOC 详细展开),聚簇索引与非聚簇索引,锁的层次(表锁/行锁/间隙锁),死锁的产生与检测,Write-Ahead Log(WAL)在崩溃恢复中的作用,Buffer Pool 与脏页管理


主流数据库系统

各范式与模型的代表性实现,随版本演进持续更新。

关系型数据库

  • 06-PostgreSQL:最强的开源关系型数据库 PostgreSQL 的历史(INGRES → Postgres → PostgreSQL),MVCC 的实现细节,扩展生态(PostGIS/pgvector/TimescaleDB),逻辑复制与物理复制,分区表,JSONB 的原理与使用,PostgreSQL 在云原生时代的核心地位(几乎所有 Serverless DB 都基于 PG)

  • 07-MySQL:最广泛部署的关系型数据库 MySQL 的历史与 Oracle 收购,InnoDB 存储引擎(行锁、MVCC、聚簇索引),主从复制与 binlog,Group Replication,MySQL vs PostgreSQL 的选型考量,Vitess(MySQL 的水平分片层,PlanetScale 的基础)

  • 08-SQL Server:微软生态的关系型数据库 SQL Server 的定位与 Windows/.NET 生态,Always On 可用性组,列存储索引(ColumnStore Index)用于 HTAP,Azure SQL Database 的托管化演进,与 PostgreSQL 的功能对比

内存与缓存

  • 09-Redis:内存数据结构服务器 Redis 的核心数据结构(String/List/Hash/Set/Sorted Set),持久化机制(RDB 快照 vs AOF 日志),Pub/Sub 与 Stream,Lua 脚本,Redis Cluster 分片,常见使用模式(缓存/会话/限流/排行榜/消息队列),Redis 与 Memcached 的对比,Upstash(Serverless Redis)

文档数据库

  • 10-MongoDB:文档数据库的代表 文档模型与嵌套结构,BSON 格式,索引类型(单字段/复合/多键/地理空间),Aggregation Pipeline,副本集与 Sharded Cluster,MongoDB Atlas(托管服务),Schema 设计的反范式化最佳实践,适用场景与不适用场景

搜索引擎

  • 11-Elasticsearch:搜索与全文索引 倒排索引的原理,分词与分析器,相关性评分(BM25),分布式架构(Shard/Replica),聚合查询,ELK Stack 在日志分析中的定位,向量搜索(kNN),OpenSearch(AWS 的 Elasticsearch fork)

分析型数据库

  • 12-ClickHouse:OLAP 与实时分析 列式存储的优势(压缩比与 OLAP 查询性能),MergeTree 引擎家族,物化视图,分布式表,与传统 OLTP 数据库的根本差异,ClickHouse Cloud,适用场景(实时报表、用户行为分析、日志聚合)

云原生范式层

数据库开发与使用的新范式,重点在思想与最佳实践,而非具体产品。

  • 13-云原生数据库的新范式:从基础设施到服务 过去:部署数据库 = 管理服务器 + 配置主从 + 写备份脚本 + 规划容量 现在:声明”我需要一个 Postgres”,直接写业务逻辑 核心转变:运维责任的边界从开发者转移到云厂商,开发者只负责 Schema 和查询 新范式的核心特征:Serverless、按用量计费、自动扩展、内置高可用、零运维 代表性服务:Neon、PlanetScale、Supabase、Turso、CockroachDB Serverless

  • 14-Serverless 数据库架构:计算存储分离与 Scale-to-Zero 传统数据库:计算与存储耦合在同一台服务器 Serverless 架构:计算层(处理查询)与存储层(持久化数据)独立扩展 Scale-to-Zero:无请求时计算资源缩减到零,冷启动延迟的工程权衡 连接池的角色(PgBouncer/Pgpool-II):HTTP 接口替代长连接 Neon 的架构剖析:WAL 服务与存储分离,分支的实现原理 对开发体验的影响:不需要预估容量,按请求计费更贴近实际成本

  • 15-NewSQL:分布式 SQL 的下一步 NewSQL 的定义:既要 SQL + ACID,又要水平扩展 Google Spanner 的影响(全球分布式事务,TrueTime) CockroachDB:PostgreSQL 兼容,Raft 协议,地理分布感知 TiDB:MySQL 兼容,TiKV 存储层,HTAP(OLTP + OLAP 混合) PlanetScale:基于 Vitess 的 MySQL,数据库分支工作流 NewSQL 的适用场景:全球部署、强一致性需求、不能接受分库分表的复杂度

  • 16-BaaS 全栈数据库模型:Supabase 的范式 BaaS(Backend as a Service)的含义:数据库 + Auth + Storage + Realtime + Edge Functions 打包 Supabase 的架构:Postgres 核心,PostgREST(自动 REST API),GoTrue(Auth),Realtime(实时订阅) 与 Firebase 的对比:开源/可自部署 vs 闭源;Postgres vs Firestore 数据模型 Row Level Security(RLS):在数据库层实现访问控制,而不是在应用层 这个范式的意义:前端开发者可以直接操作数据库,后端 API 层大幅简化 局限性:适合中小规模应用,复杂业务逻辑仍需后端层

  • 17-数据库分支与开发工作流:GitOps for Databases 传统问题:代码有版本控制,数据库 Schema 却难以分支和回滚 数据库分支:像 Git 分支一样创建数据库的独立副本(用于开发、测试、PR 预览) PlanetScale 的 branching 模型,Neon 的 branching(基于 Copy-on-Write) Schema 迁移的最佳实践:迁移文件版本化、向后兼容迁移、蓝绿部署 Preview Environments:每个 PR 自动生成独立的数据库环境 Prisma / Drizzle:ORM 层的 Schema 即代码,迁移文件自动生成

  • 18-边缘数据库:数据离用户更近 边缘计算的数据困境:计算可以推到边缘,但数据通常还在中心 SQLite 的复兴:嵌入式、零配置、适合边缘节点(Cloudflare D1、Turso) libSQL:SQLite 的开源 fork,支持远程访问和复制(Turso 的基础) Cloudflare D1:SQLite at the edge,与 Workers 深度集成 读副本策略:写入走中心,读取走离用户最近的副本(Neon 的 read replicas) 适用场景:用户个性化数据、A/B 测试配置、地理感知内容

  • 19-向量数据库与 AI 原生存储 Embedding 的概念:把文本/图片/音频转换为高维向量 近邻搜索(ANN):语义搜索的数学本质,HNSW 与 IVF 算法 专用向量数据库:Pinecone、Weaviate、Qdrant、Milvus PostgreSQL 的扩展方案:pgvector,把向量搜索集成到 Postgres RAG(Retrieval-Augmented Generation):LLM + 向量数据库的标准模式 选型考量:pgvector 适合数据量中等且已用 Postgres 的场景;专用向量 DB 适合超大规模或需要多模态的场景


阅读路径

路径一:从零理解数据库

01(数据库概述,建立全局视角)
  → 02(关系型理论,ACID 与范式化)
  → 03(SQL,核心查询语言)
  → 04(NoSQL,多模型理解)
  → 05(内核基础,理解底层机制)

路径二:主流技术栈选型

06(PostgreSQL,优先理解最强的开源 RDB)
  → 09(Redis,缓存与辅助存储)
  → 10(MongoDB,文档模型的代表)
  → 12(ClickHouse,分析型场景)

路径三:全栈开发者的现代数据库实践

13(云原生范式,理解新时代的开发方式)
  → 16(BaaS 模型,Supabase 范式)
  → 17(数据库分支工作流)
  → 14(Serverless 架构,理解底层)
  → 19(向量数据库,AI 应用的存储层)

路径四:分布式系统方向

04(NoSQL 与 CAP 定理)
  → 05(数据库内核基础)
  → 15(NewSQL,分布式 SQL)
  → 08(Ceph,见存储 MOC)
  → 14(Serverless 架构)

路径五:AI 应用开发

06 或 16(PostgreSQL / Supabase 作为主数据库)
  → 19(向量数据库,语义搜索)
  → 17(数据库分支,快速迭代工作流)

与其他系列的关联

  • 00-storage-MOC — 存储引擎(B-Tree/LSM)、对象存储(S3)是数据库底层的支撑,数据湖与湖仓一体是数据系统的延伸
  • 00-networking-MOC — 数据库协议(PostgreSQL 的线协议、Redis 的 RESP 协议)、连接池、数据库集群的网络通信
  • T5-存储专题 — Linux 层面的存储操作(LVM、挂载、NFS)是数据库部署的基础设施

暂存内容

以下文件为原有笔记,后续整理时决定去留: