三层数据架构总览
三层数据架构总览
> 最后更新: 2026-06-07
> 版本: v0.1(设计阶段)
---
架构目标
- 性能: 从标准视图的每次全量查询 → 物化视图的秒级响应
- 可维护: 分层清晰,各层职责独立
- 可追溯: 每个数据口径有定义、有来源、有变更记录
- 可扩展: 新增分析维度无需改动底层
---
整体架构图
`
┌──────────────────────────────────────────────────────────────────────┐
│ Layer 1: 原始数据层 (ODS) — MySQL ruimeiyun (280MB, 8张基表) │
│ │
│ 回访记录(272K) 712执行业绩(124K) 出纳结算单(108K) │
│ 到院明细(78K) 预约记录(43K) 客户盘点(42K) │
│ 入库记录(9K) 白鲸门店日报(95行) │
│ │
│ 现有: 24个标准视图(每次全量重算) │
└──────────────────┬───────────────────────────────────────────────────┘
│ Python ETL (每日4:00)
▼
┌──────────────────────────────────────────────────────────────────────┐
│ Layer 2: 物化视图层 (PostgreSQL ruimeiyun_dw) │
│ │
│ ┌──────────────────────────────────────────────────────────────┐ │
│ │ DWD 明细层 (Detail) — 清洗、标准化后的明细数据 │ │
│ │ m_dwd_出纳结算单 m_dwd_到院明细 m_dwd_客户盘点 │ │
│ │ m_dwd_回访记录 m_dwd_712执行业绩 m_dwd_预约记录 │ │
│ ├──────────────────────────────────────────────────────────────┤ │
│ │ DWS 汇总层 (Summary) — 日/月聚合,高频查询 │ │
│ │ m_dws_daily_brief m_dws_monthly_performance │ │
│ │ m_dws_store_daily_kpi m_dws_consultant_monthly │ │
│ │ m_dws_product_sales m_dws_visit_summary │ │
│ ├──────────────────────────────────────────────────────────────┤ │
│ │ ADS 应用层 (Application) — 业务直接调用 │ │
│ │ m_ads_customer_rfm m_ads_churn_warning │ │
│ │ m_ads_consultant_ranking m_ads_customer_wakeup │ │
│ │ m_ads_cross_flow m_ads_source_roi │ │
│ │ m_ads_executive_dashboard m_ads_complaint_analysis │ │
│ └──────────────────────────────────────────────────────────────┘ │
└──────────────────┬───────────────────────────────────────────────────┘
│ 查询
▼
┌──────────────────────────────────────────────────────────────────────┐
│ Layer 3: 展示层 │
│ │
│ Dify AI问答 + ChartGen | BI仪表盘 | 报表导出/外部API │
│ (自然语言查数、自动图表) (固定看板) (定时推送到微信/钉钉/邮件) │
└──────────────────────────────────────────────────────────────────────┘
`
---
各层职责
ODS 层(源数据层)
- 保留原始数据不做修改
- 每日从远程睿美云同步
- 数据新鲜度:T+1
DWD 层(明细层)
- 清洗、去重、标准化
- 字段重命名、类型转换
- 补充缺失值
- 与基础表一一对应
DWS 层(汇总层)
- 按日/月粒度预聚合
- 面向高频查询场景
- 多表 JOIN 提前完成
ADS 层(应用层)
- 面向具体业务应用
- 复杂计算逻辑(RFM、排名、分层)
- 管理层看板数据源
展示层
- Dify + database 插件:自然语言查询
- ChartGen 插件:自动图表生成
- BI 工具:固定仪表盘
- Python 脚本:Excel 报表导出
---
刷新策略
| 层级 | 刷新时间 | 方式 |
|------|---------|------|
| ODS | 每日 3:00 | 远程 → 本地 MySQL 同步(已有 crontab) |
| DWD | 每日 4:00 | PostgreSQL REFRESH MATERIALIZED VIEW CONCURRENTLY |
| DWS | 每日 4:15 | 同上,依赖 DWD 刷新完成后 |
| ADS | 每日 4:30 | 同上,依赖 DWS 刷新完成后 |
| 展示层 | 实时 | 直接查询物化视图 |
> 使用 CONCURRENTLY 保证刷新期间查询不中断
> 支持单视图按需刷新 API
---
性能预期对比
| 查询场景 | 当前(标准视图) | 改造后(物化视图) |
|---------|----------------|-----------------|
| RFM 客户分层 | 10-20秒 | < 1秒 |
| 月度业绩报表 | 5-10秒 | < 0.5秒 |
| 流失预警客户 | 3-8秒 | < 1秒 |
| 咨询师排名 | 5-15秒 | < 0.5秒 |
| 管理层看板 | 30秒+ | < 2秒 |
|
四、查询规则(强制)
4.1 分析查询优先级
所有数据分析查询必须按以下优先级执行:
`
第1优先:物化视图 (m_*) → 覆盖则直接用
└─ m_dwd_customer_consultant 客户归属+RFM+消费+到院+回访
└─ m_dwd_customer_visit 客户到院明细
└─ m_dws_consultant_monthly 咨询师月绩效
└─ m_ads_customer_rfm 客户RFM分层
└─ m_ads_pending_followup 咨询师待回访客户列表(含缴费+回访时间)
└─ 其他 m_* 视图
第2优先:staging 基表 (stg_*)
└─ 先出分析结果,再补物化视图
第3优先:根据本次分析模式,新增/优化物化视图
└─ 分析完成后 → 新建或调整物化视图 → 更新手册
`
4.2 闭环规则(迭代优化)
`
分析需求 → 查物化视图 → 覆盖? → YES → 出结果
→ NO → 回退 staging 先出结果
↓
根据本次分析模式,新建或优化物化视图
↓
更新手册
↓
下次同类需求自动走物化视图
`
物化视图不是分析的前置依赖,是后置优化。先出结果,再建视图。每次分析都在为下一次铺路。
4.3 2026-06-07 复盘教训
分析张凯乐客户时使用了4张staging表做join(stg_客户盘点+stg_出纳结算单+stg_回访记录+stg_712执行业绩),
但 m_dwd_customer_consultant 一张物化视图已包含所有字段(客户归属、消费、储值、最近到院、最近回访)。
本次迭代产出: m_ads_pending_followup — 咨询师待回访客户列表视图,下次同类需求直接查此视图。