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 | 朗斯特罗斯 |
| 2015-08-18T00:00:00Z | 1 | 30 | 1 | 永久的 |
| 2015-08-18T00:06:00Z | 11 | 28 | 1 | 朗斯特罗斯 |
| 2015-08-18T00:06:00Z | 3 | 28 | 1 | 永久 |
| 2015-08-18T05:54:00Z | 2 | 11 | 2 | 兰斯特罗斯(langstroth) |
| 2015-08-18T06:00:00Z | 1 | 10 | 2 | 朗斯特罗夫 |
| 2015-08-18T06:06:00Z | 8 | 23 | 2 | perpetua |
| 2015-08-18T06:12:00Z | 7 | 22 | 2 | 永恒 |
讨论
现在您已经在InfluxDB中查看了一些示例数据,这一部分将介绍这些数据的含义。
InfluxDB 是一个时间序列数据库,因此从我们所做一切的根本——时间开始是有意义的。
在上面的数据中,有一列叫做 time - 所有 InfluxDB 中的数据都有这一列。
time 存储时间戳,而 timestamp 显示与特定数据相关的日期和时间,采用 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 = 23butterflies = 1 honeybees = 30butterflies = 11 honeybees = 28butterflies = 3 honeybees = 28butterflies = 2 honeybees = 11butterflies = 1 honeybees = 10butterflies = 8 honeybees = 23butterflies = 7 honeybees = 22
字段是InfluxDB数据结构中必需的部分 - 没有字段就不能在InfluxDB中存储数据。 同时要注意的是,字段并没有被索引。 使用字段值作为过滤条件的查询必须扫描查询中满足其他条件的所有值。 因此,这些查询相对于标签上的查询性能较差(关于标签的更多内容见下文)。 一般来说,字段不应包含常见的查询元数据。
示例数据中的最后两列称为 location 和 scientist,是标签。 标签由标签键和标签值组成。 标签键 和 标签值 都作为字符串存储并记录元数据。 示例数据中的标签键是 location 和 scientist。 标签键 location 有两个标签值: 1 和 2。 标签键 scientist 也有两个标签值: langstroth 和 perpetua。
在上述数据中,标签集 是所有标签键-值对的不同组合。 示例数据中的四个标签集是:
location = 1,scientist = langstrothlocation = 2,scientist = langstrothlocation = 1,scientist = perpetualocation = 2,scientist = perpetua
标签是可选的。 您不需要在数据结构中包含标签,但通常利用它们是一个好主意,因为与字段不同,标签是被索引的。 这意味着对标签的查询更快,并且标签非常适合存储常被查询的元数据。
避免使用以下保留的关键字:
_field_measurementtime
如果保留的关键字作为标签或字段键被包含,则相关的点将被丢弃。
为什么索引很重要:架构案例研究
假设你注意到大多数查询集中在字段键 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 | 郎斯特罗夫 | 11 | 28 |
| 2015-08-18T00:06:00Z | 1 | 永久的 | 3 | 28 |
| 2015-08-18T05:54:00Z | 2 | 兰氏蜂箱 | 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 会自动创建该保留策略;它的持续时间是无限的,副本数设置为一。
现在你已经熟悉了度量、标签集合和保留策略,让我们来讨论系列。 在InfluxDB中,系列是共享一个度量、标签集合和字段键的一组点。 上面的数据由八个系列组成:
| 系列号 | 测量 | 标签集 | 字段键 |
|---|---|---|---|
| 系列 1 | census | location = 1,scientist = langstroth | butterflies |
| 系列 2 | census | location = 2,scientist = langstroth | butterflies |
| 系列 3 | census | location = 1,scientist = perpetua | butterflies |
| 系列 4 | census | location = 2,scientist = perpetua | butterflies |
| 系列 5 | census | location = 1,scientist = langstroth | honeybees |
| 系列 6 | census | location = 2,scientist = langstroth | honeybees |
| 系列 7 | census | location = 1,scientist = perpetua | honeybees |
| 系列 8 | census | location = 2,scientist = perpetua | honeybees |
理解序列的概念在设计你的 schema 时以及在使用 InfluxDB 中的数据时是至关重要的。
A point 代表一个单一的数据记录,具有四个组成部分:一个测量值、标签集、字段集和时间戳。一个点通过它的系列和时间戳唯一标识。
例如,这里有一个单点:
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中的基本概念和术语。 如果你刚刚开始,我们建议你查看入门指南以及写入数据和查询数据指南。 愿我们的时间序列数据库能为你提供良好的服务 🕔。