在深入InfluxDB之前,熟悉一些数据库的关键概念是很好的。本文档对这些概念和常用的InfluxDB术语进行了渐进的介绍。 我们在下面列出了所有将要介绍的名词,但是我们建议您从头到尾阅读本文档,以便更全面地了解我们最喜欢的时间序列数据库。
查看术语表,如果你更喜欢生硬的定义。
样例数据
下一节将引用下面显示的数据。这些数据是虚构的,但体现了在InfluxDB中真实的数据组织情况。它们显示了2015年8月18日午夜至2015年8月18日上午6:12期间两个科学家(langstroth和perpetua)在两个地点(地点1和地点2)计算的蝴蝶和蜜蜂的数量。 假设数据位于名为my_database的数据库中,并且使用自动保留策略(更多数据库和保留策略将会支持)。提示:将鼠标悬停在链接上会出现工具提示,帮你熟悉InfluxDB术语和布局。
名称:census
-————————————
| time | butterflies | honeybees | location | scientist |
| 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 |
详述
现在你已见到在Influx中的样例数据,本节介绍它们的含义。InfluxDB是一个时间序列数据库,所以从我们所做的一切的根源开始讲起是有意义的:时间。上面的数据包含一列叫time - InfluxDB中所有的数据都有这一列。time列存储时间戳,时间戳表示RFC3339标准的UTC日期和时间,和特定的数据关联。接下来的两列是butterflies和honeybees,是字段集。字段集由字段键和字段值组成。字段键(buttferflies和honeybees)是字符串,存储元数据;字段键butterflies告诉我们字段值12-7关联到butterflies以及字段键honeybees告诉我们字段值23-22关联到,嗯,honeybees。字段值是你的数据;它们可以是字符串,单精度数,整数或布尔值,因InfluxDB是时间序列数据库,字段值总是会关联到时间戳。样例中的字段值是:
12 23
1 30
11 28
3 28
2 11
1 10
8 23
7 22
上面的数据中,字段键值对的集合构成了字段集。下面列出样例中所有的8对字段集:
l butterflies = 12 honeybees = 23
l butterflies = 1 honeybees = 30
l butterflies = 11 honeybees = 28
l butterflies = 3 honeybees = 28
l butterflies = 2 honeybees = 11
l butterflies = 1 honeybees = 10
l butterflies = 8 honeybees = 23
l butterflies = 7 honeybees = 22
字段是InfluxDB数据结构中不可缺少的部分 – InfluxDB中不能存在没有字段的数据。注意到这些字段没有编入索引也很重要。使用字段值做过滤的查询必须扫描查询中的所有值以便匹配其它条件。结果就是这些查询和标签查询(更多介绍在后面)无关。总的来说,字段不应包括通常查询的元数据。
样例中最后两列location和scientist是标签。标签由标签键和标签值组成。键和值都作为字符串存储并记录元数据。样例中的标签键是location和scientist,标签键location具有两个值:1和2。标签键scientist也有两个值:langstroth和perpetua。在样例中,标签集是所有不同的标签键值对的组合。样例中的四个标签集是
l location = 1, scientist = langstroth
l location = 2, scientist = langstroth
l location = 1, scientist = perpetua
l location = 2, scientist = perpetua
标签是可选的。在你的数据结构中并不必须要有标签,一般来说,充分利分标签是个好做法,因为和字段不同,标签是编入索引的。这意味着根据标签查询的速度更快且对存储通常查询的元数据而言,标签是最为理想的选择。
为什么索引很重要:架构案例研究
比如说你注意到大多数查询都是取字段键honeybees和butterflies对应的值。
SELECT * FROM "census" WHERE "butterflies" = 1
SELECT * FROM "census" WHERE "honeybees" = 23
因字段不编入索引,在返回响应之前,InfluxDB会在第一个查询中扫描所有butterflies的值,在第二个查询中扫描所有honeybees的值。这种行为会影响查询响应时间 – 特别是数据规模大的时候。为优化查询,重新调整你的架构将会大有裨益:字段(butterflies和honeybees)调成标签且将标签(location和scientist)调成字段。
名称:census
-————————————
| time | location | scientist | butterflies | honeybees |
| 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不用再去扫描它们的每一个值 – 这意味着你的查询速度更快。
度量可看作是标签、字段和时间列的容器,度量名称是数据的描述,存储于相关字段中。度量名是字符串,对任何SQL用户来说,度量在概念上类似于表。样例中唯一的度量是census, census这个名称告诉我们字段值记录了蝴蝶和蜜蜂的数量 – 不是它们的大小,方向或某种幸福指数。
一个度量可以同时应用多个的保留策略。保留策略规定了数据在InfluxDB中保留多长时间(存续期间)以及在集群(副本集)中存储多少副本。如果您想了解有关保留策略的更多信息,请查看数据库管理。
副本数量不能用于单实例。
样例中,度量census中的所有元素都应用自动生成的保留策略。InfluxDB会自动生成默认策略:永远存在且副本数量为1。
现在你熟悉了度量,标签集及保留策略,是时候讨论序列(series)了。在InfluxDB中,序列是一个集合,集合中的数据共享一个保留策略,度量及标签集。样例中的数据可分为四个序列:
| 序列(编号任意) | 保留策略 | 度量 | 标签集 |
| series 1 | autogen | census | location = 1,scientist = langstroth |
| series 2 | autogen | census | location = 2,scientist = langstroth |
| series 3 | autogen | census | location = 1,scientist = perpetua |
| series 4 | autogen | census | location = 2,scientist = perpetua |
在InfluxDB中,当你设计架构及和处理数据时,理解序列的概念是非常必要的。
最后,点(point)是同一序列中具有相同时间戳的字段集合。例如,这是一个点:
名称: census
-----------------
time butterflies honeybees location scientist
2015-08-18T00:00:00Z 1 30 1 perpetua
示例中的序列由以下要素决定:保留策略(自动生成)、度量(census)以及标签集(location = 1, scientist = perpetua)。点的时间戳是2015-08-18T00:00:00Z。
我们刚刚介绍的所有内容都存储在数据库中 – 样例数据存于数据库my_database。InfluxDB中的数据库类似于传统关系型数据库,做为用户、保留策略、连续查询以及序列的逻辑容器提供服务。有关这个主题的更多信息,请参阅身份认证和授权以及连续查询。
数据可以具有多个用户,持续查询,保留策略以及度量。InfluxDB是无模式数据库,这意味着随时可以容易的增加新度量,标签及字段。它被设计成非常方便的处理时间序列数据。
你做到了!你了解了所有InfluxDB中的基本的概念和术语。如果你刚开始,我们建议您查看“入门”、“写数据”以及“查询数据”指南。愿我们的时间序列数据库能很好的为您服务。
本文介绍了InfluxDB的关键概念,如度量、标签、字段等,并通过样例数据详细解释了这些概念如何应用于时间序列数据库中。
1347

被折叠的 条评论
为什么被折叠?



