InfluxDb 中的系列和存储桶是啥

Posted

技术标签:

【中文标题】InfluxDb 中的系列和存储桶是啥【英文标题】:What are series and bucket in InfluxDbInfluxDb 中的系列和存储桶是什么 【发布时间】:2020-01-31 01:39:55 【问题描述】:

在尝试理解 InfluxDb 的不同概念时,我遇到了this 文档,其中有一个与 SQL 数据库的术语比较。

InfluxDB 测量类似于 SQL 数据库表。 InfluxDB 标签就像 SQL 数据库中的索引列。 InfluxDB 字段是 就像 SQL 数据库中未编制索引的列一样。 InfluxDB 点类似 到 SQL 行。

但是我遇到了其他几个术语,我无法清楚地理解这些术语,并想知道是否有与之对应的 SQL。

系列

据我了解的文档

series 是共享保留策略的数据集合, 测量和标签集。

这是否意味着系列是数据库表中数据的子集?还是类似于数据库视图? 我看不到任何解释存储桶的文档。我猜这是 2.0 版本中的一个新概念

有人可以澄清这两个概念吗?

【问题讨论】:

据我了解,测量是指存储的概念,而序列是存储在所述测量中的实际数据。 【参考方案1】:

您链接到的 InfluxDb 文档有一个系列是什么的示例,即使他们没有这样标记它。在 InfluxDb 中,您可以将测量和标签的每个组合视为在它自己的“表”中。文档是这样拆分的。

SQL 中的这张表:

+---------+---------+---------------------+--------------+
| park_id | planet  | time                | #_foodships  |
+---------+---------+---------------------+--------------+
|       1 | Earth   | 1429185600000000000 |            0 |
|       2 | Saturn  | 1429185601000000000 |            3 |
+---------+---------+---------------------+--------------+

在 InfluxDb 中成为这两个系列:

name: foodships
tags: park_id=1, planet=Earth

----

name: foodships
tags: park_id=2, planet=Saturn

...etc...

这会在您查询数据时产生影响,这也是为什么the recommendation 是您没有具有高基数的tag 值的原因。例如,如果您有一个标签 temperature(特别是如果它精确到多个小数点),InfluxDb 将为 tag 值的每个潜在组合创建一个“表”。

Bucket 更容易理解。这只是一个combination of a database with a retention policy。在以前版本的 InfluxDb 中,这些是单独的概念,现在已经组合在一起了。

【讨论】:

如何在云端的存储桶中创建数据库? 基于文档 (docs.influxdata.com/influxdb/v1.8/concepts/glossary/#series) 系列“由它们共享的度量、标签集和字段键定义”。然而,字段被索引,只有标签没有。那么,不应该是你可以有很多系列,但不是根据标签而是根据字段来区分的吗? 你把它倒过来了@nocibambi - 标签是索引的,而不是字段。请参阅tag glossary item。在上面的示例中,park_idplanet 是标签,将被索引以提高性能。该字段为#_foodships,表示可能具有高基数的测量值。 是的,你是对的,我的错。谢谢指正!【参考方案2】:

根据InfluxDB glossary:

存储桶是时间序列数据存储在 InfluxDB 2.0 中的命名位置。在 InfluxDB 1.8+ 中,每个组合 数据库和保留策略(database/retention-policy)表示 一个桶。使用包含的InfluxDB 2.0 API compatibility endpoints 使用 InfluxDB 1.8+ 与存储桶交互。

系列

由共享度量、标签定义的数据逻辑分组 设置和字段键。

【讨论】:

【参考方案3】:

我将我的理解总结如下:

bucket 被命名为具有保留策略的存储时间序列数据的位置。 系列是由共享度量、标签和字段定义的数据逻辑分组。 测量类似于 SQL 数据库表。 标签类似于 SQL 数据库中的索引列。 字段类似于 SQL 数据库中未编制索引的列。 类似于 SQL 行。

例如一个SQL表workdone

Email Status time Completed
lorr@influxdb.com start 1636775801000000000 76
lorr@influxdb.com finish 1636775868000000000 120
marv@influxdb.com start 1636775801000000000 0
marv@influxdb.com finish 1636775868000000000 20
cliff@influxdb.com start 1636775801000000000 54
cliff@influxdb.com finish 1636775868000000000 56

EmailStatus 列已编入索引。

因此:

测量:workdone 标签:Email, Status 字段:Completed 系列(基数 = 3 x 2 = 6):
    测量:workdone;标签:Email:lorr@influxdb.com,Status:start;字段:Completed 测量:workdone;标签:Email:lorr@influxdb.com,Status:finish;字段:Completed 测量:workdone;标签:Email:marv@influxdb.com,Status:start;字段:Completed 测量:workdone;标签:Email:marv@influxdb.com,Status:finish;字段:Completed 测量:workdone;标签:Email:cliff@influxdb.com,Status:start;字段:Completed 测量:workdone;标签:Email:cliff@influxdb.com,Status:finish;字段:Completed

跨多个存储桶拆分逻辑系列可能不会提高性能,但可能会使通量查询复杂化,因为需要包含多个存储桶。

【讨论】:

以上是关于InfluxDb 中的系列和存储桶是啥的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 influxdb docker 映像中的“Influx”命令访问或创建数据库

Influx Sql系列教程零:安装及influx-cli使用姿势介绍

Influx Sql系列教程三:measurement 表

Influx Sql系列教程六:insert 修改数据

Influxdb安装启动influxdb控制台常用命令Influx命令使用Influx-sql使用举例Influxdb的数据格式Influxdb客户端工具

Influx Sql系列教程四:series/point/tag/field