首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >InfluxDB :单测量还是多测量

InfluxDB :单测量还是多测量
EN

Stack Overflow用户
提问于 2017-07-28 08:28:04
回答 4查看 13K关注 0票数 31

我是influxDB的初学者,在阅读了图式设计文档之后,还有一个问题。

如何决定是使用多个字段的一个度量还是多个字段的多个测量?

我有多个物联网设备,每分钟发送数据(温度、湿度、压力)。所有这些数据都有完全相同的时间戳。

所以我想知道我是否更愿意像这样创建一个度量:

代码语言:javascript
复制
    timestamp,iotid,temperature,humidity,pressure
-------------------------------------------------
    1501230195,iot1,70,         45,      850

还是三个测量值(每个值一个),标记相同,但其中只有一个字段?

代码语言:javascript
复制
timestamp,iotid,temperature
----------------------------
    1501230195,iot1,70

timestamp,iotid,humidity
-------------------------
    1501230195,iot1,45

timestamp,iotid,pressure
-------------------------
    1501230195,iot1,850

就查询而言,我只能检索一个值,但同时也可以检索3个值。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2018-08-22 12:58:59

这是一个老问题,但这可能与任何从事TSDB工作的人有关。

当我第一次开始的时候,我的观点是,每一个数据点都会进入一个单一的测量范围。假设我会在稍后的日期将所需的数据合并到SQL语句中。但是,任何使用过TSDB的人都知道,由于在实现TSDB时所使用的设计选择,在检索数据方面有一些严重的限制。

随着我在项目中的进展,下面是我开发的经验法则:

一个度量应该包含它所需要的所有维度,以使其有意义,但没有更多。

例如:想象一个气体流量计,它发出3个信号:

  • 体积流量
  • 温度
  • 总流量

在这种情况下,体积流量和温度应该是一个单一测量的两个领域,总流量应该是它自己的测量。

(如果读者不喜欢这个例子,可以考虑一种家用电表,它输出安培、伏特、千瓦和功率因数)。

为什么在不同的系列中存储体积和温度会很糟糕呢?

  1. 时机:如果您将这两个度量存储在不同的系列中,它们将具有不同的索引值(时间戳)。除非您注意确保它们显式地指定了时间戳,否则您可能会对它们进行轻微的抽样。这很可能是一件坏事(tm),因为你可能在你的数据中引入了一个系统性的测量偏差。即使这不是一件坏事,如果您以后想要重用这些数据(例如,将其转储到csv文件中),这将是非常烦人的。
  2. 实用工具:如果您想要推断体积流量,您必须得到constant * temp * volume才能得到一个正确的值。使用两个独立的度量来实现这一点就成了一场噩梦,因为例如,influxdb甚至不支持操作。但是,即使是这样,您也必须确保其中一个字段的缺失值不会被错误地处理,分组和聚合操作也是正确的。

为什么把这三者都存储在一个度量中会有什么不好呢?

您很可能有一个用例,在这个用例中,您希望随时审计所有三个值,但是情况可能不是这样,而且您不关心以与您想要测量流量本身相同的频率来测量总体积。

将所有字段放在一个度量中将迫使您在特定字段中放置空值,或者始终记录几乎不发生变化的变量。不管是哪种方式,都是没有效率的。

重要的洞见是,多维实体需要在同一时间内的所有维度,才有意义。

票数 29
EN

Stack Overflow用户

发布于 2017-08-07 11:05:12

没有正确或错误的模式设计,但是使用一个度量,一个字段值是更合适的方法。

为什么?

将多个字段值存储到measurement中是一个非常关系的数据库问题。也就是说,measurement不应该被看作是一个database table,因为它是一个非常不同的东西。

应该为描述一种数据类型(如温度或CPU使用情况)显式保留度量。

如果我们用one field valuemeasurement来设计我们的模式,那么我们就可以用真实的英语来描述数据;

在一定的point时间内,温度为measureddata value=30。注意到这里使用的术语pointdatameasurement

然而,如果将多个field values放入特定的measurement中,则很难用真实的英语表示data

influxdb是一个时间序列数据库,因此显然我们应该以time-series的方式来实现它。

此外,一些时间序列数据实际上被测量到微秒的精度水平。在如此精细的粒度定时中,即使对于milliseconds,一组数据也不太可能共享相同的时间。因此,将其设计为一个包含数据点序列的度量总是更好的选择。

票数 17
EN

Stack Overflow用户

发布于 2017-08-02 03:28:54

这可能取决于您的数据,尝试两者并查看存储需求。例如,如果湿度变化不大,那么分离它是有意义的。但是,如果某些变量在相同的时间间隔内发生变化,那么将它们组合起来是有意义的。它还可能取决于您的查询模式。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45368535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档