设备统计表
引用文件
本文引用的文件
- device_activity_detail.sql
- device_runtime.sql
- app_runtime.sql
- app_runtime_archive.sql
- DeviceRuntimeSaveReqVO.java
- DeviceRuntimeRespVO.java
- DeviceRuntimeService.java
- DeviceRuntimeCountDO.java
- DeviceRuntimeDetailDO.java
- RuntimeCountRefactorProperties.java
- DeviceRuntimeCountJob.java
- tdengine.md
- app-running-records.md
- index.md
目录
简介
本文件聚焦于设备统计相关的表结构与数据流,重点覆盖设备活动明细表(device_activity_detail)与设备运行时表(device_runtime)等统计分析相关表。内容涵盖:
- 关键字段定义、数据类型、约束条件与业务含义
- 统计数据的采集机制、存储策略与查询优化
- 表结构图与字段说明(时间戳、设备标识、活跃度指标、运行时长等)
- 统计聚合方式与历史归档策略
- 典型数据分析场景与统计报表需求
项目结构
围绕设备统计的表结构与实现,涉及以下层次:
- 数据库层:TDengine 超级表与子表定义(设备活动明细、设备运行时长、应用运行时长及其归档)
- 业务层:设备运行时长的 VO、DO、Service 接口与作业配置
- 文档层:TDengine 乱序写入压缩问题与归档方案、数据分析模块概览
图表来源
- device_activity_detail.sql
- device_runtime.sql
- app_runtime.sql
- app_runtime_archive.sql
- DeviceRuntimeSaveReqVO.java
- DeviceRuntimeRespVO.java
- DeviceRuntimeService.java
- DeviceRuntimeDetailDO.java
- DeviceRuntimeCountDO.java
- RuntimeCountRefactorProperties.java
- DeviceRuntimeCountJob.java
- tdengine.md
- index.md
章节来源
核心组件
- 设备活动明细表(device_activity_detail)
- 用途:记录设备活跃 明细,按日/月/年分库分表,保留短期热数据,长期归档
- 关键字段:ts、data_key、mac、cpu、record_time
- 约束与标签:data_key 为主键;record_time 为标签,用于按时间维度分表
- 设备运行时长明细表(device_runtime.device_runtime)
- 用途:记录设备运行时长明细,包含开始/结束时间与运行时长
- 关键字段:ts、data_key、mac、cpu、end_time、device_duration、record_time
- 约束与标签:data_key 为主键;record_time 为标签
- 设备运行时长统计表(device_runtime_count_*)
- 用途:按日/月/年维度统计设备运行时长,支持聚合查询与历史归档
- 关键字段:ts、data_key、mac、cpu、device_duration、record_time
- 约束与标签:data_key 为主键;record_time 为标签
- 应用运行时长明细与归档(app_runtime_* 与 app_runtime_archive)
- 用途:应用运行时长明细与归档,体现 TDengine 乱序写入的归档策略
- 关键字段:record_time、data_key、mac、cpu_id、version_code、duration、open_time、create_time、package_name、day
- 约束与标签:data_key 为主键;package_name、day 为标签
章节来源
架构总览
设备统计数据从采集到归档的整体流程如下:
图表来源
章节来源
详细组件分析
设备活动明细表(device_activity_detail)
- 表结构要点
- 超级表:device_activity_day.device_activity_detail、device_activity_month.device_activity_detail、device_activity_year.device_activity_detail
- 字段:ts、data_key(主键)、mac、cpu
- 标签:record_time(int),用于按日/月/年分表
- 数据库保留策略:日库90天、月库395天、年库2190天
- 业务含义
- ts:事件发生时间戳
- data_key:唯一键,组合设备与维度
- mac/cpu:设备标识与CPU标识
- record_time:记录日期(整型),用于按时间分表
- 查询优化建议
- 使用 record_time 标签过滤,限定时间范围
- 优先在日/月/年库内查询,避免跨库扫描
- 对高频查询字段建立合适索引(视 TDengine 索引策略而定)
图表来源
章节来源
设备运行时长明细表(device_runtime.device_runtime)
- 表结构要点
- 超级表:device_runtime.device_runtime
- 字段:ts、data_key(主键)、mac、cpu、end_time、device_duration、record_time
- 数据库保留策略:90天
- 业务含义
- ts/end_time:开始/结束时间
- device_duration:设备运行时长(秒/毫秒,视业务定义)
- record_time:记录日期(整型),用于按时间分表
- 查询优化建议
- 使用 record_time 限定时间范围
- 对 mac/cpu 进行分组聚合,减少扫描范围
- 与统计表(device_runtime_count_*)配合,进行聚合查询
图表来源
章节来源
设备运行时长统计表(device_runtime_count_*)
- 表结构要点
- 超级表:device_runtime_count_day.device_runtime_count、device_runtime_count_month.device_runtime_count、device_runtime_count_year.device_runtime_count
- 字段:ts、data_key(主键)、mac、cpu、device_duration、record_time
- 数据库保留策略:日库90天、月库365天、年库2190天
- 业务含义
- device_duration:按日/月/年维度的设备运行时长统计值
- record_time: 记录日期(整型),用于按时间分表
- 聚合方式
- 按 mac/cpu/record_time 聚合,生成日/月/年统计
- 与明细表配合,支持趋势分析与同比环比
图表来源
章节来源
应用运行时长明细与归档(app_runtime_* 与 app_runtime_archive)
- 表结构要点
- 明细:app_runtime_.,字段 包含 record_time、data_key、mac、cpu_id、version_code、duration、open_time、create_time、package_name、day
- 归档:app_runtime_archive.*,字段结构与明细一致
- 业务含义
- 体现“隔天汇总上报”类数据的乱序写入与归档过程
- day 标签用于按天分片导出与归档
- 归档策略
- 热数据(最近45天)在线查询
- 历史数据(>45天)通过归档作业导出、压缩、有序重写入归档库
图表来源
章节来源
业务接口与数据对象
- 请求/响应 VO
- DeviceRuntimeSaveReqVO:包含子表名、开始/结束时间、设备运行时长、mac、cpu 等
- DeviceRuntimeRespVO:包含子表名、时间戳、结束时间、设备运行时长、mac、cpu、记录日期等
- Service 接口
- DeviceRuntimeService:提供创建、更新、删除、查询明细与分页查询等能力
- 数据对象
- DeviceRuntimeDetailDO:设备运行时长明细实体
- DeviceRuntimeCountDO:设备运行时长统计实体,含超级表名与子表名组装规则
图表来源
- DeviceRuntimeSaveReqVO.java
- DeviceRuntimeRespVO.java
- DeviceRuntimeService.java
- DeviceRuntimeDetailDO.java
- DeviceRuntimeCountDO.java
章节来源
- DeviceRuntimeSaveReqVO.java
- DeviceRuntimeRespVO.java
- DeviceRuntimeService.java
- DeviceRuntimeDetailDO.java
- DeviceRuntimeCountDO.java
归档作业与配置
- RuntimeCountRefactorProperties
- 作用:归档作业的配置项,包含远端主机、SSH凭据、备份路径、并发线程数、各周期 KEEP 参数、日志路径等
- 关键参数:dayKeep、monthKeep、yearKeep 控制不同周期数据库的保留天数
- DeviceRuntimeCountJob
- 作用:负责按天导出、压缩、有序批量重写入归档库;支持重置旧数据库结构
- 关键流程:按当前激活数据库名重置结构,重建超级表与数据库
图表来源
章节来源
依赖关系分析
- 表间依赖
- 设备活动明细表与设备运行时长明细/统计表均通过 record_time 标签实现按时间分表
- 设备运行时长统计表与明细表在业务上互补:明细用于精确查询,统计用于聚合分析
- 作业与表依赖
- 归档作业依赖设备运行时长统计表的结构与命名约定,按周期重置数据库与超级表
- 文档与实现依赖
- TDengine 乱序写入与归档方案指导热库与归档库的建设与作业策略
图表来源
章节来源
性能考量
- 写入顺序与压缩
- TDengine 在时间有序写入场景下具备极高压缩比;乱序写入会导致压缩比恶化与磁盘占用激增
- 建议通过归档作业将乱序热数据导出并有序重写入归档库
- 热/冷分离
- 热库保留短期数据(如90/365/2190天),历史数据迁移至归档库
- 查询近期数据走热库,历史数据走归档库,平衡查询性能与存储成本
- 聚合与索引
- 使用 record_time 标签过滤时间范围,减少扫描
- 对高频查询字段(mac/cpu)进行分组聚合,降低 IO
章节来源
故障排查指南
- 归档作业失败
- 检查远端主机连通性与 SSH 凭据配置
- 核对备份路径与并发线程数设置
- 查看日志目录与错误输出,确认导出/导入阶段的异常
- 数据缺失或重复
- 确认 record_time 标签与子表命名规则一致
- 核对 data_key 唯一键约束,避免重复写入
- 查询性能异常
- 检查时间范围过滤是否命中 record_time 标签
- 确认热库/归档库切换逻辑是否正确
章节来源
结论
- 设备统计表通过 TDengine 超级表与标签分表实现高吞吐与时序优化
- 明细表与统计表互补,满足精确查询与聚合分析两类需求
- 归档作业通过“热数据乱序写入 -> 定期ETL清洗 -> 归档数据有序重写”解决乱序写入带来的存储膨胀问题
- 建议在采集、传输、写入三个环节控制时间顺序,最大化发挥 TDengine 的压缩与查询优势
附录
- 典型数据分析场景
- 设备日活趋势:基于设备活动明细按日聚合
- 设备运行时长分布:基于设备运行时长明细与统计表进行分位数与趋势分析
- 设备型号活跃分析:按设备型号与CPU维度聚合活跃度指标
- 统计报表需求
- 日/月/年维度的设备运行时长报表
- 设备活跃度排行榜与趋势图
- 异常设备识别与离线时段分析
章节来源