- 简介
- 项目结构
- 核心组件
- 架构总览
- 详细组件分析
- 依赖分析
- 性能考量
- 故障排查指南
- 结论
- 附录
本技术文档围绕统计分析系统,系统性阐述播放量统计机制(广告播放次数、设备启动次数、用户观看时长等核心指标)、用户行为分析(偏好、设备使用习惯、区域分布)、区域分布与时段分析(24小时趋势、周/月周期、节假日效应)、TDengine 时序数据库的应用(数据模型、查询优化、压缩策略),以及统计 API 与数据导出能力。文档同时提供最佳实践与性能优化建议,帮助读者快速理解并落地实施。
项目结构
统计分析模块位于文档目录 docs/analytics 下,包含多个专题文档,覆盖 APP 运行记录、设备日活、APP 安装列表等关键主题;配套的 TDengine 数据模型 SQL 位于 sql/tdengine 目录。整体呈现“文档 + 数据模型 + 实践总结”的结构。
Mermaid Diagram Code:
graph TB
A["数据分析-概览"] --> B["APP运行记录管理"]
A --> C["设备日活统计管理"]
A --> D["APP安装列表"]
B --> E["TDengine 乱序插入压缩问题"]
B --> F["APP运行记录建库建表"]
C --> G["设备运行时长建库建表"]
D --> H["APP安装统计建库建表"]
图表来源
章节来源
核心组件
- 数据采集与上报
- 设备端按日汇总上报 APP 运行记录与 APP 安装列表,亦支持事件上报接口(APP_RUNTIME、APP_INSTALL)。
- 网关/API 接收后写入 Kafka 消息队列,供下游消费者处理。
- 实时处理与离线分析
- Kafka 消费者统一清洗、校验、入库(TDengine 热表/归档表、MySQL 元数据表)。
- XXL-JOB 定时任务完成维度转换、聚合统计与归档。
- 存储与归档
- TDengine 热表保留近期数据,历史数据通过归档流程有序重写,显著降低存储成本。
- 前端与导出
- 提供一级/二级页面查询、同步/异步导出能力,异步导出通过导出任务模块跟踪进度。
章节来源
架构总览
下图展示从设备上报到 TDengine 存储、统计与归档的全链路流程。
Mermaid Diagram Code:
flowchart TD
subgraph 设备端
Dev[设备] --> GW["网关/API"]
end
subgraph 中间件
GW --> KFK["Kafka Topic: app-runtime-list / app-install-list"]
end
subgraph 后端服务
CON["AppRuntimeConsumer / AppInstallListConsumer"]
JOB1["AppRuntimeJob / appInstallDeviceToPackage"]
JOB2["appinstallCountByPackageName"]
ARCH["AppRuntimeArchiveJob"]
end
subgraph 存储层
TDHOT["TDengine 热表"]
TDARCH["TDengine 归档表"]
MYSQL["MySQL 元数据/统计表"]
FILES["本地/远程文件系统"]
end
Dev --> KFK
KFK --> CON
CON --> TDHOT
CON --> MYSQL
JOB1 --> MYSQL
JOB2 --> MYSQL
ARCH --> FILES
FILES --> TDARCH
ARCH --> MYSQL
图表来源
详细组件分析
播放量统计机制(广告播放次数、设备启动次数、用户观看时长)
- 指标定义
- 广告播放次数:通过事件上报接口上报的广告播放事件进行累计。
- 设备启动次数:设备心跳或开机事件触发的启动计数。
- 用户观看时长:APP 运行记录中的运行时长与打开次数,按设备/包名/版本号聚合。
- 实时统计
- 设备端按日汇总上报运行记录;事件上报(APP_RUNTIME)实时进入 Kafka,由消费者清洗后写入 TDengine 热表。
- 包名与 APP 名称通过包名库映射,异常包名可配置为不统计。
- 历史数据存储
- 热表保留近期数据,历史数据通过归档任务有序重写至归档表,显著降低存储成本。
- 查询与导出
- 一级页面按月统计结果来自离线聚合表,二级页面支持按设备/日期范围查询实时明细。
- 大数据量采用异步导出,小数据量支持同步导出。
Mermaid Diagram Code:
sequenceDiagram
participant Dev as "设备"
participant API as "网关/API"
participant MQ as "Kafka"
participant C as "AppRuntimeConsumer"
participant TD as "TDengine 热表"
participant S as "统计任务(AppRuntimeJob)"
participant M as "MySQL 统计表"
Dev->>API : "上报运行记录/事件(APP_RUNTIME)"
API->>MQ : "写入 app-runtime-list"
MQ-->>C : "消费消息"
C->>C : "清洗/校验/包名映射/任务关联"
C->>TD : "写入热表"
C->>M : "更新关联任务状态"
S->>TD : "读取热/归档表(按月)"
S->>M : "写入月报统计"
图表来源
章节来源
用户行为分析(偏好、设备使用习惯、区域分布)
- 偏好分析
- 包名统计:按 APP 包名与版本号聚合,统计安装设备数与打开次数,辅助判断用户偏好。
- 设备统计:按设备维度查看安装 APP 明细,支持跨月快照还原。
- 设备使用习惯
- 设备日活统计:基于心跳上报统计日活,支持按 MAC/CPU/地区筛选。
- 设备运行时长:按日/月/年稳定表统计设备运行时长,支持按记录时间维度聚合。
- 区域分布特征
- 日活列表支持按地区筛选,结合设备维度数据进行区域分布分析。
- APP 安装列表支持按地区维度的包名统计与设备统计联动分析。
Mermaid Diagram Code:
flowchart TD
A["设备上报(心跳/安装/运行)"] --> B["Kafka 消费入库"]
B --> C["TDengine 热/归档表"]
B --> D["MySQL 元数据/统计表"]
C --> E["日活/运行时长/安装统计"]
D --> E
E --> F["区域分布/偏好分析"]
图表来源
章节来源
区域分布分析(省市区、运营商、网络类型等)