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 文档。
请注意,在存储短期平均值时,如果您想从此下采样数据计算较长时间段的平均值,则必须计算加权平均值。否则,您将计算平均值的平均值,这可能不等于根据原始数据计算的平均值。
这是因为,每个下采样平均值可能具有不同数量的数据点。
因此,在计算固定间隔的平均值时,存储在该间隔内接收到的数据点数。这样你就可以计算出加权平均值了。
我每秒将传感器数据写入 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 文档。
请注意,在存储短期平均值时,如果您想从此下采样数据计算较长时间段的平均值,则必须计算加权平均值。否则,您将计算平均值的平均值,这可能不等于根据原始数据计算的平均值。
这是因为,每个下采样平均值可能具有不同数量的数据点。
因此,在计算固定间隔的平均值时,存储在该间隔内接收到的数据点数。这样你就可以计算出加权平均值了。