0

我有大约 1500 台设备,它们以随机频率将数据推送到我的 InfluxDB v1.8+ 实例。我正在寻找最有效的方法,至少在性能方面,来收集每个 device_id(标签)的最后一点。

为简洁起见,此测量中的数据非常简单:

time, device_id (tag), usage (in bytes)
1593514228321002500, 'A12345', 32212254720

我保证每个点都填充了“使用”字段。这不是问题。因此,对于每个标签(device_id),拥有最新的时间戳实际上就是我想要的。

我当前的解决方案远非可扩展且效率不高,它首先列出所有 device_id:

$ show tag values on "my_database" with key = "device_id"

...然后遍历每个以获得最后一点:

$ select time, device_id, usage
    from @measurement
    where device_id = '@device_id'
    order by time desc
    limit 1

我的问题:如何最有效地获取所有 device_ids (tag)的最后点/记录,而不在 device_id 上提供 WHERE 子句?最好在一个命令中,这样我就可以删除 foreach 迭代。

其他风格也有同样的问题,例如在 MySQL 中。这个问题是特定于 InfluxDB 的。

4

1 回答 1

0

你可以试试这个。用于last()任何一个字段。

select last(usage), * from @measurement group by device_id;
于 2020-07-02T18:05:41.867 回答