一、什么是数据看板(Dashboard)
数据看板(Dashboard) 是将分散在数据库、日志、业务系统中的数据进行汇总、计算、可视化展示的一种系统,核心目标是:
-
让业务人员 一眼看懂数据
-
让管理者 快速做决策
-
让技术人员 减少重复查询 SQL
典型应用场景:
-
运营数据看板
-
BI 报表系统
-
实时监控大屏
-
管理驾驶舱
二、一个典型 Dashboard 的系统架构
1️⃣ 整体架构示意
```c
数据源
(MySQL / Redis / ES / 日志)
↓
数据处理层
(SQL / ETL / 聚合计算)
↓
接口层
(REST API / GraphQL)
↓
前端展示
(ECharts / AntV / Vue)
```
| 层级 | 职责 |
|---|---|
| 数据源 | 存储原始业务数据 |
| 数据处理 | 聚合、统计、清洗 |
| 接口层 | 提供统一数据接口 |
| 展示层 | 图表 + 交互 |
👉 Dashboard 的难点不在前端,而在数据设计
三、数据看板的核心设计思路
1️⃣ 先设计指标,再写 SQL
错误做法
先查表 → 再看能展示什么
正确做法
先定义指标 → 再反推 SQL
示例指标:
-
今日订单数
-
今日成交金额
-
活跃用户数
-
转化率
2️⃣ 指标分类(非常重要)
| 类型 | 示例 |
|---|---|
| 基础指标 | 订单数、用户数 |
| 汇总指标 | 总销售额 |
| 计算指标 | 同比、环比 |
| 实时指标 | 当前在线人数 |
四、Dashboard 数据库设计示例
1️⃣ 原始业务表(示例)
CREATE TABLE orders ( id BIGINT, user_id BIGINT, amount DECIMAL(10,2), status INT, create_time DATETIME );
2️⃣ 看板统计 SQL 示例
今日订单数
SELECT COUNT(*) FROM orders WHERE create_time >= CURDATE() AND create_time < CURDATE() + INTERVAL 1 DAY;
今日成交金额
SELECT SUM(amount) FROM orders WHERE status = 1 AND create_time >= CURDATE();
3️⃣ 多指标合并查询(减少接口调用)
SELECT COUNT(*) AS order_count, SUM(amount) AS total_amount FROM orders WHERE status = 1 AND create_time >= CURDATE();
👉 一个接口返回多个指标,是 Dashboard 的常见优化方式
五、性能优化:Dashboard 必须关注的问题
1️⃣ 为什么 Dashboard 很容易慢?
-
指标多
-
聚合多
-
时间范围大
-
访问频率高
2️⃣ 常见优化手段
✅ 建立合适索引
CREATE INDEX idx_create_time ON orders(create_time);
✅ 避免在索引列上使用函数
❌
WHERE DATE(create_time) = CURDATE()
✅
WHERE create_time >= CURDATE()
3️⃣ 使用汇总表(强烈推荐)
日统计表设计
CREATE TABLE order_day_stat ( stat_date DATE, order_count INT, total_amount DECIMAL(10,2) );
优点
-
查询快
-
SQL 简单
-
前端秒开
六、实时看板 vs 离线看板
| 类型 | 特点 |
|---|---|
| 实时看板 | WebSocket / Redis |
| 准实时 | 定时任务(1~5 分钟) |
| 离线看板 | T+1 统计 |
👉 不是所有 Dashboard 都需要"实时"
七、接口设计建议
1️⃣ 接口返回结构
{ "orderCount": 123, "totalAmount": 45678.90, "trend": [ {"date": "2023-08-01", "value": 100}, {"date": "2023-08-02", "value": 120} ] }
2️⃣ 一个接口 ≠ 一个图表
-
一个接口支持多个组件
-
减少 HTTP 请求
-
降低后端压力
八、前端图表选择建议(简要)
-
ECharts(最常用)
-
AntV G2
-
DataV(大屏)
👉 后端更应关注 数据是否"好用"
九、Dashboard 常见坑总结
-
SQL 能跑,但性能很差
-
每个图表一个接口
-
所有数据实时查库
-
没有指标口径说明
-
不同人写的 SQL 口径不一致
十、总结
一个优秀的数据看板 =
清晰的指标定义 + 合理的数据建模 + 高效的 SQL + 简洁的展示
真正决定 Dashboard 质量的,不是图表有多炫,而是数据是否可信、稳定、快速。