Appearance
数据过滤脚本
设备一直在上报数据, 但大部分值根本没变化。aiots 的数据过滤脚本在采集和入库之间加了一道关卡, 用几行 JS 控制哪些数据写进数据库, 把无效存储压到最低。
📖 配置教程:脚本引擎教程
什么时候会用到这个功能
工况稳定, 设备每秒上报的都是同一个值。 一个压力变送器稳定运行时每秒上报一次, 值都是 0.5MPa, 一天 86400 条记录, 有用的可能就几十条。用 methods.isChange(data) 判断值变没变, 变了才入库, 重复值直接拦在库外。
大量设备持续上报重复值, 数据库不断扩容。 水务项目 200 多台流量计和压力变送器, 稳定运行时每天入库近 2000 万条, 其中 95% 以上是重复值, 查历史卡、备份大、存储贵。配数据过滤后日入库量从 2000 万条降到 80 万条以内, 历史查询秒级返回。
有些属性变化太频繁, 想降频存储。 振动传感器每秒都在变, 全部入库数据量太大。用 methods.isGeInterval(data, 30) 表示距上次入库超过 30 秒才写一条, 相当于降频存储。两种方式可组合: 值变了立刻入库, 值没变但过了指定时间也写一条, 保证不漏数据。
想改入库规则, 不想找开发发版。 传统去重逻辑写在后端, 改一个属性的过滤规则就要改代码、测试、发版。aiots 在页面上改脚本保存即生效, 运维自己就能搞定, 还能用 methods.isProduct 让不同产品走不同过滤策略。
能解决哪些问题
| 问题 | 解法 |
|---|---|
| 稳定工况下大量重复数据入库 | 值变才入库, 重复值拦在库外 |
| 数据库膨胀、不断扩容花钱 | 入库量骤降, 数据库稳定 |
| 历史数据查询卡顿 | 数据量减 90%+, 秒级返回 |
| 改过滤规则要找开发发版 | 页面改脚本即生效 |
