2015-07-20 41 views
3

我是TSDB的新成员,我有许多温度传感器以每秒一个点的方式存储在数据库中。每个传感器使用一个独特的度量标准,还是只使用一个度量标准(例如温度),使用不同的标签取决于传感器?时间序列数据库 - 度量与标记

我搜索互联网上什么是最好的做法,但我没有找到一个很好的答案...

谢谢! :-)

编辑: 我将有8种类型的测量(温度,设定点,能源,电力,...)从2500个来源

回答

5

如果要存储在InfluxDB数据,我建议将所有度量标准存储在一次测量中,并使用标记来区分来源,而不是根据来源创建度量。原因在于您可以使用测量中的标签来简单合并或分解度量标准,但最新的InfluxDB无法合并或跨测量。

最终决定权在于您选择的TSDB和您最关心的运行问题。

+0

谢谢您的回复!我添加了更多关于我需要的细节。最常用的查询将是_get一个类型的一个传感器的所有值_有时(很少)_get所有温度> x_例如 –

+1

您希望像这样的查询,这强烈暗示一切都进入一个测量: 'SELECT * FROM metrics WHERE sensor_type ='foo''还有'SELECT * FROM metrics WHERE temperature> 100'。 如果您将每个传感器分成单独的测量,第一个很容易,但第二个是不可能的。请注意,第二个查询将非常昂贵,因为您正在过滤非索引字段值,但由于它很少发生,所以应该没问题。将查询限制到特定的时间范围将减轻性能影响。 – beckettsean

+0

好!非常感谢你的帮助! –

0

你应该用一个每个传感器度量。您可能不需要汇总来自不同温度传感器的值,但您需要汇总给定传感器的值(例如,一分钟内的平均值)。

度量标准对应于来自同一来源的数据,或者至少可能会汇总的数据。您可以根据需要创建几乎相同的指标(例如,在OpenTSDB中最多可以创建16 million metrics)。

标签区分这些数据段。例如,如果突然改变数据,您可以以不同的方式标记数据,以便只在需要时检索相关数据,而不会丢失其余数据。虽然温度传感器获得的数据每一秒,最好很可能是过滤,只存储数据当值改变...

最佳实践归纳起来here

3

出于比较的目的,在Axibase Time-Series Database中,您可以将温度作为度量标准和传感器ID存储为实体名称。 ATSD模式具有实体的概念,该实体是收集数据的系统的名称。其优点是更紧凑的存储空间以及为实体本身定义标签的能力,例如传感器位置,传感器类型等。这样,您可以对结果进行过滤和分组,不仅可以通过传感器ID进行分组,也可以通过传感器标签进行分组。

举一个例子,在这篇博客文章中,0601911代表实体ID--这是EPA台站ID。该站收集多个环境指标,同时在数据库中使用多个标签进行描述:http://axibase.com/environmental-monitoring-using-big-data/

最重要的是,您不必为第二个数据库(通常是关系数据库)建立一个数据库,只是为了存储有关传感器,服务器等高级报告的扩展信息。

UPDATE 1:示例的网络命令:描述传感器001,如位置,类型等

series e:sensor-001 d:2015-08-03T00:00:00Z m:temperature=42.2 m:humidity=72 m:precipitation=44.3 

标签分开存储,最小化存储空间和加快查询。如果您正在收集能源/电力指标,则通常必须指定诸如“状态”之类的系列属性,因为数据可能无法清除/验证。您可以为此使用系列标签。

series e:sensor-001 d:2015-08-03T00:00:00Z m:temperature=42.2 ... t:status=Provisional