我正在将温度传感器的值存储在influxDB
数据库中,并且正在寻找特殊的请求。
当温度以某个阈值变化时,每个传感器都会发送感测到的数据,这意味着所有传感器都不会同时发送数据。
因此,传感器1,即S1
将在时刻S1_v1
发送值1(t1
)。然后S2
将在S2_v2
发送t2
,S3
将在S3_v3
发送t3
,依此类推。
我想获取给定时间t
上所有传感器的值,以便在t2
处,S1
的返回值将为S1_v1
(最后存储的值)。一个)。
请问如何使用influxDB做到这一点?我希望我的要求足够明确。 非常感谢。
答案 0 :(得分:1)
您可以将所有传感器数据存储到一个measurement
中。
然后有一个tag
呼叫名称来存储传感器的名称。
示例:
> select * from sensors;
name: sensors
time name value
---- ---- -----
1547100000000000000 s1 500
1547200000000000000 s2 600
1547300000000000000 s3 700
1548000000000000000 s1 900
1548000000000000000 s2 800
1548000000000000000 s3 999
要在给定的时间范围t
中检索所有传感器的最新存储值,可以执行以下操作;
SELECT * FROM sensors
WHERE time >= 1547000000000000000 and time <= 1547300000000000000
GROUP BY "name" order by desc limit 1;
输出:
name: sensors
tags: name=s3
time value
---- -----
1547300000000000000 700
name: sensors
tags: name=s2
time value
---- -----
1547200000000000000 600
name: sensors
tags: name=s1
time value
---- -----
1547100000000000000 500
上面的查询实际上是根据您的时间过滤器将所有传感器的数据分组到各个存储区中。然后ORDER BY DESC
用于将它们按降序排序,以便第一行始终是时间最长的点。 Limit 1
只是要求查询引擎返回前1行。