{"name":"数据系统","id":"软件工程-架构-数据系统","content":"# 数据系统\n\n## 一、数据系统的三种基本形态（系统形态层）\n\n从**系统如何与时间和请求交互**这一第一性原理出发，数据系统可以被划分为三种稳定形态：\n\n### 1. 在线系统（Online / OLTP）\n\n* 系统以**请求—响应**为基本交互模式\n* 核心目标：低延迟、确定性响应\n* 典型约束：并发控制、一致性、尾延迟\n\n**本质特征：**\n\n> 系统必须在“现在”对“单个请求”做出回应。\n\n---\n\n### 2. 批处理系统（Batch Processing）\n\n* 系统面对的是**有限但规模巨大的历史数据**\n* 以作业（Job）为执行单元\n* 不要求即时反馈\n\n**本质特征：**\n\n> 系统关注的是“整体正确性”，而非“即时性”。\n\n---\n\n### 3. 流处理系统（Stream Processing）\n\n* 数据以事件流形式持续到达\n* 系统在事件发生后不久进行处理\n* 介于在线与批处理之间\n\n**本质特征：**\n\n> 系统试图缩短“事件发生”与“被计算”之间的时间距离。\n\n---\n\n## 二、数据系统的核心质量属性（系统基石层）\n\n无论系统形态如何变化，所有数据系统都必须在以下几个稳定维度上做权衡。\n\n### 1. 可靠性（Reliability）\n\n* **故障（Fault）**：系统偏离正常状态\n* **失效（Failure）**：系统无法对外提供服务\n\n可靠系统不是“不会出错”，而是：\n\n> **在预期故障存在的前提下，系统仍能持续提供可接受的服务能力。**\n\n这要求系统具备：\n\n* 故障检测能力\n* 故障隔离能力\n* 故障恢复能力\n\n---\n\n### 2. 可伸缩性（Scalability）\n\n可伸缩性描述的是：\n\n> 系统在负载增长时，维持性能的能力。\n\n#### 负载参数（Load Parameters）\n\n负载必须被显式建模，例如：\n\n* 请求速率\n* 读写比例\n* 数据规模增长速率\n\n#### 延迟的分布视角\n\n* 平均值无法代表真实用户体验\n* 中位数（p50）描述“典型体验”\n* p95 / p99 描述系统在压力下的稳定性\n\n**关键认知：**\n\n> 可伸缩性并不存在银弹，它永远建立在一组被接受的系统假设之上。\n\n---\n\n### 3. 可维护性（Maintainability）\n\n可维护性决定了系统的**长期演化成本**，包括：\n\n* 可操作性：运维复杂度是否可控\n* 简单性：系统是否能被人类理解\n* 可演化性：系统是否允许渐进式修改\n\n**核心结论：**\n\n> 简单性不是功能少，而是抽象正确。\n\n---\n\n## 三、数据模型：现实世界的抽象方式（建模层）\n\n数据模型的本质是：\n\n> **应用如何理解和组织现实世界中的信息。**\n\n### 1. 多层抽象视角\n\n* 应用层：领域概念\n* 逻辑存储层：关系、文档、图等模型\n* 物理层：字节、内存、电信号\n\n---\n\n### 2. 关系模型与文档模型的张力\n\n* 关系模型：\n\n  * 擅长多对多关系\n  * 强一致性、明确结构\n\n* 文档模型：\n\n  * 强调局部性与结构灵活性\n  * 一对多友好，多对多困难\n\n**历史视角：**\n\n> 文档模型在结构上，与 1970 年代的层次模型高度相似。\n\n---\n\n### 3. 阻抗不匹配（Impedance Mismatch）\n\n* 应用使用对象与引用\n* 数据库存储表与行\n\n二者之间的张力，是架构复杂度的重要来源。\n\n---\n\n## 四、查询模型与执行模型（计算层）\n\n### 1. 命令式 vs 声明式\n\n* 命令式：描述“如何计算”\n* 声明式：描述“要什么结果”\n\n**核心差异：**\n\n> 声明式语言将执行策略的选择权交给系统，从而释放并行优化空间。\n\n---\n\n### 2. 并行计算的抽象光谱\n\n* SQL / CSS 选择器：高度声明式\n* MapReduce / 函数式：中间形态\n\n图查询语言（Cypher / SPARQL）本质上是对关系遍历的高层声明。\n\n---\n\n## 五、存储结构：写入、读取与时间（存储层）\n\n### 1. 日志结构存储的本质\n\n* 仅追加（append-only）\n* 写入性能极高\n* 读取依赖索引\n\n#### 压缩与合并（Compaction）\n\n* 通过段合并消除冗余\n* 通过墓碑记录（tombstone）表达删除\n\n**关键权衡：**\n\n> 写优化必然带来读复杂性。\n\n---\n\n### 2. 索引的角色\n\n索引的本质是：\n\n> 用额外空间换取读取时间。\n\n---\n\n## 六、事务处理与分析处理的分离（分析层）\n\n### 1. OLTP 与 OLAP 的结构性冲突\n\n* OLTP：短事务、高并发\n* OLAP：扫描、聚合、低并发\n\n**解决方式：**\n\n> 通过数据复制与 ETL 实现职责隔离。\n\n---\n\n### 2. 列式存储与压缩\n\n* 列存减少无关数据读取\n* 高重复性带来高压缩率\n\n---\n\n### 3. 分布式分析系统（以 Dremel 为代表）\n\n* 行列混合存储\n* 查询执行树\n* 掉队者（Straggler）处理\n* 近似结果换取低延迟\n\n---\n\n## 七、数据编码与系统演化（演化层）\n\n### 1. 数据跨越时间\n\n数据不仅在系统间流动，也在**过去与未来**之间流动。\n\n---\n\n### 2. 兼容性原则\n\n* 向后兼容：新代码读旧数据\n* 向前兼容：旧代码读新数据\n\n字段必须具备：\n\n* 唯一标识\n* 可选性或默认值\n\n---\n\n### 3. 读模式与写模式\n\n通过分离作者模式与读者模式，系统得以在演化中保持运行。\n\n---\n\n### 4. 数据丢失的本质风险\n\n旧代码覆盖式写回，是前向兼容失败的根源。\n\n---\n\n## 八、数据流动模式（系统边界层）\n\n* 基于数据库：数据跨时间\n* 基于服务：RPC 的兼容性约束\n* 基于消息流：异步与解耦\n\n---\n\n## 九、数据系统的演进路径（系统演化模型）\n\n一个典型数据系统的演进：\n\n1. 单体 OLTP\n2. OLTP + 离线分析\n3. 引入流处理\n4. 数据仓库 / 数据湖\n5. 统一数据平台\n\n**核心原则：**\n\n> 每一次演进，都是为了解决上一个阶段的主要瓶颈，同时引入新的复杂性。\n\n## 关联内容（自动生成）\n\n- [/中间件/数据库/数据库优化.md](/中间件/数据库/数据库优化.md) 涉及数据模型优化、存储结构治理、OLTP与OLAP融合等与数据系统架构密切相关的内容\n- [/中间件/数据库/分布式数据库.md](/中间件/数据库/分布式数据库.md) 涉及OLTP/HTAP数据系统设计、水平扩展、分布式事务等高级数据系统架构内容\n- [/数据技术/流处理.md](/数据技术/流处理.md) 涉及流处理系统设计、事件时间与处理时间、精确一次性语义等与数据系统三种基本形态中的流处理相关内容\n- [/数据技术/数据处理.md](/数据技术/数据处理.md) 涉及批处理与流处理模型、计算架构等与数据系统形态层相关内容\n- [/中间件/数据库/文档数据库.md](/中间件/数据库/文档数据库.md) 涉及数据模型设计、分布式架构、OLTP系统设计等与数据系统数据模型层相关内容\n- [/数据技术/大数据.md](/数据技术/大数据.md) 涉及大数据系统架构、批处理与流处理、分布式数据系统设计等与数据系统架构相关内容\n- [/中间件/数据库/数据库.md](/中间件/数据库/数据库.md) 涉及数据模型、查询优化、数据库架构等与数据系统建模层相关内容\n- [/数据技术/数据架构.md](/数据技术/数据架构.md) 涉及数据系统架构设计、批处理vs流处理等与数据系统架构相关内容\n- [/中间件/消息队列/Kafka/Kafka.md](/中间件/消息队列/Kafka/Kafka.md) 涉及流处理架构、分布式消息系统等与数据系统数据流动相关内容\n- [/软件工程/架构/系统设计/分布式/分布式事务.md](/软件工程/架构/系统设计/分布式/分布式事务.md) 涉及分布式数据系统中的事务处理，与数据系统可靠性相关内容\n- [/数据技术/数据集成.md](/数据技术/数据集成.md) 涉及数据系统中的数据流动、批处理与流处理集成等内容\n- [/中间件/数据库/redis/Redis.md](/中间件/数据库/redis/Redis.md) 涉及数据模型设计、内存存储结构等与数据系统存储层相关内容\n- [/数据技术/数据建模.md](/数据技术/数据建模.md) 涉及数据模型设计、OLTP系统建模等与数据系统建模层相关内容\n- [/数据技术/Hadoop.md](/数据技术/Hadoop.md) 涉及批处理计算范式、分布式数据系统基础架构等内容\n- [/数据技术/数据仓库.md](/数据技术/数据仓库.md) 涉及OLTP与OLAP系统隔离、数据系统演进等与数据系统分析层相关内容\n","metadata":"name: '数据系统'\nstandardName: 'data application'\ntags: ['分布式系统', '计算机系统', '数据技术', '软件工程', '数据结构与算法']\nbooks: [\n  {name: '数据密集型应用系统设计'}\n]","hasMoreCommit":true,"totalCommits":23,"commitList":[{"date":"2026-02-12T14:07:03+08:00","author":"MY","message":"doc: 整理标签","hash":"290b3e8ad18f48832ac282290238d020fc030a88"},{"date":"2026-02-10T17:47:30+08:00","author":"MY","message":"docs(data-system): 完善数据系统架构文档并新增相关图片资源","hash":"da4469977093bf395a33a53a32059784c193c7e1"},{"date":"2025-11-27T19:59:51+08:00","author":"MY","message":"docs: 调整多个文档中的链接格式与内容排版 - 统一去除部分链接的 Markdown 文件后缀（.md） - 修正不一致的列表项格式和缩进问题 - 删除冗余或错误的文件引用路径 - 提升文档可读性与内部跳转准确性","hash":"b81b0f366a2079be0ad09074488f23c13cb51615"},{"date":"2025-11-16T21:30:56+08:00","author":"MY","message":"docs: 统一并精简文档标签","hash":"21362e9d7aeb62e05364cd5e7f3a3c24d7e293c7"},{"date":"2023-10-11T16:18:10+08:00","author":"MY","message":"📦数据技术","hash":"98d429f8a999f0ceaea096843ebd435264fb160e"},{"date":"2023-05-08T17:00:18+08:00","author":"MY","message":"✏数据系统","hash":"9bbcdb1da1d8ae8188887712a85f858a72c02692"},{"date":"2023-04-06T20:45:43+08:00","author":"MY","message":"✏️数据系统","hash":"a2a67416f3291470e61f080cb997d844fbd3ef38"},{"date":"2023-03-09T21:57:08+08:00","author":"MY","message":"✏️大数据","hash":"7a27b0720a414f16ba840e37bad3791498b9b688"},{"date":"2023-03-07T21:55:29+08:00","author":"MY","message":"✏️Hadoop","hash":"ae5551fff9e54ec756838111bedde6efb57ac462"},{"date":"2022-07-12T11:30:08+08:00","author":"cjiping","message":"✏️更新 索引数据结构","hash":"41b9ad6528778e4c5649ccbb242562cd48040ebe"}],"createTime":"2021-03-01T14:25:58+08:00"}