首页 > 解决方案 > 度量名称和标签之间的性能差异

问题描述

我有一个物联网应用程序,其中所有数据都来自具有标准有效负载的不同传感器,其中所有变化的是变量 ID,它是一个四位十六进制字符串。

我目前使用 data.varID 作为我的测量名称。varID 也是一个标签,即使是多余的。但这有点不方便,因为有时我希望能够轻松地跨多个 varID 查询数据。

我试图找到这个问题的答案,但找不到:有什么区别

或者

据我了解,就数据库中的时间序列数量而言,两者都是等效的,所以还有其他考虑因素吗?

我通常需要的查询类型很简单:

SELECT "value" FROM "db1"."autogen"."data.org1.global.5051" WHERE time > now() - 24h AND ("device"='d--0000-0000-0000-0acf' OR "device"='d--0000-0000-0000-0ace')

所以基本上在一段时间内跨设备获取给定变量的数据。但在某些情况下,我还希望一次获得多个变量,这就是为什么我想改为执行以下操作:

SELECT "value" FROM "db1"."autogen"."data.org1" WHERE time > now() - 24h AND ("device"='d--0000-0000-0000-0acf' OR "device"='d--0000-0000-0000-0ace') AND ("variable"="5051") AND ("variable"="5052")

但此时,我会将所有内容都放在一次测量中,并以“设备”、“变量”(以及其他一些东西)作为标签。

那么,在切换到对整个数据库进行单一测量之前,我需要考虑什么?

标签: influxdb

解决方案


由于没有人能够回答这个问题,我会尽可能地回答它。

一个大型测量系列与较小的测量系列之间似乎没有任何性能差异。

但是有一个关键的区别,在我们的例子中,最终迫使我们进行多次测量:

在我们的例子中,虽然不同测量之间的模式共享相同的字段,但一些测量可以有额外的字段。

问题是字段似乎与测量本身相关联,所以如果我们添加

 data,device=0bd8,var=5053 value=10 1574173550390000
 data,device=0bd8,var=5053 value=10 1574173550400000
 data,device=0bd8,var=5054 foo=12,value=10 1574173550390000
 data,device=0bd8,var=5055 bar=10,value=10 1574173550390000

var5054有一个foo字段并且5055有一个bar字段的事实意味着当您查询任何变量时,您将同时获得foobar(如果它们不存在,则设置为 None):

{'foo': None, 'bar': None}

这意味着,如果您有 100 个变量,并且每个变量都添加了 5 个自定义字段,那么每次查询时您最终都会得到 500 个字段。虽然这不是存储问题,但字段与度量相关联的事实意味着您将在数据库返回的 JSON 对象上呈指数增长,即使大多数字段设置为 None。

data如果架构在所有测量中都相同,那么使用单个测量(具有不同标签)与使用单个测量(具有不同标签)之间似乎没有区别。多次data.<var>测量。


推荐阅读