Influxdb 使用 group by 加速长时间查询

Influxdb speed up query over long time periods with group by

我每秒将传感器数据写入 influxdb 数据库。 grafana 显示每周、每月或每年的摘要非常慢,因为它需要查询数千个值。

为了加快速度,我正在考虑使用 cron 作业来 运行 像

这样的查询
select mean(sensor1) into data_avg_1h from data where time > start and time <= end group by time(1h)

select mean(sensor1) into data_avg_1d from data where time > start and time <= end group by time(1d)

select mean(sensor1) into data_avg_1w from data where time > start and time <= end group by time(1w)

这意味着我需要更多存储空间,但查询速度 运行 快得多。

这是一项艰巨的工作还是可以接受的,有没有更聪明的方法来做这样的事情?

是的。完全没问题,还建议像您在问题中提到的那样对数据进行下采样。

但是,与其使用 cronjob,不如使用 InfluxDB 的连续查询功能来获得相同的结果。

Downsampling & Contious Query 文档。

请注意,在存储短期平均值时,如果您想从此下采样数据计算较长时间段的平均值,则必须计算加权平均值。否则,您将计算平均值的平均值,这可能不等于根据原始数据计算的平均值。

这是因为,每个下采样平均值可能具有不同数量的数据点。

因此,在计算固定间隔的平均值时,存储在该间隔内接收到的数据点数。这样你就可以计算出加权平均值了。