InfluxDB 关键概念
此页面记录了 InfluxDB OSS 的早期版本。 InfluxDB OSS v2 是最新的稳定版本。 请参阅等效的 InfluxDB v2 文档: InfluxDB 关键概念。
在深入了解 InfluxDB 之前,最好先熟悉数据库的一些关键概念。本文档介绍了 InfluxDB 的关键概念和元素。为了介绍关键概念,我们将介绍以下元素如何在 InfluxDB 中协同工作
示例数据
下一节引用了下面打印出的数据。这些数据是虚构的,但代表了 InfluxDB 中可信的设置。它们显示了两位科学家 (langstroth
和 perpetua
) 在两个地点(地点 1
和地点 2
)在 2015 年 8 月 18 日午夜至 2015 年 8 月 18 日上午 6:12 期间统计的蝴蝶和蜜蜂数量。假设数据位于名为 my_database
的数据库中,并受 autogen
保留策略的约束(更多关于数据库和保留策略的内容将在后面介绍)。
提示: 将鼠标悬停在链接上以获取工具提示,从而熟悉 InfluxDB 术语和布局。
名称: census
时间 | 蝴蝶 | 蜜蜂 | 地点 | 科学家 |
---|---|---|---|---|
2015-08-18T00:00:00Z | 12 | 23 | 1 | langstroth |
2015-08-18T00:00:00Z | 1 | 30 | 1 | perpetua |
2015-08-18T00:06:00Z | 11 | 28 | 1 | langstroth |
2015-08-18T00:06:00Z | 3 | 28 | 1 | perpetua |
2015-08-18T05:54:00Z | 2 | 11 | 2 | langstroth |
2015-08-18T06:00:00Z | 1 | 10 | 2 | langstroth |
2015-08-18T06:06:00Z | 8 | 23 | 2 | perpetua |
2015-08-18T06:12:00Z | 7 | 22 | 2 | perpetua |
讨论
现在您已经看到了一些 InfluxDB 中的示例数据,本节将介绍所有这些数据的含义。
InfluxDB 是一个时序数据库,因此从我们所做一切的根源开始是有意义的:时间。在上面的数据中,有一列名为 time
- InfluxDB 中的所有数据都有该列。 time
存储时间戳,时间戳 以 RFC3339 UTC 格式显示与特定数据关联的日期和时间。
接下来的两列,名为 butterflies
和 honeybees
,是字段。字段由字段键和字段值组成。 字段键 (butterflies
和 honeybees
) 是字符串;字段键 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 中就无法存储数据。同样重要的是要注意,字段未被索引。使用字段值作为过滤器的查询必须扫描与查询中其他条件匹配的所有值。因此,相对于对标签的查询(更多关于标签的内容见下文),这些查询的性能不高。通常,字段不应包含常用查询的元数据。
示例数据中的最后两列,名为 location
和 scientist
,是标签。标签由标签键和标签值组成。 标签键 和 标签值 都以字符串形式存储,并记录元数据。示例数据中的标签键是 location
和 scientist
。标签键 location
有两个标签值:1
和 2
。标签键 scientist
也有两个标签值:langstroth
和 perpetua
。
在上面的数据中,标签集 是所有标签键值对的不同组合。示例数据中的四个标签集是
location = 1
,scientist = langstroth
location = 2
,scientist = langstroth
location = 1
,scientist = perpetua
location = 2
,scientist = perpetua
标签是可选的。您的数据结构中不需要有标签,但通常最好使用它们,因为与字段不同,标签是索引的。这意味着对标签的查询速度更快,并且标签非常适合存储常用查询的元数据。
避免使用以下保留键
_field
_measurement
时间
如果保留键作为标签或字段键包含在内,则关联的点将被丢弃。
为什么索引很重要:Schema 案例研究
假设您注意到您的大多数查询都集中在字段键 honeybees
和 butterflies
的值上
SELECT * FROM "census" WHERE "butterflies" = 1
SELECT * FROM "census" WHERE "honeybees" = 23
由于字段未被索引,InfluxDB 在提供响应之前,会扫描第一个查询中 butterflies
的每个值和第二个查询中 honeybees
的每个值。这种行为会影响查询响应时间 - 尤其是在更大规模的情况下。为了优化您的查询,将您的 Schema 重新排列为字段(butterflies
和 honeybees
)成为标签,而标签(location
和 scientist
)成为字段可能是有益的
名称: census
时间 | 地点 | 科学家 | 蝴蝶 | 蜜蜂 |
---|---|---|---|---|
2015-08-18T00:00:00Z | 1 | langstroth | 12 | 23 |
2015-08-18T00:00:00Z | 1 | perpetua | 1 | 30 |
2015-08-18T00:06:00Z | 1 | langstroth | 11 | 28 |
2015-08-18T00:06:00Z | 1 | perpetua | 3 | 28 |
2015-08-18T05:54:00Z | 2 | langstroth | 2 | 11 |
2015-08-18T06:00:00Z | 2 | langstroth | 1 | 10 |
2015-08-18T06:06:00Z | 2 | perpetua | 8 | 23 |
2015-08-18T06:12:00Z | 2 | perpetua | 7 | 22 |
现在 butterflies
和 honeybees
是标签,InfluxDB 在执行上述查询时不必扫描它们的每个值 - 这意味着您的查询速度更快。
指标 充当标签、字段和 time
列的容器,指标名称是对存储在关联字段中的数据的描述。指标名称是字符串,对于任何 SQL 用户来说,指标在概念上类似于表。示例数据中唯一的指标是 census
。名称 census
告诉我们字段值记录的是 butterflies
和 honeybees
的数量 - 而不是它们的大小、方向或某种幸福指数。
单个指标可以属于不同的保留策略。 保留策略 描述 InfluxDB 保留数据的时间 (DURATION
) 以及此数据的副本数存储在集群中的数量 (REPLICATION
)。如果您有兴趣阅读更多关于保留策略的信息,请查看 数据库管理。
复制因子在单节点实例中不起作用。
在示例数据中,census
指标中的所有内容都属于 autogen
保留策略。 InfluxDB 自动创建该保留策略;它具有无限的持续时间,复制因子设置为 1。
现在您已经熟悉了指标、标签集和保留策略,让我们讨论序列。在 InfluxDB 中,序列 是共享指标、标签集和字段键的点集合。上面的数据包含八个序列
序列号 | 指标 | 标签集 | 字段键 |
---|---|---|---|
序列 1 | census | location = 1 ,scientist = langstroth | 蝴蝶 |
序列 2 | census | location = 2 ,scientist = langstroth | 蝴蝶 |
序列 3 | census | location = 1 ,scientist = perpetua | 蝴蝶 |
序列 4 | census | location = 2 ,scientist = perpetua | 蝴蝶 |
序列 5 | census | location = 1 ,scientist = langstroth | 蜜蜂 |
序列 6 | census | location = 2 ,scientist = langstroth | 蜜蜂 |
序列 7 | census | location = 1 ,scientist = perpetua | 蜜蜂 |
序列 8 | census | location = 2 ,scientist = perpetua | 蜜蜂 |
在设计您的 Schema 以及在 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 是一个无 Schema 数据库,这意味着可以随时轻松添加新的指标、标签和字段。它旨在使时序数据的处理变得非常出色。
您成功了!您已经了解了 InfluxDB 中的基本概念和术语。如果您刚刚开始使用,我们建议您查看 入门指南 以及 写入数据 和 查询数据 指南。愿我们的时序数据库为您服务 🕔。
此页对您有帮助吗?
感谢您的反馈!