【发布时间】:2015-07-20 11:10:40
【问题描述】:
我是 TSDB 的新手,我有很多温度传感器以每秒一个点的速度存储在我的数据库中。每个传感器使用一个唯一指标更好,还是仅使用一个指标(例如温度)具有不同的标签,具体取决于传感器??
我在网上搜索了最佳做法是什么,但没有找到好的答案...
谢谢! :-)
编辑: 我将从 2500 个来源获得 8 种类型的测量值(温度、设定点、能量、功率……)
【问题讨论】:
标签: time-series influxdb opentsdb
我是 TSDB 的新手,我有很多温度传感器以每秒一个点的速度存储在我的数据库中。每个传感器使用一个唯一指标更好,还是仅使用一个指标(例如温度)具有不同的标签,具体取决于传感器??
我在网上搜索了最佳做法是什么,但没有找到好的答案...
谢谢! :-)
编辑: 我将从 2500 个来源获得 8 种类型的测量值(温度、设定点、能量、功率……)
【问题讨论】:
标签: time-series influxdb opentsdb
如果您将数据存储在 InfluxDB 中,我建议将所有指标存储在单个测量中并使用标签来区分来源,而不是为每个来源创建测量。原因是您可以在度量中使用标签轻松合并或分解指标,但在最新的 InfluxDB 中无法跨度量合并或连接。
最终决定取决于您对 TSDB 的选择以及您最关心运行的查询。
【讨论】:
SELECT * FROM metrics WHERE sensor_type='foo' 和SELECT * FROM metrics WHERE temperature > 100。如果您将每个传感器拆分为单独的测量,第一个很容易,但第二个是不可能的。请注意,第二个查询将非常昂贵,因为您正在过滤非索引字段值,但由于它不常见,应该没问题。将查询限制在特定时间范围内将减轻性能损失。
出于比较目的,在Axibase Time-Series Database 中,您可以将温度存储为指标,将传感器 ID 存储为实体名称。 ATSD 模式有一个实体的概念,它是正在为其收集数据的系统的名称。优点是存储更紧凑,并且能够为实体本身定义标签,例如传感器位置、传感器类型等。通过这种方式,您不仅可以按传感器 ID 还可以按传感器标签过滤和分组结果。
举个例子,在这篇博客文章中,0601911 代表实体 ID,即 EPA 站 ID。该站收集多个环境指标,同时在数据库中使用多个标签进行描述:http://axibase.com/environmental-monitoring-using-big-data/。
最重要的是,您不必为了存储有关传感器、服务器等的扩展信息而构建第二个数据库(通常是关系数据库)以进行高级报告。
更新 1:示例网络命令:
series e:sensor-001 d:2015-08-03T00:00:00Z m:temperature=42.2 m:humidity=72 m:precipitation=44.3
描述 sensor-001 的标签(例如位置、类型等)单独存储,从而最大限度地减少存储空间并加快查询速度。如果您正在收集能量/功率指标,您通常必须为系列指定属性,例如状态,因为数据可能不干净/经过验证。您可以为此使用系列标签。
series e:sensor-001 d:2015-08-03T00:00:00Z m:temperature=42.2 ... t:status=Provisional
【讨论】:
您应该为每个传感器使用一个指标。您可能不需要汇总来自不同温度传感器的值,但您需要汇总给定传感器的值(例如一分钟内的平均值)。
指标对应于来自同一来源的数据,或者至少是您可能汇总的数据。您可以根据需要创建几乎任意数量的指标(例如,在 OpenTSDB 中最多为 16 million metrics)。
标签区分这些数据。例如,如果数据突然发生很大变化,您可以对数据进行不同的标记,以便在需要时仅检索相关数据,而不会丢失其余数据。尽管对于每秒获取数据的温度传感器,最好的方法可能是过滤并仅在值更改时存储数据...
总结了最佳实践here
【讨论】: