数据系统

一、数据系统的三种基本形态(系统形态层)

系统如何与时间和请求交互这一第一性原理出发,数据系统可以被划分为三种稳定形态:

1. 在线系统(Online / OLTP)

本质特征:

系统必须在“现在”对“单个请求”做出回应。


2. 批处理系统(Batch Processing)

本质特征:

系统关注的是“整体正确性”,而非“即时性”。


3. 流处理系统(Stream Processing)

本质特征:

系统试图缩短“事件发生”与“被计算”之间的时间距离。


二、数据系统的核心质量属性(系统基石层)

无论系统形态如何变化,所有数据系统都必须在以下几个稳定维度上做权衡。

1. 可靠性(Reliability)

可靠系统不是“不会出错”,而是:

在预期故障存在的前提下,系统仍能持续提供可接受的服务能力。

这要求系统具备:


2. 可伸缩性(Scalability)

可伸缩性描述的是:

系统在负载增长时,维持性能的能力。

负载参数(Load Parameters)

负载必须被显式建模,例如:

延迟的分布视角

关键认知:

可伸缩性并不存在银弹,它永远建立在一组被接受的系统假设之上。


3. 可维护性(Maintainability)

可维护性决定了系统的长期演化成本,包括:

核心结论:

简单性不是功能少,而是抽象正确。


三、数据模型:现实世界的抽象方式(建模层)

数据模型的本质是:

应用如何理解和组织现实世界中的信息。

1. 多层抽象视角


2. 关系模型与文档模型的张力

历史视角:

文档模型在结构上,与 1970 年代的层次模型高度相似。


3. 阻抗不匹配(Impedance Mismatch)

二者之间的张力,是架构复杂度的重要来源。


四、查询模型与执行模型(计算层)

1. 命令式 vs 声明式

核心差异:

声明式语言将执行策略的选择权交给系统,从而释放并行优化空间。


2. 并行计算的抽象光谱

图查询语言(Cypher / SPARQL)本质上是对关系遍历的高层声明。


五、存储结构:写入、读取与时间(存储层)

1. 日志结构存储的本质

压缩与合并(Compaction)

关键权衡:

写优化必然带来读复杂性。


2. 索引的角色

索引的本质是:

用额外空间换取读取时间。


六、事务处理与分析处理的分离(分析层)

1. OLTP 与 OLAP 的结构性冲突

解决方式:

通过数据复制与 ETL 实现职责隔离。


2. 列式存储与压缩


3. 分布式分析系统(以 Dremel 为代表)


七、数据编码与系统演化(演化层)

1. 数据跨越时间

数据不仅在系统间流动,也在过去与未来之间流动。


2. 兼容性原则

字段必须具备:


3. 读模式与写模式

通过分离作者模式与读者模式,系统得以在演化中保持运行。


4. 数据丢失的本质风险

旧代码覆盖式写回,是前向兼容失败的根源。


八、数据流动模式(系统边界层)


九、数据系统的演进路径(系统演化模型)

一个典型数据系统的演进:

  1. 单体 OLTP
  2. OLTP + 离线分析
  3. 引入流处理
  4. 数据仓库 / 数据湖
  5. 统一数据平台

核心原则:

每一次演进,都是为了解决上一个阶段的主要瓶颈,同时引入新的复杂性。

关联内容(自动生成)