数据仓库是啥?一篇讲清楚概念和架构
数据仓库是啥?一篇讲清楚概念和架构
别被"数据仓库"四个字唬住,它本质上就是一个专门用来做分析的数据库
这些年做后端开发,经常被问到"数据仓库和普通数据库有什么区别"。说实话我刚接触的时候也是一头雾水——明明都是存数据的,干嘛非得再搞一套?
后来慢慢理解了:业务数据库是拿来"用"的,数据仓库是拿来"看"的。
业务数据库(比如 MySQL)管的是你每天的下单、注册、支付,数据一直在变;数据仓库管的是"过去发生了什么",数据进去基本就不动了,专门给老板、运营、分析师看报表用的。
这篇我就按自己的理解,把数据仓库的概念、核心特征、整体架构过一遍,尽量不说黑话。
一句话先给个定义
数据仓库是一个面向主题的、集成的、带时间属性的、基本不变的数据集合,用来支撑企业决策分析。
翻译成人话:
-
面向主题:不是按"订单系统""用户系统"来分,而是按"用户分析""销售分析"这种分析目标来组织数据 -
集成:数据来自五湖四海(MySQL、日志、第三方API),全部拉过来统一格式 -
带时间:会存历史数据,能看到变化趋势 -
基本不变:数据进去之后就不再改了,只查不删不更新
跟普通数据库到底有啥不一样?
我画个表对比一下,更直观:
| 对比项 | 业务数据库(OLTP) | 数据仓库(OLAP) |
|---|---|---|
| 主要用途 | 支撑业务交易(下单、支付) | 支撑分析决策(报表、趋势) |
| 数据操作 | 频繁增删改查 | 主要是查询,几乎不修改 |
| 数据范围 | 当前状态,数据量相对小 | 历史全量,数据量巨大 |
| 设计思路 | 按业务功能建模(范式) | 按分析主题建模(维度) |
简单说就是:业务库是"干活用的",数据仓库是"看数用的"。
数据仓库长什么样?从数据进来到出去
整个流程可以概括为四步:数据源 → 存储加工 → 分析计算 → 展示。
graph TD
A[数据源] -->|抽取/清洗| B[数据存储层]
B -->|分析计算| C[应用工具层]
C -->|结果展示| D[可视化界面]
1. 数据源(原始数据从哪来)
-
业务数据库:MySQL、PG 里的订单表、用户表、支付流水 -
日志:用户在前端点的每一个按钮、每一个页面停留时间 -
第三方:合作伙伴的 API、公开数据集
反正能搞到的数据,统统往里灌。
2. 数据存储层(加工处理的核心)
原始数据很"脏",没法直接用。这一层干三件事:
-
清洗:把重复的去掉、乱码的修正、空值填上 -
转换:统一单位、统一日期格式、关联不同表 -
重组:按主题重新组织,形成规整的分析模型
3. 应用工具层(分析计算)
数据存好了,得有人去"用"它。这一层提供各种分析工具:
-
OLAP:支持你从不同角度切数据(比如按时间、按地区、按产品组合查询) -
数据挖掘:跑一些算法模型(比如预测用户流失) -
统计分析:做回归、假设检验这些
4. 可视化界面(给人看)
最后一公里,把分析结果画成图表:折线图看趋势、柱状图看对比、仪表盘看实时指标。老板们就爱看这个。
几个必须搞懂的核心概念
主题
就是"按什么目标来组织数据"。比如电商平台,常见的主题有:用户主题、商品主题、订单主题、营销主题。
同一个用户的数据,可能来自注册系统、订单系统、客服系统,在"用户主题"下全部汇聚到一起。
粒度
数据的精细程度。
-
细粒度:每一条订单明细都存,数据量大,但分析灵活 -
粗粒度:只存每天汇总的销售额,数据量小,但只能看大面
存哪种粒度取决于你要分析什么。我见过一个做用户行为分析的项目,存的是每一条点击日志,数据量爆炸,但确实能回答很细的问题。
维度
分析的角度。"时间"是一个维度,"地区"也是一个维度,"产品品类"还是维度。
时间维度还可以继续分层:日 → 周 → 月 → 季 → 年。你可以在报表里从年度下钻到月度,再下钻到每天。
数据集市
数据仓库的一个"子集",只关注某一个业务线。比如销售部门不需要看用户行为数据,那就单独切一个"销售数据集市"出来,供他们快速查询。
经典的四层架构
实际工程中,数据仓库一般是分层设计的。每一层各司其职,好处是改一层不影响其他层,排查问题也能逐层定位。
| 分层 | 全称 | 存什么 | 存成啥样 |
|---|---|---|---|
| ODS层 | 操作数据存储 | 原始数据,从各数据源直接同步过来,原封不动 | CSV、JSON,可以轻度压缩 |
| DWD层 | 数据仓库明细层 | 清洗、标准化之后的明细数据 | 一般用列式存储 + 压缩(比如 Parquet),省空间 |
| DWS层 | 数据仓库服务层 | 按主题聚合好的指标数据(比如日活、月活) | 不压得太狠,保证查询速度 |
| ADS层 | 数据应用层 | 直接给业务用的结果数据,就是报表里看到的那种 | 按需来,怎么快怎么存 |
实际项目中 ODS 和 DWD 有时候会合并,DWS 和 ADS 也经常混着叫。不用纠结名字,理解"越往下越原始、越往上越聚合"这个逻辑就行。
几个实操中容易踩的坑
分层架构看起来规整,但真正用起来有几个地方要留心:
1. 粒度别设计太细
一开始容易贪多,想着"把所有数据都存下来,以后什么都能查"。但数据量增长的速度远超你想象,半年之后查询慢到怀疑人生。建议从业务最关心的问题出发,反推需要什么粒度的数据。
2. ETL 要管好失败重试
从 ODS 到 DWD 的清洗转换过程,一旦某个任务失败了,下游全部断粮。一定要设计好重试机制和失败告警。
3. 数据质量是最大的坑
最头疼的不是写 SQL,而是发现上游某个字段的含义变了、枚举值增加了、时间格式改了。强烈建议在 ODS 到 DWD 这层做充分的校验和兜底处理。
总结
数据仓库不是什么神秘的东西,它就是一个专门为分析而设计的数据库系统。核心逻辑就三条:
-
把分散的数据统一收拢(集成) -
按分析视角重新组织(面向主题) -
用分层架构保证数据质量和效率(ODS→DWD→DWS→ADS)
如果你正在搭数据仓库,记住一句话:从业务问题出发,而不是从数据出发。先想清楚"我们要回答什么问题",再决定存什么数据、怎么存。反过来做,大概率要推倒重来。
本文由 mdnice 多平台发布
更多推荐


所有评论(0)