从业务库到可视化大屏:用华为云 CDM + DWS + DLV 搭建实时数据链路
【摘要】 一、背景与痛点公司电商系统的订单、用户、商品数据全在 MySQL 里,日常运营需要看各种报表:今日订单量、GMV 实时走势各品类销售占比用户地域分布直接在 MySQL 上跑分析 SQL,问题很明显:锁表风险:大查询扫全表,业务写入被阻塞查询慢:多表 JOIN + 时间聚合,动辄十几秒维度单一:MySQL 不适合做多维分析,Cube 展开困难核心诉求:把分析流量从业务库剥离,用专门的 OLAP...
一、背景与痛点
公司电商系统的订单、用户、商品数据全在 MySQL 里,日常运营需要看各种报表:
- 今日订单量、GMV 实时走势
- 各品类销售占比
- 用户地域分布
直接在 MySQL 上跑分析 SQL,问题很明显:
- 锁表风险:大查询扫全表,业务写入被阻塞
- 查询慢:多表 JOIN + 时间聚合,动辄十几秒
- 维度单一:MySQL 不适合做多维分析,Cube 展开困难
核心诉求:把分析流量从业务库剥离,用专门的 OLAP 引擎承载,并且能可视化展示。
二、方案设计
整体架构:
MySQL(业务库)
↓ (定时全量/增量同步)
CDM(云数据迁移)
↓
DWS(数据仓库服务,OLAP 引擎)
↓ (SQL 聚合查询)
DLV(数据可视化)
↓
大屏展示
组件选型与职责:
|
组件
|
角色
|
为什么选它
|
|---|---|---|
|
CDM
|
数据集成
|
可视化配置,支持 MySQL→DWS 增量同步,不用写代码
|
|
DWS
|
数据仓库
|
兼容 PostgreSQL,分布式 MPP 架构,分析性能强
|
|
DLV
|
可视化
|
拖拽式大屏,内置多种图表,支持实时刷新
|
避坑点:DWS 是 OLAP 引擎,不要拿它当业务库用(高并发小事务性能不如 MySQL)。职责分离是关键。
三、实操步骤
3.1 准备 DWS 集群
- 进入 DWS 控制台 → 创建集群
- 节点类型选
dwsk2.xlarge(4U32G),3 节点起步 - 数据库版本选最新稳定版(如 9.1.x)
- 网络:与 MySQL 所在 VPC 打通(同 VPC 或对等连接)
- 创建管理员用户
dbadmin,记录密码
创建完成后,用 DBeaver 或 Data Studio 连接测试:
-- 连接信息
-- Host: dws-cluster-xxxx.cn-north-4.dws.myhuaweicloud.com
-- Port: 8000
-- Database: postgres
-- User: dbadmin
SELECT version(); -- 验证连接
3.2 在 DWS 中建表
根据 MySQL 中的订单表结构,在 DWS 中创建对应的事实表和维度表:
-- 维度表:商品
CREATE TABLE dim_product (
product_id BIGINT PRIMARY KEY,
product_name VARCHAR(200),
category VARCHAR(50),
brand VARCHAR(50),
price DECIMAL(10,2)
)
DISTRIBUTE BY HASH(product_id);
-- 维度表:用户
CREATE TABLE dim_user (
user_id BIGINT PRIMARY KEY,
city VARCHAR(50),
province VARCHAR(50),
reg_date DATE
)
DISTRIBUTE BY HASH(user_id);
-- 事实表:订单
CREATE TABLE fact_order (
order_id BIGINT,
user_id BIGINT,
product_id BIGINT,
order_amount DECIMAL(10,2),
order_time TIMESTAMP,
status SMALLINT
)
DISTRIBUTE BY HASH(user_id)
PARTITION BY RANGE (order_time)
(
PARTITION p202601 START ('2026-01-01') END ('2026-04-01'),
PARTITION p202602 START ('2026-04-01') END ('2026-07-01'),
PARTITION p202603 START ('2026-07-01') END ('2026-10-01'),
PARTITION p202604 START ('2026-10-01') END ('2027-01-01')
);
关键设计:DWS 中DISTRIBUTE BY决定数据分布方式,事实表通常用关联键做 Hash 分布,避免跨节点 JOIN 时的数据重分布。
3.3 配置 CDM 迁移任务
- 进入 CDM 控制台 → 集群管理 → 创建集群(2U8G 足够)
- 创建连接:
- 源连接:MySQL,填写业务库地址、端口、用户名、密码
- 目的连接:DWS,填写集群地址、端口、数据库名、用户名、密码
- 创建迁移作业:
全量迁移(首次):
- 源表:
order_db.fact_order - 目的表:
fact_order - 迁移模式:全量
- 抽取并发数:4
增量同步(后续定时):
- 迁移模式:增量
- 增量字段:
order_time - 调度周期:每 5 分钟执行一次
- 过滤条件:
order_time >= ${last_execution_time}
避坑点:增量同步依赖时间戳字段,确保 MySQL 中该字段有索引,否则每次全表扫描会很慢。
3.4 在 DWS 中构建分析视图
数据同步后,创建聚合视图供 DLV 调用:
-- 实时 GMV 和订单量
CREATE VIEW v_order_realtime AS
SELECT
DATE_TRUNC('hour', order_time) AS hour,
COUNT(*) AS order_count,
SUM(order_amount) AS gmv
FROM fact_order
WHERE order_time >= CURRENT_DATE
GROUP BY DATE_TRUNC('hour', order_time);
-- 品类销售占比
CREATE VIEW v_category_sales AS
SELECT
p.category,
COUNT(*) AS order_count,
SUM(f.order_amount) AS total_amount
FROM fact_order f
JOIN dim_product p ON f.product_id = p.product_id
WHERE f.order_time >= CURRENT_DATE - INTERVAL '7 days'
GROUP BY p.category;
-- 用户地域分布
CREATE VIEW v_user_region AS
SELECT
u.province,
COUNT(DISTINCT f.user_id) AS user_count,
SUM(f.order_amount) AS total_amount
FROM fact_order f
JOIN dim_user u ON f.user_id = u.user_id
WHERE f.order_time >= CURRENT_DATE - INTERVAL '30 days'
GROUP BY u.province;
3.5 用 DLV 搭建可视化大屏
- 进入 DLV 控制台 → 新建大屏
- 选择模板:选「数据大屏」→「通用模板」
- 添加数据源:选择 DWS,填写连接信息
- 拖拽组件并绑定数据:
|
组件
|
绑定视图
|
展示方式
|
|---|---|---|
|
数字翻牌
|
v_order_realtime |
今日 GMV 累计
|
|
折线图
|
v_order_realtime |
按小时订单趋势
|
|
饼图
|
v_category_sales |
品类销售占比
|
|
地图
|
v_user_region |
用户地域热力图
|
- 配置自动刷新:每 60 秒刷新一次
- 发布大屏,生成分享链接
配图建议:DLV 大屏编辑界面截图 + 最终大屏效果截图,社区对可视化类文章配图要求高。
四、验证结果
|
验证项
|
结果
|
|---|---|
|
CDM 增量同步延迟
|
5 分钟内数据可达 DWS
|
|
DWS 查询性能
|
千万级订单表聚合查询 < 2s
|
|
DLV 大屏刷新
|
60s 自动刷新,数据准确
|
|
MySQL 业务库影响
|
分析查询完全剥离,业务写入无阻塞
|
效果对比:
- 之前:运营在 MySQL 上跑报表,单次查询 15-30s,且影响下单
- 现在:大屏实时展示,查询走 DWS,MySQL 零压力
五、总结与可扩展
这套方案解决了三个核心问题:
- 数据孤岛:业务数据集中到 DWS,统一分析口径
- 查询性能:OLAP 引擎 + 分区表,聚合查询秒级返回
- 决策效率:DLV 大屏实时展示,运营不用等报表
后续可扩展方向:
- 实时流处理:引入 DIS(数据接入服务)+ CloudStream,实现秒级实时计算
- 数据质量监控:用 DataArts Studio 做数据质量校验和告警
- 多维分析:在 DWS 中构建星型模型,支持任意维度钻取
- 历史归档:冷数据转 OBS 对象存储,降低 DWS 存储成本
- 权限管控:通过 DWS 行级权限 + DLV 数据脱敏,保障数据安全
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)