Files
wenzi/specs/002-data-analytics/plan.md

2.9 KiB
Raw Permalink Blame History

实施计划: 002 - 数据与分析

本文档为“数据与分析”功能规格的技术实施计划。

1. 总体思路

数据分析功能对性能有较高要求。为避免实时计算带来的延迟,核心指标将通过定时任务进行预聚合。前端将使用专业的图表和网络图库来提供丰富的可视化效果。

2. 后端开发任务 (Backend Tasks)

2.1. 数据处理与存储

  • 创建预聚合统计表:
    • 新建 daily_activity_stats 表,字段包括 activity_id, date, pv, uv, participants, new_registrations, k_factor, total_rewards_cost
  • 开发定时任务 (Cron Job):
    • 创建一个每日执行的定时任务,用于计算前一天的各项核心指标,并填充到 daily_activity_stats 表中。
  • 缓存策略:
    • 为“超级传播者榜单”的查询结果设置缓存(如 Redis缓存时间5-10分钟以降低数据库压力。

技术选型说明: 裂变网络图的查询V1.0阶段可通过SQL的递归查询CTE实现。若未来性能遇到瓶颈可考虑引入图数据库如 Neo4j进行优化。

2.2. API Endpoint 设计

  • GET /api/v1/activities/{id}/stats: 获取仪表盘数据

    • Query Params: start_date, end_date
    • Logic: 从 daily_activity_stats 表中查询指定时间范围的数据。
  • GET /api/v1/activities/{id}/graph: 获取裂变网络图数据

    • Query Params: center_user_id, depth
    • Logic: 根据中心用户ID递归查询指定深度的上下级关系并返回节点和边的集合。
  • GET /api/v1/activities/{id}/leaderboard: 获取超级传播者榜单

    • Query Params: sort_by (enum: direct, total), page, limit
    • Logic: 执行排序和分页查询,优先从缓存读取。
  • GET /api/v1/activities/{id}/leaderboard/export: 导出榜单

    • Logic: 查询完整榜单数据生成CSV格式的文件流并返回。

3. 前端开发任务 (Frontend Tasks)

3.1. UI 组件设计

  • AnalyticsDashboard.vue: 数据分析页面的主容器,包含日期选择器和各个图表/榜单组件。
  • DateRangePicker.vue: 可复用的日期范围选择组件包含预设昨天、过去7天等和自定义范围功能。
  • StatsChart.vue: 使用 ECharts for Vue 库,将核心指标以折线图或柱状图的形式进行可视化展示。
  • NetworkGraphViewer.vue: 使用 Vue Flow 库,渲染网络图。需要实现节点的懒加载、点击展开、缩放和平移功能。
  • LeaderboardTable.vue: 可排序的表格组件包含排序切换控件和“导出CSV”按钮。

3.2. API 集成

  • 在API客户端模块中新增上述4个数据相关接口的请求函数。
  • AnalyticsDashboard.vue 组件中统一管理数据获取、加载状态和错误处理,并将数据分发给各个子组件。