跳到主要内容

应用安装表

目录

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

简介

本文档详细说明了应用安装相关的数据库表结构,包括应用安装包表(app_install_package)和设备安装设备表(app_install_device)的设计与实现。该系统采用分库分表策略,通过包名和设备维度对应用安装数据进行高效存储和查询。

系统主要服务于设备端应用安装监控,支持大规模设备的应用安装数据收集、存储和分析,为设备管理、应用统计和运维监控提供数据支撑。

项目结构

应用安装相关的核心文件组织如下:

Mermaid Diagram Code:

graph TB
subgraph "应用安装模块"
A[AppInstallPackageDO<br/>包维度数据对象]
B[AppInstallDeviceDO<br/>设备维度数据对象]
C[AppInstallUtil<br/>分区工具类]
end
subgraph "数据库表"
D[app_install_package<br/>包维度表]
E[app_install_device<br/>设备维度表]
F[apk_push_history<br/>推送历史表]
end
subgraph "分析存储"
G[TDengine数据库<br/>app_install]
end
A --> D
B --> E
C --> D
C --> E
D --> G
E --> G

图表来源

章节来源

核心组件

应用安装包表 (app_install_package)

应用安装包表是按包维度存储应用安装信息的核心表,采用复合主键设计,支持超大规模数据存储。

表结构定义

字段名数据类型约束条件描述
idbigint主键, 自增自增主键
package_namevarchar(512)非空应用包名,标签字段
macvarchar(255)可空设备MAC地址
cpu_idvarchar(255)可空CPU标识符
app_namevarchar(512)可空应用名称
class_namevarchar(512)可空启动类名
version_namevarchar(255)可空应用版本名称
version_codebigint可空应用版本号
is_syste_appint可空是否系统应用
last_undate_timedatetime可空采集时间
create_timedatetime可空创建时间(设备维度带过来)
update_timedatetime可空更新时间(设备维度带过来)
partition_indexint非空分区索引

索引设计

  • 主键:(id, partition_index)
  • 辅助索引:(mac, cpu_id)
  • 复合索引:(package_name, version_code)

设备安装设备表 (app_install_device)

设备安装设备表是按设备维度存储应用安装信息的表,支持JSON格式存储应用列表。

表结构定义

字段名数据类型约束条件描述
idint主键, 自增主键
macvarchar(255)可空设备MAC地址
cpu_idvarchar(255)可空CPU标识符
last_undate_timedatetime可空设备端采集时间
app_countint可空应用数量
create_timedatetime可空创建时间
update_timedatetime可空更新时间
appsjson可空应用信息集合
partition_indexint非空分区索引

索引设计

  • 主键:(id, partition_index)
  • 唯一索引:(mac, cpu_id, partition_index)
  • 辅助索引:app_count

章节来源

架构概览

系统采用多层架构设计,结合MySQL分库分表和TDengine时序数据库,实现高性能的应用安装数据存储和分析。

Mermaid Diagram Code:

graph TB
subgraph "数据采集层"
A[设备端上报]
B[消息队列]
end
subgraph "数据处理层"
C[AppInstallUtil<br/>分区策略]
D[数据转换器<br/>包维度/设备维度]
end
subgraph "存储层"
E[MySQL分库分表<br/>app_install_package]
F[MySQL分库分表<br/>app_install_device]
G[TDengine时序数据库<br/>app_install]
end
subgraph "分析层"
H[统计分析]
I[报表生成]
end
A --> B
B --> C
C --> D
D --> E
D --> F
E --> G
F --> G
G --> H
H --> I

图表来源

详细组件分析

分区策略组件

AppInstallUtil类实现了智能的分区策略,确保数据在不同维度上的均匀分布。

Mermaid Diagram Code:

classDiagram
class AppInstallUtil {
+int PACKAGE_PARTITION_COUNT
+int MAC_CPU_PARTITION_COUNT
+Map~String,Integer~ PACKAGE_PARTITION_MAP
+getPartitionByMacCpu(mac, cpu) int
+getPartitionByPackageName(packageName) int
+tableNotExistAndCreate(tableName, ddlPath) boolean
+getPartitionNameByMacCpu(mac, cpu) String
+getPartitionNameByPackageName(packageName) String
}
class AppInstallPackageDO {
+Long id
+String packageName
+String mac
+String cpuId
+String appName
+String className
+String versionName
+Long versionCode
+Boolean isSysteApp
+Date lastUndateTime
+Date createTime
+Date updateTime
+int partitionIndex
+getPartitionIndex() int
}
class AppInstallDeviceDO {
+Integer id
+String mac
+String cpuId
+Date lastUndateTime
+Integer appCount
+Date createTime
+Date updateTime
+String apps
+int partitionIndex
+getPartitionIndex() int
}
AppInstallPackageDO --> AppInstallUtil : "使用分区策略"
AppInstallDeviceDO --> AppInstallUtil : "使用分区策略"

图表来源

数据转换流程

系统支持从设备维度向包维度的数据转换,实现更细粒度的应用安装统计。

Mermaid Diagram Code:

sequenceDiagram
participant Device as 设备端
participant Util as AppInstallUtil
participant Package as app_install_package
participant DeviceTable as app_install_device
Device->>DeviceTable : 上报设备应用列表
DeviceTable->>Util : 计算分区索引
Util-->>DeviceTable : 返回分区信息
DeviceTable->>DeviceTable : 存储设备维度数据
Note over DeviceTable : 数据转换过程
DeviceTable->>Util : 解析应用列表
Util-->>DeviceTable : 逐个应用计算包维度分区
DeviceTable->>Package : 转换为包维度存储
Package->>Package : 批量插入数据

图表来源

数据生命周期管理

系统实现了完善的数据生命周期管理策略:

Mermaid Diagram Code:

flowchart TD
Start([数据到达]) --> Validate["验证数据完整性"]
Validate --> Partition["计算分区索引"]
Partition --> StoreDevice["存储设备维度数据"]
StoreDevice --> Transform["转换为包维度数据"]
Transform --> StorePackage["存储包维度数据"]
StorePackage --> Analyze["统计分析"]
Analyze --> Archive["历史归档"]
Archive --> Cleanup["清理过期数据"]
Cleanup --> End([完成])
Validate --> |数据无效| Error["错误处理"]
Error --> End

章节来源

依赖关系分析

应用安装系统的依赖关系呈现清晰的层次化结构:

Mermaid Diagram Code:

graph TB
subgraph "外部依赖"
A[MySQL数据库]
B[Redisson分布式锁]
C[TDengine时序数据库]
end
subgraph "核心模块"
D[AppInstallUtil工具类]
E[数据对象层]
F[DAO层]
end
subgraph "业务逻辑"
G[数据转换服务]
H[分区管理服务]
I[统计分析服务]
end
A --> D
B --> D
C --> I
D --> E
E --> F
F --> G
G --> H
H --> I

图表来源

章节来源

性能考虑

分区策略优化

系统采用双重分区策略确保数据分布均匀:

  1. 包维度分区:基于包名哈希值,支持59个分区
  2. 设备维度分区:基于MAC+CPU组合哈希值,支持150个分区
  3. 特殊包名映射:前41个特殊包名映射到负数分区,便于特殊处理

查询优化

  • 复合索引设计:针对常用查询模式优化索引结构
  • 分区裁剪:利用分区键进行查询裁剪,减少扫描范围
  • 批量操作:支持批量插入和更新,提高写入性能

内存管理

  • 分区映射缓存:特殊包名分区映射使用HashMap缓存
  • 连接池管理:合理配置数据库连接池参数
  • 内存限制:批量操作设置大小限制,避免内存溢出

故障排除指南

常见问题及解决方案

问题1:分区表创建失败

  • 检查Redisson分布式锁配置
  • 验证数据库权限设置
  • 确认表名格式正确

问题2:数据分区不均匀

  • 检查包名哈希算法
  • 验证分区映射配置
  • 分析特殊包名使用情况

问题3:查询性能下降

  • 检查索引使用情况
  • 分析查询计划
  • 考虑添加合适的索引

章节来源

结论

应用安装表设计体现了现代大数据存储的最佳实践,通过合理的分库分表策略、智能的分区算法和完善的生命周期管理,实现了高性能的应用安装数据存储和分析能力。

系统的主要优势包括:

  • 高扩展性:支持大规模设备和应用数据存储
  • 高性能:通过分区和索引优化查询性能
  • 灵活性:支持包维度和设备维度的双视角分析
  • 可靠性:完善的错误处理和数据一致性保障

该设计为设备管理、应用统计和运维监控提供了坚实的数据基础,能够满足大规模应用场景的需求。

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