Dashboard → Section → Widget
页面结构完全由数据库配置驱动
传统模式的性能瓶颈与架构问题
按需加载 · 数据源无关 · 配置驱动
Provider 架构与配置模型
抽象 · 按需 · 配置 · 多数据源
开发效率 · 代码结构 · 对标业界
缓存 · 实时推送 · 客户自定义
前端请求一个接口,后端一次性查完所有数据,拼成巨大 JSON 返回。
同一数据 10 秒内被查 100 次
只需订单汇总,但返回所有模块
查询时间随数据量线性上升
MySQL CPU 经常飙高
意大利面架构(Spaghetti Architecture)——模块之间没有清晰边界,业务逻辑、SQL 查询、数据拼装散落在多个文件里,互相硬编码依赖,改一处牵一串,像纠缠在一起的面条。
客户 A 只关心订单 → 无法隐藏其他模块
客户 B 想看 30 天 → 全局固定 7 天
客户 C 想加图表 → 需开发介入发版
Widget 配置化 → 可按需展示/隐藏
参数白名单 → 时间范围可配置
Provider 抽象 → 新增图表不改旧代码
CloudWatch · Dashboard
CloudWatch · Service Map
CloudWatch · Logs
Grafana · Dashboard
不管底层是 MySQL、OpenSearch 还是 MongoDB,前端永远消费 columns + rows。Provider 接口统一,数据源切换对前端零感知。
页面结构和数据分开请求。用户看到哪个图表,才查哪个图表的数据。首屏只加载页面结构,毫秒级返回。
Dashboard 结构通过数据库配置,不硬编码。新增图表不需要改代码,插两条配置即可上线。
Provider 屏蔽数据源差异,前端只消费统一结构。
页面结构完全由数据库配置驱动
组件通过 result_key 关联数据结果定义
Result 通过 provider_key 找到代码中的 Provider
页面加载 → 查完所有数据 → 返回巨大 JSON
总耗时 = 最慢查询 × 1.5
页面加载 → 只返回结构(毫秒级)
滚动到区域 → 才请求 Provider 数据
首屏 = 页面结构查询时间
Provider 接口统一,底层对前端透明
页面结构与数据分离,Widget 级别按需请求
Dashboard / Section / Widget 全部数据库配置
同一页面混合 MySQL、OpenSearch、MongoDB
Controller 加查询逻辑
SQL 写死,和现有代码耦合
测试覆盖整个接口
改 4-5 个文件,风险高
新建 Provider 类
在 Registry 注册
数据库插 2 条配置
加 1 个文件 + 2 条配置
refresh_policy 已就位,接入 Redis
Intersection Observer 按需触发
折线图 · 饼图 · 热力图 · 趋势卡片
一次请求多个 Result
Provider 屏蔽数据源差异,前端只消费统一结构。
页面结构与数据分离,Widget 级别按需请求。
实时推送、客户自定义、AI 辅助——路线清晰,节奏可控。