文档文档

InfluxDB 关键概念

此页面记录了早期版本的 InfluxDB OSS。InfluxDB OSS v2 是最新的稳定版本。请参阅等效的 InfluxDB v2 文档: InfluxDB 关键概念

在深入了解 InfluxDB 之前,最好先熟悉数据库的一些关键概念。本文档介绍了 InfluxDB 的关键概念和元素。为了介绍关键概念,我们将介绍以下元素如何在 InfluxDB 中协同工作

示例数据

下一节引用下面打印出的数据。数据是虚构的,但代表了 InfluxDB 中可信的设置。它们显示了两位科学家(langstrothperpetua)在两个地点(地点 1 和地点 2)在 2015 年 8 月 18 日午夜至 2015 年 8 月 18 日上午 6:12 期间统计的蝴蝶和蜜蜂数量。假设数据位于名为 my_database 的数据库中,并受 autogen 保留策略的约束(稍后会详细介绍数据库和保留策略)。

提示: 将鼠标悬停在链接上以获取工具提示,从而熟悉 InfluxDB 术语和布局。

名称: census

时间蝴蝶蜜蜂地点科学家
2015-08-18T00:00:00Z12231langstroth
2015-08-18T00:00:00Z1301perpetua
2015-08-18T00:06:00Z11281langstroth
2015-08-18T00:06:00Z3281perpetua
2015-08-18T05:54:00Z2112langstroth
2015-08-18T06:00:00Z1102langstroth
2015-08-18T06:06:00Z8232perpetua
2015-08-18T06:12:00Z7222perpetua

讨论

既然您已经看到了一些 InfluxDB 中的示例数据,本节将介绍所有这些数据的含义。

InfluxDB 是一个时间序列数据库,因此从我们所做一切的根源开始是有意义的:时间。在上面的数据中,有一列名为 time - InfluxDB 中的所有数据都有该列。time 存储时间戳,并且 时间戳RFC3339 UTC 格式显示与特定数据关联的日期和时间。

接下来的两列,名为 butterflieshoneybees,是字段。字段由字段键和字段值组成。字段键butterflieshoneybees)是字符串;字段键 butterflies 告诉我们字段值 12-7 指的是蝴蝶,字段键 honeybees 告诉我们字段值 23-22 指的是蜜蜂。

字段值 是您的数据;它们可以是字符串、浮点数、整数或布尔值,并且由于 InfluxDB 是一个时间序列数据库,因此字段值始终与时间戳相关联。示例数据中的字段值为

12   23
1    30
11   28
3    28
2    11
1    10
8    23
7    22

在上面的数据中,字段键和字段值对的集合构成了一个 字段集。以下是示例数据中的所有八个字段集

  • butterflies = 12 honeybees = 23
  • butterflies = 1 honeybees = 30
  • butterflies = 11 honeybees = 28
  • butterflies = 3 honeybees = 28
  • butterflies = 2 honeybees = 11
  • butterflies = 1 honeybees = 10
  • butterflies = 8 honeybees = 23
  • butterflies = 7 honeybees = 22

字段是 InfluxDB 数据结构中必需的部分 - InfluxDB 中不能没有字段。同样重要的是要注意,字段没有索引。使用字段值作为过滤器的查询必须扫描与查询中其他条件匹配的所有值。因此,相对于标签查询(稍后会详细介绍标签),这些查询的性能不高。通常,字段不应包含常用查询的元数据。

示例数据中的最后两列,名为 locationscientist,是标签。标签由标签键和标签值组成。标签键标签值 都存储为字符串并记录元数据。示例数据中的标签键是 locationscientist。标签键 location 有两个标签值:12。标签键 scientist 也有两个标签值:langstrothperpetua

在上面的数据中,标签集 是所有标签键值对的不同组合。示例数据中的四个标签集是

  • location = 1, scientist = langstroth
  • location = 2, scientist = langstroth
  • location = 1, scientist = perpetua
  • location = 2, scientist = perpetua

标签是可选的。您的数据结构中不需要有标签,但通常最好使用它们,因为与字段不同,标签已索引。这意味着对标签的查询速度更快,并且标签非常适合存储常用查询的元数据。

避免使用以下保留键

  • _field
  • _measurement
  • 时间

如果保留键作为标签或字段键包含在内,则关联的点将被丢弃。

为什么索引很重要:模式案例研究

假设您注意到您的大部分查询都集中在字段键 honeybeesbutterflies 的值上

SELECT * FROM "census" WHERE "butterflies" = 1
SELECT * FROM "census" WHERE "honeybees" = 23

由于字段未建立索引,InfluxDB 会在提供响应之前扫描第一个查询中 butterflies 的每个值和第二个查询中 honeybees 的每个值。这种行为可能会影响查询响应时间 - 尤其是在更大规模上。为了优化您的查询,将您的模式重新排列,使字段(butterflieshoneybees)成为标签,而标签(locationscientist)成为字段可能是有益的

名称: census

时间地点科学家蝴蝶蜜蜂
2015-08-18T00:00:00Z1langstroth1223
2015-08-18T00:00:00Z1perpetua130
2015-08-18T00:06:00Z1langstroth1128
2015-08-18T00:06:00Z1perpetua328
2015-08-18T05:54:00Z2langstroth211
2015-08-18T06:00:00Z2langstroth110
2015-08-18T06:06:00Z2perpetua823
2015-08-18T06:12:00Z2perpetua722

既然 butterflieshoneybees 是标签,InfluxDB 在执行上述查询时不必扫描它们的每个值 - 这意味着您的查询速度甚至更快。

测量 充当标签、字段和 time 列的容器,测量名称是对存储在关联字段中的数据的描述。测量名称是字符串,对于任何 SQL 用户来说,测量在概念上类似于表。示例数据中唯一的测量是 census。名称 census 告诉我们字段值记录的是 butterflieshoneybees 的数量,而不是它们的大小、方向或某种幸福指数。

单个测量可以属于不同的保留策略。保留策略 描述了 InfluxDB 保留数据的时间 (DURATION) 以及存储在集群中的此数据的副本数量 (REPLICATION)。如果您有兴趣阅读有关保留策略的更多信息,请查看数据库管理

复制因子在单节点实例中没有作用。

在示例数据中,census 测量中的所有内容都属于 autogen 保留策略。InfluxDB 自动创建该保留策略;它具有无限的持续时间和设置为 1 的复制因子。

现在您已经熟悉了测量、标签集和保留策略,让我们讨论序列。在 InfluxDB 中,序列 是共享测量、标签集和字段键的点集合。上面的数据由八个序列组成

序列号测量标签集字段键
序列 1censuslocation = 1,scientist = langstroth蝴蝶
序列 2censuslocation = 2,scientist = langstroth蝴蝶
序列 3censuslocation = 1,scientist = perpetua蝴蝶
序列 4censuslocation = 2,scientist = perpetua蝴蝶
序列 5censuslocation = 1,scientist = langstroth蜜蜂
序列 6censuslocation = 2,scientist = langstroth蜜蜂
序列 7censuslocation = 1,scientist = perpetua蜜蜂
序列 8censuslocation = 2,scientist = perpetua蜜蜂

在设计您的模式以及在 InfluxDB 中处理您的数据时,理解序列的概念至关重要。

表示具有四个组件的单个数据记录:测量、标签集、字段集和时间戳。点由其序列和时间戳唯一标识。

例如,这是一个单点

name: census
-----------------
time                    butterflies honeybees   location    scientist
2015-08-18T00:00:00Z    1           30          1           perpetua

此示例中的点是序列 3 和 7 的一部分,由测量 (census)、标签集 (location = 1, scientist = perpetua)、字段集 (butterflies = 1, honeybees = 30) 和时间戳 2015-08-18T00:00:00Z 定义。

我们刚刚介绍的所有内容都存储在一个数据库中 - 示例数据位于数据库 my_database 中。InfluxDB 数据库 类似于传统的关联数据库,充当用户、保留策略、连续查询以及当然还有您的时间序列数据的逻辑容器。有关这些主题的更多信息,请参阅身份验证和授权连续查询

数据库可以有多个用户、连续查询、保留策略和测量。InfluxDB 是一个无模式数据库,这意味着可以随时轻松添加新的测量、标签和字段。它旨在使处理时间序列数据变得非常棒。

您成功了!您已经介绍了 InfluxDB 中的基本概念和术语。如果您刚刚开始,我们建议您查看入门以及写入数据查询数据指南。愿我们的时间序列数据库为您提供良好的服务 🕔。


此页面对您有帮助吗?

感谢您的反馈!


Flux 的未来

Flux 即将进入维护模式。您可以继续像现在这样使用它,而无需对您的代码进行任何更改。

阅读更多

InfluxDB 3 开源现已进入公开 Alpha 阶段

InfluxDB 3 开源现在可用于 Alpha 测试,根据 MIT 或 Apache 2 许可获得许可。

我们正在发布两个产品作为 Alpha 版的一部分。

InfluxDB 3 Core 是我们新的开源产品。它是用于时间序列和事件数据的最新数据引擎。InfluxDB 3 Enterprise 是一个商业版本,它建立在 Core 的基础上,增加了历史查询功能、读取副本、高可用性、可扩展性和细粒度的安全性。

有关如何开始使用的更多信息,请查看