本页记录了 InfluxDB OSS 的早期版本。InfluxDB OSS v2是最新稳定版本。
InfluxDB 与 SQL 数据库类似,但在许多方面有所不同。InfluxDB 专为时间序列数据而构建。关系数据库可以处理时间序列数据,但并未针对常见的时间序列工作负载进行优化。InfluxDB 旨在存储大量时间序列数据并快速对这些数据进行实时分析。
时机就是一切
在 InfluxDB 中,时间戳可识别任何给定数据系列中的单个点。这类似于 SQL 数据库表,其中主键由系统预设且始终为时间。
InfluxDB 还认识到您的架构偏好可能会随时间而变化。在 InfluxDB 中,您不必预先定义架构。数据点可以包含测量上的一个字段、测量上的所有字段或介于两者之间的任意数字。您只需为该新字段写入一个点,即可将新字段添加到测量中。如果您需要对术语“测量”、“标签”和“字段”的解释,请查看下一节,了解 SQL 数据库到 InfluxDB 术语对照表。
术语
下表是foodships
SQL 数据库中表的一个(非常)简单的示例,其中包含未索引列#_foodships
和索引列park_id
、planet
和time
。
+---------+---------+---------------------+--------------+
| park_id | planet | time | #_foodships |
+---------+---------+---------------------+--------------+
| 1 | Earth | 1429185600000000000 | 0 |
| 1 | Earth | 1429185601000000000 | 3 |
| 1 | Earth | 1429185602000000000 | 15 |
| 1 | Earth | 1429185603000000000 | 15 |
| 2 | Saturn | 1429185600000000000 | 5 |
| 2 | Saturn | 1429185601000000000 | 9 |
| 2 | Saturn | 1429185602000000000 | 10 |
| 2 | Saturn | 1429185603000000000 | 14 |
| 3 | Jupiter | 1429185600000000000 | 20 |
| 3 | Jupiter | 1429185601000000000 | 21 |
| 3 | Jupiter | 1429185602000000000 | 21 |
| 3 | Jupiter | 1429185603000000000 | 20 |
| 4 | Saturn | 1429185600000000000 | 5 |
| 4 | Saturn | 1429185601000000000 | 5 |
| 4 | Saturn | 1429185602000000000 | 6 |
| 4 | Saturn | 1429185603000000000 | 5 |
+---------+---------+---------------------+--------------+
相同的数据在 InfluxDB 中如下所示:
name: foodships
tags: park_id=1, planet=Earth
time #_foodships
---- ------------
2015-04-16T12:00:00Z 0
2015-04-16T12:00:01Z 3
2015-04-16T12:00:02Z 15
2015-04-16T12:00:03Z 15
name: foodships
tags: park_id=2, planet=Saturn
time #_foodships
---- ------------
2015-04-16T12:00:00Z 5
2015-04-16T12:00:01Z 9
2015-04-16T12:00:02Z 10
2015-04-16T12:00:03Z 14
name: foodships
tags: park_id=3, planet=Jupiter
time #_foodships
---- ------------
2015-04-16T12:00:00Z 20
2015-04-16T12:00:01Z 21
2015-04-16T12:00:02Z 21
2015-04-16T12:00:03Z 20
name: foodships
tags: park_id=4, planet=Saturn
time #_foodships
---- ------------
2015-04-16T12:00:00Z 5
2015-04-16T12:00:01Z 5
2015-04-16T12:00:02Z 6
2015-04-16T12:00:03Z 5
参考上面的例子,一般来说:
- InfluxDB 测量(
foodships
)类似于 SQL 数据库表。 - InfluxDB 标签(
park_id
和planet
)就像 SQL 数据库中的索引列。 - InfluxDB 字段(
#_foodships
)类似于 SQL 数据库中未索引的列。 - InfluxDB 点(例如
2015-04-16T12:00:00Z 5
)类似于 SQL 行。
基于这种数据库术语的比较,InfluxDB持续查询 和保留策略类似于 SQL 数据库中的存储过程。它们只需指定一次,然后定期自动执行。
当然,SQL 数据库和 InfluxDB 之间存在一些重大差异。SQLJOIN
不适用于 InfluxDB 测量;您的架构设计应该反映出这种差异。而且,正如我们上面提到的,测量就像一个 SQL 表,其中主索引始终预设为时间。InfluxDB 时间戳必须采用 UNIX 纪元 (GMT) 或格式化为在 RFC3339 下有效的日期时间字符串。
有关本节中提到的 InfluxDB 术语的更多详细描述,请参阅我们的术语表。
查询语言
InfluxDB支持多种查询语言:
- 通量
- InfluxQL
通量
Flux是一种数据脚本语言,旨在查询、分析和处理时间序列数据。从InfluxDB 1.8.0开始,Flux 可与 InfluxQL 一起用于生产。
对于熟悉InfluxQL的人来说,Flux 旨在解决我们自推出 InfluxDB 1.0 以来收到的许多未完成的功能请求。有关 Flux 和 InfluxQL 之间的比较,请参阅Flux 与 InfluxQL。
Flux 是处理InfluxDB OSS 2.0 和InfluxDB Cloud中数据的主要语言,InfluxDB Cloud 是一种普遍可用的平台即服务 (PaaS),可在多个云服务提供商中使用。将 Flux 与 InfluxDB 1.8+ 结合使用,您可以熟悉 Flux 概念和语法,并轻松过渡到 InfluxDB 2.0。
InfluxQL
InfluxQL 是一种与 InfluxDB 交互的类 SQL 查询语言。它经过精心设计,让来自其他 SQL 或类 SQL 环境的用户感到熟悉,同时还提供特定于存储和分析时间序列数据的功能。然而,InfluxQL 不是 SQL,缺乏对更高级操作(如)的支持UNION
,JOIN
而SQL 高级用户已经习惯了这些操作。此功能可通过FluxHAVING
获得。
InfluxQL的SELECT
语句遵循SQL语句的形式SELECT
:
SELECT <stuff> FROM <measurement_name> WHERE <some_conditions>
其中WHERE
是可选的。
要获取上面部分中的 InfluxDB 输出,您需要输入:
SELECT * FROM "foodships"
如果你只想查看行星的数据Saturn
,你可以输入:
SELECT * FROM "foodships" WHERE "planet" = 'Saturn'
如果要查看Saturn
2015 年 4 月 16 日 12:00:01 UTC 之后的行星数据,请输入:
SELECT * FROM "foodships" WHERE "planet" = 'Saturn' AND time > '2015-04-16 12:00:01'
如上例所示,InfluxQL 允许您在子句中指定查询的时间范围WHERE
。您可以使用用单引号括起来的日期时间字符串,其格式为YYYY-MM-DD HH:MM:SS.mmm
(mmm
是毫秒,是可选的,您还可以指定微秒或纳秒)。您还可以使用相对时间,now()
它指的是服务器的当前时间戳:
SELECT * FROM "foodships" WHERE time > now() - 1h
foodships
该查询输出度量中时间戳比服务器当前时间减一小时新的数据。指定时间持续时间的选项now()
包括:
信 | 意义 |
---|---|
纳秒 | 纳秒 |
u 或 µ | 微秒 |
多发性硬化症 | 毫秒 |
s | 秒 |
米 | 分钟 |
时长 | 小时 |
d | 天 |
瓦 | 周 |
InfluxQL 还支持正则表达式、表达式中的算术、语句SHOW
和语句GROUP BY
。请参阅我们的数据探索页面,深入了解这些主题。InfluxQL 函数包括COUNT
、、、、等等。有关完整列表,请查看函数页面。MIN
MAX
MEDIAN
DERIVATIVE
现在您已经有了大致的了解,请查看我们的入门指南。
InfluxDB 不是 CRUD
InfluxDB 是一款针对时间序列数据进行了优化的数据库。此类数据通常来自分布式传感器组、大型网站的点击数据或金融交易列表等来源。
这些数据有一个共同点,那就是总体上更有用。如果某个读数显示,你的计算机的 CPU 在周二 UTC 时间 12:38:35 的利用率为 12%,那么很难得出结论。如果将其与该系列的其他数据结合起来并进行可视化,就会变得更加有用。这就是随时间变化的趋势开始显现的地方,并且可以从数据中得出可操作的见解。此外,时间序列数据通常只写入一次,很少更新。
结果是,InfluxDB 不是一个完整的 CRUD 数据库,而更像是一个 CR-ud,优先考虑创建和读取数据的性能而不是更新和销毁,并防止某些更新和销毁行为,以使创建和读取更高性能:
- 要更新某个点,请插入具有相同测量值、标签集和时间戳的点。
- 您可以删除一系列数据,但不能根据字段值删除单个数据点。解决方法是,您可以搜索字段值,检索时间,然后根据time字段删除数据。
- 您目前无法更新或重命名标签 - 请参阅 GitHub 问题#4157了解更多信息。要修改一系列点的标签,请找到具有有问题的标签值的点,将值更改为所需的值,将点写回,然后删除具有旧标签值的系列。
- 您不能通过标签键(而不是值)删除标签 - 请参阅 GitHub 问题#8604。