在深入研究 InfluxDB 之前,最好先熟悉一下数据库的一些关键概念。本文档介绍了 InfluxDB 的关键概念和元素。为了介绍关键概念,我们将介绍以下元素在 InfluxDB 中如何协同工作:
- 数据库
- 字段键
- 字段集
- 字段值
- 测量
- 观点
- 保留政策
- 系列
- 标签键
- 标签集
- 标签值
- 时间戳
示例数据
下一节将引用下面打印出来的数据。数据是虚构的,但代表了 InfluxDB 中可信的设置。它们显示了两位科学家(langstroth
和perpetua
)在两个地点(位置1
和位置2
)从 2015 年 8 月 18 日午夜到 2015 年 8 月 18 日上午 6:12 期间计数的蝴蝶和蜜蜂数量。假设数据位于名为的数据库中my_database
,并受autogen
保留策略的约束(有关数据库和保留策略的更多信息将在后面介绍)。
提示:将鼠标悬停在工具提示链接上,以熟悉 InfluxDB 术语和布局。
姓名:
人口普查
时间 | | | | |
---|---|---|---|---|
2015-08-18T00:00:00Z | 12 | 23 | 1 | 朗斯特罗斯 |
2015-08-18T00:00:00Z | 1 | 三十 | 1 | 永久 |
2015-08-18T00:06:00Z | 11 | 二十八 | 1 | 朗斯特罗斯 |
| | | | |
2015-08-18T05:54:00Z | 2 | 11 | 2 | 朗斯特罗斯 |
2015-08-18T06:00:00Z | 1 | 10 | 2 | 朗斯特罗斯 |
2015-08-18T06:06:00Z | 8 | 23 | 2 | 永久 |
2015-08-18T06:12:00Z | 7 | 22 | 2 | 永久 |
讨论
现在您已经看到了 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
time
如果保留键作为标签或字段键包含在内,则相关点将被丢弃。
索引为何重要:架构案例研究
honeybees
假设您注意到大多数查询都集中于字段键和的值butterflies
:
SELECT * FROM "census" WHERE "butterflies" = 1
SELECT * FROM "census" WHERE "honeybees" = 23
由于字段未编入索引,InfluxDB 会扫描butterflies
第一个查询中的每个值和honeybees
第二个查询中的每个值,然后再提供响应。这种行为可能会影响查询响应时间 - 尤其是在更大规模的情况下。为了优化查询,重新排列架构可能会有所帮助,这样字段(butterflies
和honeybees
)将成为标签,标签(location
和scientist
)将成为字段:
姓名:
时间 | | | | |
---|---|---|---|---|
2015-08-18T00:00:00Z | 1 | 朗斯特罗斯 | 12 | 23 |
2015-08-18T00:00:00Z | 1 | 永久 | 1 | 三十 |
2015-08-18T00:06:00Z | 1 | 朗斯特罗斯 | 11 | 二十八 |
| | | | |
2015-08-18T05:54:00Z | 2 | 朗斯特罗斯 | 2 | 11 |
2015-08-18T06:00:00Z | 2 | 朗斯特罗斯 | 1 | 10 |
2015-08-18T06:06:00Z | 2 | 永久 | 8 | 23 |
2015-08-18T06:12:00Z | 2 | 永久 | 7 | 22 |
既然butterflies
和honeybees
是标签,InfluxDB 在执行上述查询时不必扫描它们的每个值 - 这意味着您的查询速度更快。
这测量充当标签、字段和time
列的容器,测量名称是存储在相关字段中的数据的描述。测量名称是字符串,对于任何 SQL 用户来说,测量在概念上类似于表。示例数据中唯一的测量是census
。名称和的census
数量- 而不是它们的大小、方向或某种幸福指数。butterflies
honeybees
单个测量可以属于不同的保留策略。保留策略描述了 InfluxDB 保留数据的时间(DURATION
)以及该数据在集群中存储的副本数(REPLICATION
)。如果您有兴趣了解有关保留策略的更多信息,请查看数据库管理。
复制因素对单节点实例不起作用。
在示例数据中,测量中的所有内容都census
属于autogen
保留策略。InfluxDB 会自动创建该保留策略;其持续时间无限,复制因子设置为 1。
现在您已经熟悉了测量、标签集和保留策略,让我们讨论一下系列。在 InfluxDB 中,series是共享一个测量值、标签集和字段键的点的集合。上面的数据由八个系列组成:
系列号 | 测量 | 标签集 | 字段键 |
---|---|---|---|
系列 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 |
在设计模式和处理 InfluxDB 中的数据时,理解系列的概念至关重要。
一个point表示一条数据记录,包含四个部分:测量值、标签集、字段集和时间戳。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 中的基本概念和术语。如果您刚刚开始使用,我们建议您查看入门指南和写入数据和查询数据指南。希望我们的时间序列数据库能为您服务🕔。