三层数据架构总览

13_归档

三层数据架构总览

最后更新: 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、排名、分层)
  • 管理层看板数据源

展示层

  • Di[[f]]y + database 插件:自然语言查询
  • ChartGen 插件:自动图表生成
  • BI 工具:固定仪表盘
  • Python 脚本:Excel 报表导出

刷新策略

层级刷新时间方式
ODS每日 3:00远程 → 本地 MySQL 同步(已有 crontab)
DWD每日 4:00PostgreSQL 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_[[f]]ollowup — 咨询师待回访客户列表视图,下次同类需求直接查此视图。


最后更新: 2026/6/18 00:00:05