1. 数据架构演进:从数据仓库到数据湖再到Lakehouse

聊数据架构,绕不开一个核心问题:数据到底该放哪儿?怎么管?怎么用?

我入行那会儿,企业数据基本都窝在数据仓库里。后来大数据来了,数据湖火了。再后来,大家发现两头都不太够用——于是Lakehouse出现了。

这一节,咱们就捋一捋这条演进路线。我会结合自己踩过的坑,把每个阶段的痛点、驱动力和关键变化讲清楚。

一句话总结:数据仓库解决“怎么管好数据”,数据湖解决“怎么装下所有数据”,Lakehouse解决“怎么既装得下又管得好”。

1.1 数据仓库时代:结构化世界的黄金法则

上世纪80年代末,数据仓库概念被提出。说白了,就是把业务系统的数据抽出来,清洗、转换、加载(ETL),然后放进一个专门的分析数据库里。

核心特征:

  • Schema-on-Write:写入前必须定义好表结构
  • ACID事务:保证数据一致性
  • SQL接口:BI工具直接对接
  • 高性能查询:列式存储、索引、物化视图

我在2012年做过一个零售行业的数仓项目。当时用的是Teradata,每天凌晨跑ETL,早上8点出报表。业务方很满意——直到他们想分析点击流日志和社交媒体数据。

我曾经踩过的坑:数仓对非结构化数据几乎无能为力。有一次业务要分析用户评论里的情感倾向,我们只能先把文本硬塞进VARCHAR字段,然后写一堆正则表达式去解析。效率极低,维护成本极高。

数据仓库的局限性:

  • 存储成本高(通常用专有硬件)
  • 扩展性差(垂直扩展为主)
  • 不支持非结构化数据(文本、图片、音频)
  • 数据加载频率低(通常是T+1)

1.2 数据湖时代:野蛮生长的数据沼泽

2010年前后,Hadoop生态成熟了。HDFS能存海量数据,MapReduce能跑批处理。数据湖的概念应运而生——把所有原始数据原样存进去,需要的时候再处理。

核心特征:

  • Schema-on-Read:读取时才解析结构
  • 低成本存储:普通服务器+分布式文件系统
  • 支持所有数据类型:结构化、半结构化、非结构化
  • 灵活的计算引擎:Spark、Hive、Presto

我记得2015年帮一家互联网公司搭数据湖。他们把服务器日志、App埋点、第三方API数据一股脑全扔进HDFS。存储成本确实低,但问题很快就来了。

数据湖的真相:很多数据湖最后变成了“数据沼泽”。数据进来了,但没人知道哪些数据是干净的、哪些是过期的、哪些是重复的。你想想看,一个100PB的湖里,如果50%是垃圾数据,那维护成本反而比数仓还高。

数据湖的痛点:

  • 缺乏ACID事务:并发写入会导致数据不一致
  • 元数据管理混乱:没有统一的Schema约束
  • 查询性能差:没有索引和统计信息优化
  • 数据质量难保证:脏数据、重复数据泛滥

我见过最夸张的一个案例:某团队在数据湖里跑了3天的ETL,结果发现源数据字段类型变了,整个管道全挂。因为没有Schema校验,错误直到下游报表出问题才被发现。

1.3 Lakehouse:融合的必然选择

2017年,Databricks提出了Lakehouse概念。本质上,它是在数据湖的底层存储上,叠加了数据仓库的治理能力。

核心思想:

  • 用低成本对象存储(S3、ADLS、OSS)做统一存储
  • 用开放文件格式(Parquet、ORC)做列式存储
  • 用事务层(Delta Lake、Iceberg、Hudi)提供ACID保证
  • 用元数据层(Unity Catalog、Hive Metastore)做统一治理

关键区别:Lakehouse不是“数据湖+数据仓库”的简单拼凑,而是从存储层开始重新设计。它保留了数据湖的低成本、高扩展性,同时实现了数据仓库的可靠性、事务性和高性能。

为什么是现在?核心驱动力:

驱动力 说明
存储成本断崖式下降 对象存储价格从2010年的$0.10/GB降到现在的$0.02/GB
开放格式成熟 Parquet/ORC + Delta/Iceberg/Hudi形成事实标准
计算与存储分离 云原生架构让弹性伸缩成为可能
AI/ML需求爆发 数据科学家需要直接访问原始数据做特征工程
实时分析需求 批流一体架构成为刚需

我个人习惯把Lakehouse比作“精装修的数据湖”。湖还是那个湖,但有了物业管理(元数据)、水电煤(事务)、安保系统(权限控制)。

1.4 三种架构对比:一张表说清楚

维度 数据仓库 数据湖 Lakehouse
数据形态 结构化为主 所有类型 所有类型
Schema策略 Write时定义 Read时定义 Write时定义+Read时演化
ACID事务 完整支持 不支持 完整支持
存储成本 高 低 低
查询性能 高(索引+物化视图) 低(全表扫描) 高(索引+缓存+优化器)
数据治理 强 弱 强
AI/ML支持 弱 强 强
实时能力 弱(T+1为主) 中(流处理) 强(批流一体)

1.5 核心架构图:Lakehouse的逻辑分层

下面这张图是我自己总结的Lakehouse分层架构。你仔细看,每一层都有明确的职责边界。

Lakehouse 逻辑分层架构 数据源层 业务数据库 | 日志流 | IoT设备 | 第三方API | 文件导入 数据摄取层 CDC (Debezium) | 批量导入 (Spark) | 流式接入 (Kafka) 统一存储层 对象存储 (S3/ADLS/OSS) + Parquet/ORC 列式格式 事务与元数据层 Delta Lake / Apache Iceberg / Apache Hudi + Unity Catalog 计算与查询层 Spark SQL | Presto/Trino | Flink | 机器学习训练 核心设计原则:存储与计算分离,开放格式避免厂商锁定,事务层保证数据一致性

嗯,这里要注意:每一层之间都是松耦合的。你可以单独升级计算引擎,也可以替换事务层实现。这就是Lakehouse的灵活性所在。

1.6 我的建议:什么时候该考虑Lakehouse?

根据我这些年的项目经验,如果你遇到以下场景,Lakehouse值得认真考虑:

  • 数据种类多:既有结构化报表数据,又有日志、图片、文本等非结构化数据
  • 分析场景混合:既要跑BI报表,又要做机器学习训练
  • 实时性要求高:需要分钟级甚至秒级的数据可见性
  • 成本敏感:不想在存储和计算上被厂商锁定
  • 团队规模大:需要统一的数据治理和权限管理

一个小建议:不要为了Lakehouse而Lakehouse。如果你的数据量小于10TB,场景以固定报表为主,传统数仓可能更省心。Lakehouse的优势在大规模、多场景、高灵活性的场景下才能真正体现。

1.7 本章小结

从数据仓库到数据湖再到Lakehouse,本质上是数据架构对业务需求的一次次回应。

  • 数据仓库解决了“数据怎么管”的问题,但太贵、太死板
  • 数据湖解决了“数据怎么存”的问题,但太乱、太难用
  • Lakehouse试图同时解决这两个问题——用数据湖的成本,实现数据仓库的治理

我个人觉得,Lakehouse不是终点,而是数据架构走向“统一、开放、智能”的一个里程碑。后面几章,我们会深入每个技术细节,看看Delta Lake、Iceberg、Hudi这些组件到底是怎么工作的。