跳到主要内容

设备统计表

目录

  1. 简介
  2. 项目结构
  3. 核心组件
  4. 架构总览
  5. 详细组件分析
  6. 依赖关系分析
  7. 性能考量
  8. 故障排查指南
  9. 结论
  10. 附录

简介

本文件聚焦于设备统计相关的表结构与数据流,重点覆盖设备活动明细表(device_activity_detail)与设备运行时表(device_runtime)等统计分析相关表。内容涵盖:

  • 关键字段定义、数据类型、约束条件与业务含义
  • 统计数据的采集机制、存储策略与查询优化
  • 表结构图与字段说明(时间戳、设备标识、活跃度指标、运行时长等)
  • 统计聚合方式与历史归档策略
  • 典型数据分析场景与统计报表需求

项目结构

围绕设备统计的表结构与实现,涉及以下层次:

  • 数据库层:TDengine 超级表与子表定义(设备活动明细、设备运行时长、应用运行时长及其归档)
  • 业务层:设备运行时长的 VO、DO、Service 接口与作业配置
  • 文档层:TDengine 乱序写入压缩问题与归档方案、数据分析模块概览

Mermaid Diagram Code:

graph TB
subgraph "数据库(TDengine)"
A["设备活动明细<br/>device_activity_detail"]
B["设备运行时长明细<br/>device_runtime.device_runtime"]
C["设备运行时长统计(日/月/年)<br/>device_runtime_count_*"]
D["应用运行时长明细<br/>app_runtime_*.*"]
E["应用运行时长归档<br/>app_runtime_archive.*"]
end
subgraph "业务层"
F["DeviceRuntimeSaveReqVO"]
G["DeviceRuntimeRespVO"]
H["DeviceRuntimeService"]
I["DeviceRuntimeDetailDO"]
J["DeviceRuntimeCountDO"]
K["RuntimeCountRefactorProperties"]
L["DeviceRuntimeCountJob"]
end
subgraph "文档"
M["TDengine 乱序写入与归档"]
N["数据分析模块概览"]
end
F --> H
G --> H
H --> I
H --> J
K --> L
L --> C
L --> E
A --- M
B --- M
C --- M
D --- M
E --- M
N --> A
N --> B
N --> C
N --> D
N --> E

图表来源

章节来源

核心组件

  • 设备活动明细表(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 为标签

章节来源

架构总览

设备统计数据从采集到归档的整体流程如下:

Mermaid Diagram Code:

sequenceDiagram
participant 设备 as "设备"
participant 服务 as "业务服务"
participant 热库 as "TDengine 热库<br/>device_runtime / device_runtime_count_*"
participant 归档 as "TDengine 归档库<br/>app_runtime_archive"
participant 作业 as "归档作业<br/>DeviceRuntimeCountJob"
设备->>服务 : 上报设备运行时长/活跃明细
服务->>热库 : 写入明细/统计(乱序写入)
Note over 热库 : 短期热数据(如90/365/2190天)
作业->>热库 : 按天导出明细(SSH远程执行)
热库-->>作业 : CSV备份文件
作业->>归档 : 有序批量重写入(多线程)
归档-->>作业 : 写入完成统计
作业-->>服务 : 更新归档状态

图表来源

章节来源

详细组件分析

设备活动明细表(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 索引策略而定)

Mermaid Diagram Code:

erDiagram
DEVICE_ACTIVITY_DETAIL {
timestamp ts
varchar data_key PK
varchar mac
varchar cpu
int record_time
}

图表来源

章节来源

设备运行时长明细表(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_*)配合,进行聚合查询

Mermaid Diagram Code:

erDiagram
DEVICE_RUNTIME_DETAIL {
timestamp ts
varchar data_key PK
varchar mac
varchar cpu
timestamp end_time
int device_duration
int record_time
}

图表来源

章节来源

设备运行时长统计表(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 聚合,生成日/月/年统计
    • 与明细表配合,支持趋势分析与同比环比

Mermaid Diagram Code:

erDiagram
DEVICE_RUNTIME_COUNT {
timestamp ts
varchar data_key PK
varchar mac
varchar cpu
int device_duration
int 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天)通过归档作业导出、压缩、有序重写入归档库

Mermaid Diagram Code:

flowchart LR
A["热库明细<br/>app_runtime_*.*"] --> B["按day导出CSV"]
B --> C["压缩ZIP"]
C --> D["有序批量写入<br/>归档库 app_runtime_archive.*"]

图表来源

章节来源

业务接口与数据对象

  • 请求/响应 VO
    • DeviceRuntimeSaveReqVO:包含子表名、开始/结束时间、设备运行时长、mac、cpu 等
    • DeviceRuntimeRespVO:包含子表名、时间戳、结束时间、设备运行时长、mac、cpu、记录日期等
  • Service 接口
    • DeviceRuntimeService:提供创建、更新、删除、查询明细与分页查询等能力
  • 数据对象
    • DeviceRuntimeDetailDO:设备运行时长明细实体
    • DeviceRuntimeCountDO:设备运行时长统计实体,含超级表名与子表名组装规则

Mermaid Diagram Code:

classDiagram
class DeviceRuntimeSaveReqVO {
+String tbname
+LocalDateTime startTime
+LocalDateTime endTime
+Long deviceDuration
+String mac
+String cpu
}
class DeviceRuntimeRespVO {
+String tbname
+LocalDateTime startTime
+LocalDateTime endTime
+Long deviceDuration
+String mac
+String cpu
+Integer recordTime
}
class DeviceRuntimeService {
+createRuntime(createReqVO)
+updateRuntime(updateReqVO)
+deleteRuntime(id)
+getRuntimeByTableName(tableName)
+getRuntimePage(pageReqVO)
}
class DeviceRuntimeDetailDO {
+String STABLE_NAME
+String SPLIT_CHAR
+String tbname
+String tableName
}
class DeviceRuntimeCountDO {
+String STABLE_NAME
+String SPLIT_CHAR
+String tbname
+String tableName
}
DeviceRuntimeService --> DeviceRuntimeSaveReqVO : "接收"
DeviceRuntimeService --> DeviceRuntimeRespVO : "返回"
DeviceRuntimeDetailDO --> DeviceRuntimeService : "持久化"
DeviceRuntimeCountDO --> DeviceRuntimeService : "持久化"

图表来源

章节来源

归档作业与配置

  • RuntimeCountRefactorProperties
    • 作用:归档作业的配置项,包含远端主机、SSH凭据、备份路径、并发线程数、各周期 KEEP 参数、日志路径等
    • 关键参数:dayKeep、monthKeep、yearKeep 控制不同周期数据库的保留天数
  • DeviceRuntimeCountJob
    • 作用:负责按天导出、压缩、有序批量重写入归档库;支持重置旧数据库结构
    • 关键流程:按当前激活数据库名重置结构,重建超级表与数据库

Mermaid Diagram Code:

flowchart TD
Start(["归档作业启动"]) --> Calc["计算归档日期区间"]
Calc --> Export["按天导出CSV(SSH)"]
Export --> Compress["压缩ZIP"]
Compress --> Restore["有序批量重写入归档库"]
Restore --> ResetDB["重置旧数据库结构(可选)"]
ResetDB --> End(["更新归档状态"])

图表来源

章节来源

依赖关系分析

  • 表间依赖
    • 设备活动明细表与设备运行时长明细/统计表均通过 record_time 标签实现按时间分表
    • 设备运行时长统计表与明细表在业务上互补:明细用于精确查询,统计用于聚合分析
  • 作业与表依赖
    • 归档作业依赖设备运行时长统计表的结构与命名约定,按周期重置数据库与超级表
  • 文档与实现依赖
    • TDengine 乱序写入与归档方案指导热库与归档库的建设与作业策略

Mermaid Diagram Code:

graph TB
A["设备活动明细表"] --> B["数据分析查询"]
C["设备运行时长明细表"] --> D["聚合统计作业"]
D --> E["设备运行时长统计表"]
F["归档作业"] --> E
F --> G["应用运行时长归档表"]

图表来源

章节来源

性能考量

  • 写入顺序与压缩
    • TDengine 在时间有序写入场景下具备极高压缩比;乱序写入会导致压缩比恶化与磁盘占用激增
    • 建议通过归档作业将乱序热数据导出并有序重写入归档库
  • 热/冷分离
    • 热库保留短期数据(如90/365/2190天),历史数据迁移至归档库
    • 查询近期数据走热库,历史数据走归档库,平衡查询性能与存储成本
  • 聚合与索引
    • 使用 record_time 标签过滤时间范围,减少扫描
    • 对高频查询字段(mac/cpu)进行分组聚合,降低 IO

章节来源

故障排查指南

  • 归档作业失败
    • 检查远端主机连通性与 SSH 凭据配置
    • 核对备份路径与并发线程数设置
    • 查看日志目录与错误输出,确认导出/导入阶段的异常
  • 数据缺失或重复
    • 确认 record_time 标签与子表命名规则一致
    • 核对 data_key 唯一键约束,避免重复写入
  • 查询性能异常
    • 检查时间范围过滤是否命中 record_time 标签
    • 确认热库/归档库切换逻辑是否正确

章节来源

结论

  • 设备统计表通过 TDengine 超级表与标签分表实现高吞吐与时序优化
  • 明细表与统计表互补,满足精确查询与聚合分析两类需求
  • 归档作业通过“热数据乱序写入 -> 定期ETL清洗 -> 归档数据有序重写”解决乱序写入带来的存储膨胀问题
  • 建议在采集、传输、写入三个环节控制时间顺序,最大化发挥 TDengine 的压缩与查询优势

附录

  • 典型数据分析场景
    • 设备日活趋势:基于设备活动明细按日聚合
    • 设备运行时长分布:基于设备运行时长明细与统计表进行分位数与趋势分析
    • 设备型号活跃分析:按设备型号与CPU维度聚合活跃度指标
  • 统计报表需求
    • 日/月/年维度的设备运行时长报表
    • 设备活跃度排行榜与趋势图
    • 异常设备识别与离线时段分析

章节来源

用户文档
AI 助手
Agent 列表
请选择一个 Agent 开始对话
AI 问答