InfluxDB语法差异

InfluxDB syntactic difference

这两种形式有区别吗?

myMetric value1=1,value2=2

还有这个

myMetric.value1 v=1
myMetric.value2 v=2

两者存储相同的数据(两个点)。显然,它们可以通过不同的方式访问,但我的意思是在存储、性能等方面有什么不同吗?根据 this talk,第一个被转换为第二个,至少在语义上是这样。

根据流入线协议的流入文档: <measurement>[,<tag_key>=<tag_value>[,<tag_key>=<tag_value>]] <field_key>=<field_value>[,<field_key>=<field_value>] [<timestamp>] 您的第一个表单将一条记录插入到没有标签的测量 myMetric 中,两个字段 (value1value2) 的值分别为 12。由于数据中未提供时间戳,因此服务器时间戳将用于数据点。

在第二种情况下,您正在创建两个单独的测量:myMetric.value1myMetric.value2 每个都有一个名为 v 的字段,其值分别为 12 .考虑到默认的纳秒精度,它们的时间戳也可能不同。

所以,这两种情况并不等同。

使用 influx cli 工具,这些情况如下所示:

> INSERT myMetric value1=1,value2=2
> show measurements
name: measurements
name
----
myMetric
> show field keys from myMetric
name: myMetric
fieldKey fieldType
-------- ---------
value1   float
value2   float
> select * from myMetric
name: myMetric
time                value1 value2
----                ------ ------
1526032578114702408 1      2

对于第二种情况:

> INSERT myMetric.value1 v=1
> INSERT myMetric.value2 v=2
> show measurements
name: measurements
name
----
myMetric.value1
myMetric.value2
> select * from "myMetric.value1"
name: myMetric.value1
time                v
----                -
1526032859752277164 1
> select * from "myMetric.value2"
name: myMetric.value2
time                v
----                -
1526032864711858673 2

正如您在案例 1 中看到的,您有 1 个插入操作插入到一个测量中,用于一个数据点,其中包含两个字段。在情况 2 中,有两个插入操作到两个不同的测量值中,每个测量值都有一个字段。

因此,如果在您的用例中 value1 和 value2 通常一起插入,我希望第一个变体的性能更高。情况 2 将需要对相同数据进行 2 次插入。存储使用量可能大致相同。

如果 value1 和 value2 是独立插入的并且在不同的时间插入,则情况 2 在存储方面可能更有效一些,因为它不必为 (null,2)(1,null) 等数据点存储空值.

在单独的测量中也有数据字段还有另一个缺点: 查询如:

> select value1, value2,value2-value1 from myMetric
name: myMetric
time                value1 value2 value2_value1
----                ------ ------ -------------
1526032578114702408 1      2      1

在第二种情况下是不可能的。