检索最后一个值时出现性能问题



我有一个测量系统,可以跟踪一堆机器的传感器读数。

每台机器大约有50种不同的读数,最多有1000台机器。我们每30秒读一次。

我存储读数的方式是在一个单独的测量中,它有两个标签,machine_id和analysis_id以及一个值。

我的一个用例是检索机器列表中每次读取的当前值。

当这个数据库达到1亿条记录或类似的记录时,这些数字意味着不到1天,我就无法再通过查询检索最后的值,因为这需要很长时间。

我尝试了以下两种选择:

SELECT *
FROM analysisvalue
WHERE entity_id = '1' or entity_id = '2'
GROUP BY analysis_id, entity_id
ORDER BY time DESC
LIMIT 1

和:

SELECT last(*) AS value,
FROM analysisvalue
WHERE entity_id = '1' or entity_id = '2'
GROUP BY analysis_id, entity_id

这两者都需要相当长的时间才能完成。在1亿美元的时候,它大约是1秒的数量级。

检索最新值的用例是一个非常频繁的用例。我需要能够几乎立即获得机器的"当前"状态。我可以从应用程序逻辑的角度来解决这个问题,在一个单独的地方跟踪最新的值,但我想知道我能单独使用InfluxDB做什么。

我遇到了类似的情况,我通过创建一个连续查询来解决它。

https://docs.influxdata.com/influxdb/v0.8/api/continuous_queries/

最新更新