【问题标题】:Performance issues when retrieving last value检索最后一个值时的性能问题
【发布时间】:2017-02-08 21:02:26
【问题描述】:

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

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

我存储读数的方式是一次测量,它有 2 个标签,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 可以做什么。

【问题讨论】:

  • 你使用的是什么版本的 InfluxDB?
  • 我是最新的,1.2。
  • 你能在 InfluxDB 存储库上为此打开一个issue

标签: influxdb


【解决方案1】:

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

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

【讨论】:

  • 我一直在考虑如何为此使用连续查询,但我想不出一个好的方法。你能详细说明你是怎么做到的吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-06
  • 2017-01-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多