修复了EQ 曲线接口中,+没有转义成空格的 bug
This commit is contained in:
@@ -34,10 +34,10 @@
|
||||
|
||||
## 更新摘要
|
||||
**所做更改**
|
||||
- 更新OTA表结构定义:删除了pawVerCode、pawVerName、pawUrl、pawMd5四列,OTA表现在包含id、verCode、verName、url、md5、force、desc、model、hw、target、beta、startTime、endTime、status等核心字段,简化了数据库结构
|
||||
- 更新数据模型文档以反映OTA表结构的简化
|
||||
- 更新实体关系图和字段定义
|
||||
- 更新OTA目标设备表结构:ota_target_device 表已简化,移除了 type 字段,现在仅包含 id、ota_id、mac_addr、create_at 字段
|
||||
- 更新实体关系图和字段定义以反映表结构简化
|
||||
- 更新数据访问模式和业务逻辑说明
|
||||
- 更新OTA升级子系统的实现细节
|
||||
|
||||
## 目录
|
||||
1. [简介](#简介)
|
||||
@@ -54,7 +54,7 @@
|
||||
## 简介
|
||||
本文件面向 Luxsin 应用 API 的数据库与数据模型,系统化梳理实体关系、字段定义、索引与约束、数据访问模式、缓存与搜索集成、性能优化、数据生命周期与迁移路径,并给出品牌(Brand)与型号(Model)实体的设计理念与业务逻辑说明。文档同时覆盖数据库连接配置、查询优化建议、数据安全与隐私要求以及访问控制要点。
|
||||
|
||||
**更新** 本次更新反映了OTA表结构的重大简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段,提高了数据库结构的简洁性和可维护性。
|
||||
**更新** 本次更新反映了 OTA 目标设备表结构的重大简化,移除了 type 字段,现在采用更简洁的单表架构设计,提高了数据库结构的简洁性和可维护性。
|
||||
|
||||
## 项目结构
|
||||
本项目采用分层架构:入口程序负责初始化配置、数据库、搜索引擎与缓存;路由层组织 HTTP 接口;处理器层封装业务接口;仓库层实现数据访问;模型层承载数据结构;搜索与缓存模块作为外部依赖集成。
|
||||
@@ -146,14 +146,14 @@ TASK_DP --> REPO_D
|
||||
## 核心组件
|
||||
- 数据库表 model:存储耳机型号信息,包含唯一组合索引以保证品牌+型号的唯一性。
|
||||
- 设备持久化表:user_device(设备信息持久化)、user_active(设备活跃度统计)
|
||||
- OTA 升级表:ota(固件升级信息,已简化结构)、black_list(黑名单)、ota_target_device(定向设备)
|
||||
- OTA 升级表:ota(固件升级信息)、black_list(黑名单)、ota_target_device(定向设备)
|
||||
- 模型对象 Brand 与 Model:分别映射品牌与型号的 JSON 字段与数据库列。
|
||||
- 仓库层:提供按品牌名或型号名检索的查询方法,支持模糊匹配与精确匹配。
|
||||
- 处理器层:暴露 HTTP 接口,支持返回 JSON 或 Base64 编码响应。
|
||||
- 配置层:集中加载数据库、搜索引擎与缓存的连接参数,并进行基本校验。
|
||||
- 基础设施:MySQL 连接池配置、Redis 客户端、Meilisearch 搜索客户端。
|
||||
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段。
|
||||
**更新** OTA 目标设备表结构已简化,移除了 type 字段,现在采用更简洁的单表架构设计。
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:20-38](file://sql/model.sql#L20-L38)
|
||||
@@ -234,9 +234,9 @@ note over H,RC : "可选:对热点数据进行缓存读写<br/>设备上报:
|
||||
- UserActive:id(整数,主键)、mac_addr(字符串)、model(字符串)、active_date(日期,主键部分)、ip_addr(字符串)、create_at(时间戳,默认当前时间)
|
||||
- OTA:id(整数,主键)、verCode(整数)、verName(字符串)、url(字符串)、md5(字符串)、force(整数,默认0)、desc(字符串,可空)、model(字符串,可空)、hw(整数,默认0)、target(整数,默认0)、beta(整数,默认0)、startTime(时间戳,可空)、endTime(时间戳,可空)、status(整数,默认1)
|
||||
- BlackList:id(整数,主键)、ota_id(整数)、mac(字符串,默认空)、create_at(时间戳,默认当前时间)
|
||||
- OTATargetDevice:id(整数,主键)、ota_id(整数)、mac_addr(字符串)、type(整数,默认1,1-白名单;2-黑名单)、create_at(时间戳,默认当前时间)
|
||||
- OTATargetDevice:id(整数,主键)、ota_id(整数)、mac_addr(字符串)、create_at(时间戳,默认当前时间)
|
||||
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段。
|
||||
**更新** OTA 目标设备表结构已简化,移除了 type 字段,现在采用更简洁的单表架构设计,type 字段不再存在于 ota_target_device 表中。
|
||||
|
||||
```mermaid
|
||||
erDiagram
|
||||
@@ -295,7 +295,6 @@ OTA_TARGET_DEVICE {
|
||||
int id PK
|
||||
int ota_id
|
||||
string mac_addr
|
||||
int type
|
||||
datetime create_at
|
||||
}
|
||||
BRAND ||--o{ MODEL : "拥有多个型号"
|
||||
@@ -342,7 +341,7 @@ OTA ||--o{ OTA_TARGET_DEVICE : "定向设备关联"
|
||||
- 分区表:user_active 表按 active_date 进行范围分区,包含 170 个分区
|
||||
- 存储引擎与字符集:InnoDB、utf8mb4、排序规则 0900_ai_ci
|
||||
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息字段。
|
||||
**更新** OTA 目标设备表结构已简化,移除了 type 字段,现在采用更简洁的单表架构设计。
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:20-38](file://sql/model.sql#L20-L38)
|
||||
@@ -409,7 +408,7 @@ end
|
||||
- OTA 升级接口:接收 model、hw、mac、beta 参数,返回合适的 OTA 升级信息
|
||||
- 错误处理:内部错误统一返回 500 并记录日志
|
||||
|
||||
**更新** OTA接口现在使用简化的OTA表结构,不再需要处理pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
**更新** OTA 接口现在使用简化的 OTA 目标设备表结构,不再需要处理 type 字段。
|
||||
|
||||
**章节来源**
|
||||
- [internal/handler/brand.go:1-50](file://internal/handler/brand.go#L1-L50)
|
||||
@@ -423,7 +422,7 @@ end
|
||||
- 设备缓存:使用 Redis Hash 存储设备上报信息,键为设备 MAC 地址
|
||||
- 持久化策略:定时任务批量处理 Redis 缓存数据,避免频繁数据库写入
|
||||
|
||||
**更新** OTA缓存策略保持不变,但查询逻辑已简化。
|
||||
**更新** OTA 缓存策略保持不变,但查询逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/search/meilisearch.go:1-46](file://internal/search/meilisearch.go#L1-L46)
|
||||
@@ -473,7 +472,7 @@ end
|
||||
- 灰度发布:通过 beta 标识实现渐进式升级发布
|
||||
- 强制升级:支持强制升级策略,阻止设备继续使用旧版本
|
||||
|
||||
**更新** OTA表结构已简化,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,查询逻辑相应简化。
|
||||
**更新** OTA 目标设备表结构已简化,移除了 type 字段,查询逻辑相应简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/handler/ota.go:23-144](file://internal/handler/ota.go#L23-L144)
|
||||
@@ -551,7 +550,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- user_active 表按日期分区,提高大数据量下的查询性能
|
||||
- 分区裁剪可以显著减少扫描数据量
|
||||
|
||||
**更新** OTA查询逻辑已简化,减少了不必要的字段扫描,提高了查询效率。
|
||||
**更新** OTA 查询逻辑已简化,减少了不必要的字段扫描,提高了查询效率。
|
||||
|
||||
**章节来源**
|
||||
- [internal/database/mysql.go:33-36](file://internal/database/mysql.go#L33-L36)
|
||||
@@ -581,7 +580,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 检查 OTA 表数据完整性和索引状态
|
||||
- 验证黑名单和定向设备表的数据准确性
|
||||
|
||||
**更新** OTA故障排查已简化,不再需要检查pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
**更新** OTA 故障排查已简化,不再需要检查 type 字段。
|
||||
|
||||
**章节来源**
|
||||
- [internal/config/database.go:57-71](file://internal/config/database.go#L57-L71)
|
||||
@@ -596,7 +595,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- [internal/cache/redis.go:10-16](file://internal/cache/redis.go#L10-L16)
|
||||
|
||||
## 结论
|
||||
本设计以简洁的表结构与清晰的分层架构支撑品牌与型号的查询需求。通过搜索引擎与缓存提升检索性能,配合连接池与错误处理机制保障稳定性。**更新** OTA表结构的简化显著提高了数据库的简洁性和可维护性,删除了pawVerCode、pawVerName、pawUrl、pawMd5四个冗余字段,保留了核心的固件升级信息。新增的设备持久化和 OTA 固件升级子系统进一步完善了系统的业务能力,通过 Redis 缓存和分区表优化提升了大规模数据处理的性能。后续可在索引策略、缓存策略与数据迁移方面进一步细化,以满足生产环境的高可用与高性能要求。
|
||||
本设计以简洁的表结构与清晰的分层架构支撑品牌与型号的查询需求。通过搜索引擎与缓存提升检索性能,配合连接池与错误处理机制保障稳定性。**更新** OTA 目标设备表结构的简化显著提高了数据库的简洁性和可维护性,移除了 type 字段,现在采用更简洁的单表架构设计。新增的设备持久化和 OTA 固件升级子系统进一步完善了系统的业务能力,通过 Redis 缓存和分区表优化提升了大规模数据处理的性能。后续可在索引策略、缓存策略与数据迁移方面进一步细化,以满足生产环境的高可用与高性能要求。
|
||||
|
||||
## 附录
|
||||
|
||||
@@ -608,7 +607,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 时间字段 create_at 默认当前时间,便于审计与排序
|
||||
- 处理器层对空结果返回空数组,避免无效数据传播
|
||||
|
||||
**更新** OTA数据验证规则已简化,不再需要验证pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
**更新** OTA 数据验证规则已简化,不再需要验证 type 字段。
|
||||
|
||||
**章节来源**
|
||||
- [sql/model.sql:24-35](file://sql/model.sql#L24-L35)
|
||||
@@ -625,7 +624,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 设备示例:id=1214, mac_addr="AA:BB:CC:DD:EE:FF", model="WH-1000XM4", add_time="2026-05-28 17:08:30", ver="1.2.3"
|
||||
- OTA 示例:id=48, verCode=100, verName="v1.2.3", url="http://example.com/firmware.bin", md5="d41d8cd98f00b204e9800998ecf8427e", force=1, desc="重大安全更新", model="WH-1000XM4", hw=1, target=1, beta=0, status=1
|
||||
|
||||
**更新** OTA示例数据已简化,移除了pawVerCode、pawVerName、pawUrl、pawMd5字段。
|
||||
**更新** OTA 示例数据已简化,移除了 type 字段。
|
||||
|
||||
**章节来源**
|
||||
- [internal/model/brand.go:4-5](file://internal/model/brand.go#L4-L5)
|
||||
@@ -640,7 +639,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 归档策略:保留近一年的活跃型号,历史数据移至冷存储
|
||||
- 审计:保留变更日志与备份周期,确保可追溯性
|
||||
|
||||
**更新** OTA数据生命周期管理保持不变,但查询逻辑已简化。
|
||||
**更新** OTA 数据生命周期管理保持不变,但查询逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [sql/user_active.sql:33-204](file://sql/user_active.sql#L33-L204)
|
||||
@@ -653,7 +652,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 设备数据迁移:支持从临时表导入到正式表,处理重复数据
|
||||
- OTA 数据迁移:支持版本号递增和兼容性检查
|
||||
|
||||
**更新** OTA数据迁移已简化,不需要处理pawVerCode、pawVerName、pawUrl、pawMd5字段的迁移。
|
||||
**更新** OTA 数据迁移已简化,不需要处理 type 字段的迁移。
|
||||
|
||||
**章节来源**
|
||||
- [sql/user_device.sql:20-35](file://sql/user_device.sql#L20-L35)
|
||||
@@ -667,7 +666,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 设备隐私:MAC 地址等个人标识信息需遵循隐私保护法规
|
||||
- OTA 安全:固件 MD5 校验确保下载完整性,黑名单机制防止恶意设备升级
|
||||
|
||||
**更新** OTA安全机制保持不变,但查询逻辑已简化。
|
||||
**更新** OTA 安全机制保持不变,但查询逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/config/database.go:67-69](file://internal/config/database.go#L67-L69)
|
||||
@@ -693,7 +692,7 @@ TASK_DP["internal/task/device_persist.go"] --> REPO_D
|
||||
- 数据一致性:通过唯一索引和事务保证数据完整性,通过分区表优化查询性能
|
||||
- 可扩展性:模块化设计支持功能扩展,预留接口便于新业务场景接入
|
||||
|
||||
**更新** OTA设计理念保持不变,但实现逻辑已简化。
|
||||
**更新** OTA 设计理念保持不变,但实现逻辑已简化。
|
||||
|
||||
**章节来源**
|
||||
- [internal/model/user_device.go:5-11](file://internal/model/user_device.go#L5-L11)
|
||||
|
||||
Reference in New Issue
Block a user