SqlDBProducer
概述
SqlDBProducer 是 ThingsGateway 中用于适配关系型数据库的插件,可以定时或基于变化存储变量数据,也可以实时更新数据到实时表。该插件支持多种关系型数据库,为物联网设备数据提供持久化存储方案。
核心功能
- 实时数据存储:将设备变量的实时数据更新到实时表
- 历史数据存储:定时或基于变化将设备变量数据存储到历史表
- 数据库类型支持:支持多种关系型数据库
- 灵活的上传模式:支持定时上传、变化上传或两者同时生效
- 数据缓存:支持内存队列和文件缓存,确保数据可靠性
- 动态脚本:支持通过脚本自定义数据处理逻辑
应用场景
- 工业监控系统:存储设备运行状态和参数,用于实时监控和历史分析
- 能源管理系统:存储能耗数据,用于能耗分析和优化
- 环境监测系统:存储环境参数数据,用于环境质量评估
- 设备管理系统:存储设备维护记录和状态变更,用于设备生命周期管理
插件属性配置
配置界面
详细配置项
| 配置项 | 说明 | 默认值 | 建议值 |
|---|---|---|---|
| 启用实时表 | 开启实时更新数据功能 | False | 根据实际需求启用 |
| 启用历史表 | 开启历史存储功能 | True | 建议开启,用于数据归档 |
| 实时表名称 | 实时表名称 | - | 使用有意义的表名,如 realtime_data |
| 历史表名称 | 历史表名称 | - | 使用有意义的表名,如 history_data |
| 数据库类型 | 数据库类型 | - | 根据实际使用的数据库选择 |
| 链接字符串 | 数据库连接字符串 | - | 参考下方数据库连接字符串示例 |
| 实时表定时上传间隔 | 实时表定时上传间隔(秒) | 1 | 根据数据更新频率设置 |
| 分组上传 | 启用后,无论是定时还是变化模式,始终会上传变量分组属性为key分组的全部变量 | False | 批量数据场景建议启用 |
| 是否选择全部变量 | 是否选择全部变量,true时不需要单个变量添加业务属性 | False | 变量较多时建议启用 |
| 上传模式 | 数据上传模式:间隔/变化/变化和间隔同时生效 | 间隔 | 根据数据采集需求选择 |
| 定时上传间隔 | 间隔执行时间(秒) | 10 | 根据数据更新频率设置 |
| 严格入队模式 | 启用后,每次定时上传时,保证一组数据在同一时间点可见 | - | |
| 启用缓存 | 是否启用缓存 | False | 网络不稳定或数据量大时建议启用 |
| 缓存文件最大长度(mb) | 缓存文件最大长度 | 100 | 根据磁盘空间和数据量设置 |
| 上传每页条数 | 每一次上传的列表最大数量 | 1000 | 根据数据库性能和网络带宽调整 |
| 内存队列最大数量 | 内存队列的最大数量,超出或失败时转入文件缓存 | 10000 | 根据系统内存和数据量调整 |
| 历史库动态脚本 | 历史库数据处理脚本 | - | 参考下方脚本示例 |
| 实时库动态脚本 | 实时库数据处理脚本 | - | 参考下方脚本示例 |
脚本与实体
脚本接口
SqlDBProducer 支持通过动态脚本自定义数据处理逻辑,脚本接口与 TDengineDBProducer 相同。
详细格式说明请参考 文档。
最佳实践
数 据库优化
-
索引设计
- 为历史表创建适当的索引,提高查询性能
- 实时表建议创建设备名和变量名的唯一索引
-
分区表
- 对于历史数据量较大的场景,建议使用分区表
- 按时间范围进行分区,便于数据管理和查询
-
数据清理
- 定期清理过期的历史数据
- 考虑使用数据归档策略,将老数据移至归档表
性能优化
-
上传参数调整
- 根据数据量和网络状况调整上传间隔
- 合理设置内存队列大小和文件缓存大小
-
批量处理
- 启用分组上传,减少数据库连接次数
- 调整上传每页条数,平衡网络传输和数据库处理能力
-
脚本优化
- 避免在脚本中执行耗时操作
- 优化脚本逻辑,减少不必要的数据处理
可靠性保障
- 缓存配置
- 启用缓存功能,确保网络不稳定时数据不丢失
- 合理设置缓存文件大小,避免磁盘空间不足
故障排查
常见问题及解决方案
| 问题 | 可能原因 | 解决方案 |
|---|---|---|
| 数据未写入数据库 | 1. 数据库连接失败 2. SQL语句错误 3. 权限不足 | 1. 检查连接字符串和网络连接 2. 查看日志中的SQL错误信息 3. 确认数据库用户权限 |
| 数据写入速度慢 | 1. 数据库性能不足 2. 上传频率过高 3. 数据量过大 | 1. 优化数据库性能 2. 调整上传间隔 3. 增加数据库资源或使用分区表 |
| 缓存文件过大 | 1. 数据库连接持续失败 2. 缓存大小设置不合理 | 1. 解决数据库连接问题 2. 调整缓存文件最大长度 |
| 脚本执行失败 | 1. 脚本语法错误 2. 脚本逻辑错误 | 1. 检查脚本语法 2. 查看日志中的错误信息 |
日志分析
当遇到问题时,建议查看 ThingsGateway 的日志文件,特别是与 SqlDBProducer 相关的日志。日志中通常会包含详细的错误信息,帮助定位问题。
总结
SqlDBProducer 是 ThingsGateway 中功能强大的关系型数据库存储插件, 通过合理配置和优化,可以为物联网系统提供可靠、高效的数据存储方案。在实际应用中,应根据具体场景和需求,选择合适的配置参数和优化策略,以达到最佳的性能和可靠性。