influxdb2
  • 前言
  • 介绍
    • 安装
    • 入门指南
  • 使用指南
    • 写入数据
    • 查询数据
    • 采样和数据保留
    • 硬件指南
    • HTTPS设置
  • 概念介绍
    • 关键概念
    • 专业术语
    • 与SQL比较
    • InfluxDB的设计见解和权衡
    • schema设计
    • 存储引擎
  • 写入协议
    • 行协议
  • 查询语言
    • 数据查询语法
    • schema查询语法
    • 数据库管理
    • 连续查询
    • 函数
    • 数学运算符
    • 认证和授权
  • 故障排除
    • FAQ
    • 系统监控
    • 查询管理
    • 错误信息
Powered by GitBook
On this page
  • database里面是什么?
  • 一般来说
  • 时间是一切
  • 术语
  • InfluxQL和SQL
  • 为什么InfluxDB不是CRUD的一个解释

Was this helpful?

  1. 概念介绍

与SQL比较

database里面是什么?

该章向SQL用户介绍了InfluxDB哪里像SQL数据库以及它哪里不像。将突出讲了两者之间的一些主要区别,并提供了不同的数据库术语和查询语言。

一般来说

InfluxDB是一个时间序列数据库,SQL数据库可以提供时序的功能,但严格说时序不是其目的。简而言之,InfluxDB用于存储大量的时间序列数据,并对这些数据进行快速的实时分析。

时间是一切

在InfluxDB中,timestamp标识了在任何给定数据series中的单个点。这就像一个SQL数据库表,其中主键是由系统预先设置的,并且始终是时间。

InfluxDB还会认识到您的schema可能随时间而改变。在InfluxDB中,您不需要在前面定义schema。数据点可以有一个measurement的field的一个,也可以有这个measurement的所有field,或其间的任何数字。 您可以在写数据的时候为该measurement添加一个新的field。

术语

下表是一个叫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的measurement(foodships)和SQL数据库里的table类似;

  • InfluxDB的tag(park_id和planet)类似于SQL数据库里索引的列;

  • InfluxDB中的field(#_foodships)类似于SQL数据库里没有索引的列;

  • InfluxDB里面的数据点(例如2015-04-16T12:00:00Z 5)类似于SQL数据库的行;

基于这些数据库术语的比较,InfluxDB的continuous query和retention policy与SQL数据库中的存储过程类似。 它们被指定一次,然后定期自动执行。

当然,SQL数据库和InfluxDB之间存在一些重大差异。SQL中的JOIN不适用于InfluxDB中的measurement。而且,正如我们上面提到的那样,一个measurement就像一个SQL的table,其中主索引总是被预设为时间。InfluxDB的时间戳记必须在UNIX epoch(GMT)或格式化为日期时间RFC3339格式的字符串才有效。

InfluxQL和SQL

在InfluxDB中InfluxQL是一种类SQL的语言。对于来自其他SQL或类SQL环境的用户来说,它已经被精心设计,而且还提供特定于存储和分析时间序列数据的功能。

InfluxQL的select语句来自于SQL中的select形式:

SELECT <stuff> FROM <measurement_name> WHERE <some_conditions>

where是可选的,在InfluxDB里为了查询到上面数据,需要输入:

SELECT * FROM "foodships"

如果你仅仅想看planet为Saturn的数据:

SELECT * FROM "foodships" WHERE "planet" = 'Saturn'

如果你想看到planet为Saturn,并且在UTC时间为2015年4月16号12:00:01之后的数据:

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

该查询输出measurement为foodships中的数据,其中时间戳比服务器当前时间减1小时。与now()做计算来决定时间范围的可选单位有:

字母

意思

u或µ

微秒

ms

毫秒

s

秒

m

分钟

h

小时

d

天

w

星期

为什么InfluxDB不是CRUD的一个解释

InfluxDB是针对时间序列数据进行了优化的数据库。这些数据通常来自分布式传感器组,来自大型网站的点击数据或金融交易列表等。

这个数据有一个共同之处在于它只看一个点没什么用。一个读者说,在星期二UTC时间为12:38:35时根据他的电脑CPU利用率为12%,这个很难得出什么结论。只有跟其他的series结合并可视化时,它变得更加有用。随着时间的推移开始显现的趋势,是我们从这些数据里真正想要看到的。另外,时间序列数据通常是一次写入,很少更新。

结果是,由于优先考虑create和read数据的性能而不是update和delete,InfluxDB不是一个完整的CRUD数据库,更像是一个CR-ud。

Previous专业术语NextInfluxDB的设计见解和权衡

Last updated 4 years ago

Was this helpful?

查看更多关于InfluxDB的术语的详细解释,请参考。

InfluxQL还支持正则表达式,表达式中的运算符,SHOW语句和GROUP BY语句。有关这些主题的深入讨论,请参阅我们的页面。 InfluxQL功能还包括COUNT,MIN,MAX,MEDIAN,DERIVATIVE等。 有关完整列表,请查看页面。

专业术语
数据探索
函数