我需要使用动态分组查询包含IoT数据的InfluxDB v2系列,但我一直在努力寻找合适的方法来实现这一目标。
我有1000多个IoT设备传输常规指标。我可以使用以下方法检索一台设备:
from(bucket: "dev")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r["_measurement"] == "metrics")
|> filter(fn: (r) => r["_field"] == "watts")
|> filter(fn: (r) => r["device_uuid"] == "d286e8cd-61b8-493e-ae6f-4957fa85b4e9")
和3台设备
|> filter(fn: (r) => r["device_uuid"] == "…-61b8-…" or r["device_uuid"] == "…-7ea6-…" or r["device_uuid"] == "…-56a6-…")
但是,如果我需要约500台设备,则查询时间太长,无法执行。
设备的分组是动态的,因此我无法在测量中使用标签。
到目前为止,我可以看到两种可能的解决方案,但是两者似乎都错了……
1:将查询字符串分成多个段
找到可靠的查询长度,将device_uuid列表分成多个块,运行多个查询,合并结果。
2:尝试在Influx中创建非时间序列系列,并将其用作联接表。
如果我只使用MySQL,我可以做类似的事情
SELECT value FROM metrics
LEFT JOIN device_groups
ON device_groups.device_uuid = metrics.device_uuid
WHERE device_groups.group_id = 101
这是如果,我可以创建类似的系列。
在查询数据时,是否还有其他人遇到这种情况?我环顾四周,但找不到任何有关执行该操作的资源,可能是因为这两种解决方案似乎都与时间序列数据库应该使用的相反。