name: 数据架构
description: 在设计数据平台时使用,选择数据湖/数据湖屋/数据仓库,或实施数据网格模式。涵盖现代数据架构方法。
allowed-tools: Read, Glob, Grep
数据架构
现代数据架构模式,包括数据湖、数据湖屋、数据网格和数据平台设计。
何时使用此技能
- 选择数据湖、数据仓库和数据湖屋
- 设计现代数据平台
- 实施数据网格原则
- 规划数据存储策略
- 理解数据架构权衡
数据架构演变
第一代:数据仓库(1990年代-2000年代)
- 仅结构化数据
- ETL进入仓库
- 星型/雪花型模式
- 基于SQL的分析
第二代:数据湖(2010年代)
- 所有数据类型(结构化、半结构化、非结构化)
- 读时模式
- 基于Hadoop/HDFS
- 廉价存储,复杂处理
第三代:数据湖屋(2020年代)
- 两者优势:湖的灵活性 + 仓库功能
- 湖上的ACID事务
- 可选模式强制
- 统一分析和机器学习
架构比较
数据仓库
┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ 源数据 │ ──► │ ETL │ ──► │ 数据仓库 │
│ (结构化) │ │ (转换) │ │(星型/雪花)│
└─────────────┘ └─────────────┘ └─────────────┘
│
▼
┌─────────────┐
│ BI │
│ 分析 │
└─────────────┘
特性:
- 写时模式
- 针对SQL查询优化
- 仅结构化数据
- 高数据质量
- 昂贵存储
最适合:
- 商业智能
- 财务报告
- 结构化分析
数据湖
┌─────────────┐ ┌─────────────┐
│ 源数据 │ ──► │ 数据湖 │
│ (所有) │ │ (原始) │
└─────────────┘ └─────────────┘
│
┌────────────────┼────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 机器学习 │ │ ETL │ │ Spark │
│ 训练 │ │ 到数据仓库│ │ 分析 │
└─────────┘ └─────────┘ └─────────┘
特性:
- 读时模式
- 所有数据类型
- 廉价存储
- 灵活处理
- “数据沼泽”风险
最适合:
- 数据科学/机器学习
- 非结构化数据
- 实验性分析
数据湖屋
┌─────────────┐ ┌─────────────────────────────────┐
│ 源数据 │ ──► │ 数据湖屋 │
│ (所有) │ │ ┌──────────────────────────┐ │
└─────────────┘ │ │ 元数据层 │ │
│ │ (Delta/Iceberg/Hudi) │ │
│ └──────────────────────────┘ │
│ ┌──────────────────────────┐ │
│ │ 存储层 │ │
│ │ (对象存储) │ │
│ └──────────────────────────┘ │
└─────────────────────────────────┘
│
┌────────────────────┼────────────────────┐
▼ ▼ ▼
┌─────────┐ ┌─────────┐ ┌─────────┐
│ SQL │ │ 机器学习 │ │ 流处理 │
│ BI │ │ 工作负载 │ │ 过程 │
└─────────┘ └─────────┘ └─────────┘
特性:
- ACID事务
- 模式演变
- 时间旅行
- 统一批处理/流处理
- 开放格式
最适合:
- 统一分析
- 商业智能和机器学习
- 现代数据平台
架构选择指南
| 因素 |
数据仓库 |
数据湖 |
数据湖屋 |
| 数据类型 |
结构化 |
所有 |
所有 |
| 查询性能 |
优秀 |
差-中等 |
良好 |
| 数据质量 |
高 |
可变 |
可配置 |
| 成本 |
高 |
低 |
中等 |
| 机器学习工作负载 |
有限 |
优秀 |
优秀 |
| 实时性 |
有限 |
良好 |
良好 |
| 治理 |
强 |
弱 |
强 |
| 复杂度 |
低 |
高 |
中等 |
决策树:
数据是否主要为结构化,重点是商业智能?
├── 是 → 数据仓库
└── 否
└── 需要机器学习 + 商业智能在同一数据上?
├── 是 → 数据湖屋
└── 否
└── 主要是机器学习/非结构化?
├── 是 → 数据湖
└── 否 → 数据湖屋
数据湖屋技术
Delta Lake(Databricks)
特性:
- ACID事务
- 时间旅行(数据版本控制)
- 模式强制/演变
- 统一批处理/流处理
- 优化性能(Z排序、压缩)
文件格式:Parquet + Delta日志
Apache Iceberg(Netflix)
特性:
- ACID事务
- 隐藏分区
- 模式演变
- 时间旅行
- 供应商中立
文件格式:Parquet/ORC/Avro + 元数据
Apache Hudi(Uber)
特性:
- ACID事务
- 增量处理
- 记录级更新
- 时间旅行
- 针对流处理优化
文件格式:Parquet + Hudi元数据
技术比较
| 特性 |
Delta Lake |
Iceberg |
Hudi |
| ACID |
是 |
是 |
是 |
| 时间旅行 |
是 |
是 |
是 |
| 模式演变 |
良好 |
优秀 |
良好 |
| 流处理 |
优秀 |
良好 |
优秀 |
| 生态系统 |
Databricks |
广泛 |
广泛 |
| 性能 |
优秀 |
优秀 |
良好 |
| 社区 |
大 |
增长中 |
中等 |
数据网格
原则
数据网格 = 去中心化数据架构
四个原则:
1. 域所有权
- 数据由域团队拥有
- 不是中心化数据团队
2. 数据作为产品
- 将数据视为产品
- 质量、可发现性、可用性
3. 自助服务平台
- 平台使域团队能够操作
- 减少摩擦
4. 联邦治理
- 全局标准
- 本地实施
数据产品
数据产品 = 数据的自治单元
组件:
┌──────────────────────────────────────┐
│ 数据产品 │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ 数据 │ │ 元数据 │ │
│ │ (表格) │ │ (模式、文档) │ │
│ └──────────┘ └──────────────────┘ │
│ ┌──────────┐ ┌──────────────────┐ │
│ │ 代码 │ │ API │ │
│ │ (ETL) │ │ (访问层) │ │
│ └──────────┘ └──────────────────┘ │
│ ┌──────────────────────────────────┐│
│ │ 质量 + SLA ││
│ └──────────────────────────────────┘│
└──────────────────────────────────────┘
数据网格 vs 中心化
| 方面 |
中心化 |
数据网格 |
| 所有权 |
中心数据团队 |
域团队 |
| 扩展性 |
团队瓶颈 |
随组织扩展 |
| 域知识 |
翻译中丢失 |
保留 |
| 治理 |
中心化 |
联邦化 |
| 实施 |
统一 |
异构 |
| 复杂度 |
初始较低 |
初始较高 |
数据建模模式
星型模式
┌─────────────┐
│ 时间维度 │
└──────┬──────┘
│
┌───────────┐ │ ┌───────────┐
│产品维度 ├──┼──┤客户维度 │
└───────────┘ │ └───────────┘
│
┌──────┴──────┐
│ 销售事实 │
└─────────────┘
优点:简单,快速查询
缺点:非规范化,冗余
最适合:商业智能,报告
雪花型模式
规范化维度:
产品维度 → 类别维度 → 子类别维度
优点:较少冗余
缺点:更多连接,较慢
最适合:复杂层次结构
数据仓库库
中心(业务键) ←→ 链接(关系) ←→ 卫星(属性)
优点:可审计,灵活,可扩展
缺点:复杂,学习曲线
最适合:企业数据仓库
存储层
青铜/白银/黄金(奖章架构)
┌─────────┐ ┌─────────┐ ┌─────────┐
│ 青铜层 │ ──► │ 白银层 │ ──► │ 黄金层 │
│ (原始) │ │(清理) │ │(精选) │
└─────────┘ └─────────┘ └─────────┘
青铜:原始摄取,仅追加
白银:清理、验证、整合
黄金:业务级聚合、特征
数据湖中的区域
着陆区:来自源的原始文件
原始区:结构化原始数据
精选区:转换、质量检查
消费区:准备分析
沙盒区:探索和实验
最佳实践
数据质量
实施质量门:
- 模式验证
- 空值检查
- 范围验证
- 参照完整性
- 新鲜度监控
治理
关键能力:
- 数据目录
- 血缘跟踪
- 访问控制
- 隐私合规
- 审计日志
性能
优化技术:
- 分区(按日期、区域)
- 聚类/Z排序
- 压缩
- 缓存
- 物化视图
相关技能
etl-elt-patterns - 数据转换
stream-processing - 实时数据
database-scaling - 数据库模式