influxdb - 度量名称和标签之间的性能差异
问题描述
我有一个物联网应用程序,其中所有数据都来自具有标准有效负载的不同传感器,其中所有变化的是变量 ID,它是一个四位十六进制字符串。
我目前使用 data.varID 作为我的测量名称。varID 也是一个标签,即使是多余的。但这有点不方便,因为有时我希望能够轻松地跨多个 varID 查询数据。
我试图找到这个问题的答案,但找不到:有什么区别
- 有很多 data.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")
但此时,我会将所有内容都放在一次测量中,并以“设备”、“变量”(以及其他一些东西)作为标签。
那么,在切换到对整个数据库进行单一测量之前,我需要考虑什么?
解决方案
由于没有人能够回答这个问题,我会尽可能地回答它。
一个大型测量系列与较小的测量系列之间似乎没有任何性能差异。
但是有一个关键的区别,在我们的例子中,最终迫使我们进行多次测量:
在我们的例子中,虽然不同测量之间的模式共享相同的字段,但一些测量可以有额外的字段。
问题是字段似乎与测量本身相关联,所以如果我们添加
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
字段的事实意味着当您查询任何变量时,您将同时获得foo
和bar
(如果它们不存在,则设置为 None):
{'foo': None, 'bar': None}
这意味着,如果您有 100 个变量,并且每个变量都添加了 5 个自定义字段,那么每次查询时您最终都会得到 500 个字段。虽然这不是存储问题,但字段与度量相关联的事实意味着您将在数据库返回的 JSON 对象上呈指数增长,即使大多数字段设置为 None。
data
如果架构在所有测量中都相同,那么使用单个测量(具有不同标签)与使用单个测量(具有不同标签)之间似乎没有区别。多次data.<var>
测量。
推荐阅读
- java - Java FFmpeg 没有输出
- c# - Visual Studio Asp WebForms 名称不存在
- c - 为什么我的 C 程序不打印 if 语句的输出?
- css - flexbox 列中的图像无法在 Chrome 中正确呈现
- c# - 如何将字符串从一个项目的应用程序域传递到另一个项目的应用程序域
- angular - ionic 4 在键盘上方显示页脚
- regex - 用记事本++中的一个替换最后2个字符
- php - Wordpress single.php 另一个 get_post 函数破坏了第一个函数
- java - Apache Crunch 无法写入输出
- json - 检查特定 JSON 键的重复值