TDengine时序数据库
引用文件
目录
简介
本文件面向yudao-cloud项目中的TDengine时序数据库应用,系统性阐述其在设备活动明细、应用活动统计、监控数据等场景下的存储与查询实践,解释TDengine相较传统关系型数据库在高写入、数据压缩、时间序列特化方面的优势,并给出超级表设计、标签与时间戳设计、数据分区策略、SQL示例、与MySQL协同机制以及运维实践(性能调优、容量规划、备份恢复)。
项目结构
TDengine相关实现分布于以下模块与资源:
- SQL初始化脚本:位于sql/tdengine目录,定义数据库、超级表与标签字段
- 设备侧统计重构作业:DeviceRuntimeCountJob负责“影子库+热切换+ETL重写”
- 系统侧监控数据对象:VisitMinuteDO定义监控表的标签字段生成规则
- 报表侧TDengine访问:TDEngineBaseMapper与GoViewTDEngineDataServiceImpl提供数据源路由与查询
- 文档与测试:tdengine.md记录乱序写入与归档方案;TDengineTagTests演示标签查询
图表来源
- device_activity_detail.sql
- app_activity.sql
- monitor.sql
- DeviceRuntimeCountJob.java
- RuntimeCountRefactorProperties.java
- VisitMinuteDO.java
- TDEngineBaseMapper.java
- GoViewTDEngineDataServiceImpl.java
- tdengine.md
- TDengineTagTests.java
章节来源
- datasource.yaml
- device_activity_detail.sql
- app_activity.sql
- monitor.sql
- DeviceRuntimeCountJob.java
- RuntimeCountRefactorProperties.java
- VisitMinuteDO.java
- TDEngineBaseMapper.java
- GoViewTDEngineDataServiceImpl.java
- tdengine.md
- TDengineTagTests.java
核心组件
- TDengine数据库与超级表
- 设备活跃明细:按日/月/年分库,超级表device_activity_detail,标签record_time
- 应用活跃明细:按日/月/年分库,超级表app_activity_detail,标签record_time、package_name
- 访问统计:监控库monitor,超级表visit_minute,标签url_alias、month
- 设备统计重构作业
- 影子库方案:创建影子库→切换数据源→导出旧库→导入到影子库→重置旧库
- 支持多统计库(日/月/年)与KEEP、DURATION等参数配置
- 监控数据对象
- VisitMinuteDO定义data_key与month标签生成规则,便于TDengine标签分区与查询
- 报表与数据源路由
- TDEngineBaseMapper标注@DS(DataSourceConstants.TDENGINE),固定走TDengine数据源
- GoViewTDEngineDataServiceImpl通过JDBC路由至TDengine,支持SQL查询
- 文档与测试
- tdengine.md系统阐述乱序写入导致压缩膨胀的原因与归档方案
- TDengineTagTests演示REST查询与标签字段更新
章节来源
- device_activity_detail.sql
- app_activity.sql
- monitor.sql
- DeviceRuntimeCountJob.java
- RuntimeCountRefactorProperties.java
- VisitMinuteDO.java
- TDEngineBaseMapper.java
- GoViewTDEngineDataServiceImpl.java
- tdengine.md
- TDengineTagTests.java
架构总览
TDengine在yudao-cloud中的应用架构围绕“热库+归档库+ETL清洗+查询路由”展开,核心流程如下:
图表来源
组件详解
设备活跃明 细与应用活跃明细(超级表设计)
- 设备活跃明细
- 分库:device_activity_day、device_activity_month、device_activity_year
- 超级表:device_activity_detail
- 标签:record_time(整型,如yyyyMMdd)
- 字段:ts(时间戳)、data_key(主键)、mac、cpu
- 应用活跃明细
- 分库:app_activity_day、app_activity_month、app_activity_year
- 超级表:app_activity_detail
- 标签:record_time、package_name
- 字段:ts、data_key、mac、cpu、version_code、duration、ip、country
图表来源
章节来源
监控数据(访问统计)
- 监控库:monitor
- 超级表:visit_minute
- 标签:url_alias、month(整型,如202408)
- 字段:ts(分钟级)、data_key(主键)、url、server_ip、domain、visit_count、success_count、fail_count、create_time
图表来源
章节来源
设备统计重构作业(影子库+热切换+ETL)
- 目标:解决乱序写入导致的磁盘膨胀,实现零停机切换
- 步骤:
- 创建影子库(结构与主库一致,含数据库、超级表、KEEP/DURATION等参数)
- 切换数据源(通过Nacos配置activeSuffix,新写入进入影子库)
- 导出旧库(taosdump)
- 导入到影子库(-W重映射)
- 重置旧库(DROP并重建,释放磁盘)
图表来源
章节来源
乱序写入与归档方案(技术原理与实践)
- 乱序写入导致压缩比飙升、索引膨胀、碎片增多
- 归档方案:按天导出CSV→压缩→多线程批量有序写入归档库
- 冷热分离:保留最近N天热数据在线查询,历史数据归档
图表来源
章节来源
报表与查询路由(TDengine数据源)
- 固定数据源:TDEngineBaseMapper通过@DS(DataSourceConstants.TDENGINE)强制走TDengine
- 动态路由:GoViewTDEngineDataServiceImpl根据请求切换数据源并执行SQL
- 与MySQL协同:datasource.yaml配置MySQL数据源,TDengine独立数据源
图表来源
章节来源
标签字段与查询(标签设计与更新)
- 标签字段设计:record_time(整型,如yyyyMMdd)、package_name、url_alias、month
- 查询示例:DISTINCT TBNAME、按标签过滤、按ad_play_type更新
- 标签更新:通过REST接口批量更新标签字段
图表来源
章节来源
依赖关系分析
- 模块耦合
- 设备模块依赖TDengine脚本与重构作业,保障统计库健康
- 系统模块通过VisitMinuteDO与monitor超级表提供监控数据
- 报表模块通过数据源注解与JDBC路由访问TDengine
- 外部依赖
- TDengine服务端(host/port/认证)
- SSH远程执行taosdump与Python脚本
- Nacos配置中心用于热切换
图表来源
- DeviceRuntimeCountJob.java
- RuntimeCountRefactorProperties.java
- TDEngineBaseMapper.java
- GoViewTDEngineDataServiceImpl.java
章节来源
- DeviceRuntimeCountJob.java
- RuntimeCountRefactorProperties.java
- TDEngineBaseMapper.java
- GoViewTDEngineDataServiceImpl.java
性能考量
- 写入顺序
- 保持时间有序写入,避免乱序导致压缩比飙升与碎片增多
- 数据库参数
- KEEP/DURATION/BUFFER/CACHESIZE/MINROWS/MAXROWS等参数需结合数据生命周期与查询模式调优
- 分区与标签
- 合理使用record_time、month、package_name等标签,提升查询局部性
- 归档策略
- 热数据在线查询,历史数据归档并有序重写,降低存储与查询成本
章节来源
故障排查指南
- 乱序写入导致空间膨胀
- 现象:压缩比异常升高、磁盘占用激增
- 处理:启用归档方案,按天导出并有序重写
- 数据源切换失败
- 检查Nacos配置项与activeSuffix是否生效
- 确认SSH可达与taosdump权限
- 查询路由问题
- 确认@DS(DataSourceConstants.TDENGINE)与JDBC路由配置
- 校验SQL语法与标签字段是否存在
章节来源
结论
TDengine在yudao-cloud中通过“分库分表+超级表+标签分区+归档ETL”的组合,实现了设备活跃明细、应用活跃统计与监控数据的高写入、低存储与高效查询。配合严格的写入顺序控制与定期归档,可显著降低存储成本并提升系统稳定性。报表侧通过数据源路由统一访问TDengine,与MySQL形成互补的数据协同体系。
附录
SQL示例(路径引用)
- 创建数据库与超级表
- 数据插入(示例路径)
- 设备活跃明细插入:参考设备模块统计写入流程
- 应用活跃明细插入:参考应用模块统计写入流程
- 查询与聚合
与MySQL协同机制
- MySQL作为系统数据源,承载业务主数据与控制台监控
- TDengine专司时序数据的高写入与压缩存储
- 通过数据源路由与配置中心实现动态切换与热备
章节来源