InfluxDB学习-01介绍/基本操作
1.概念: InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载。它是TICK堆栈的组成部分 。InfluxDB旨在用作涉及大量带时间戳数据的任何用例的后备存储,包括DevOps监控,应用程序指标,物联网传感器数据和实时分析。2.主要特点: 1.专为时间序列数据编写的自定义高性能数据存储。TSM引擎允许高摄取速度和数据压缩 2.完全写...
1.概念:
InfluxDB是一个时间序列数据库,旨在处理高写入和查询负载。它是TICK堆栈的组成部分 。InfluxDB旨在用作涉及大量带时间戳数据的任何用例的后备存储,包括DevOps监控,应用程序指标,物联网传感器数据和实时分析。
2.主要特点:
1.专为时间序列数据编写的自定义高性能数据存储。TSM引擎允许高摄取速度和数据压缩
2.完全写在Go。它编译成单个二进制文件,没有外部依赖项。
3.简单,高性能的写入和查询HTTP API。
4.插件支持其他数据提取协议,如Graphite,collectd和OpenTSDB。
5.专为类似SQL的查询语言量身定制,可轻松查询聚合数据。
6.标签允许对系列进行索引以实现快速有效的查询。
7. 保留策略有效地自动使过时数据过期。
8.连续查询自动计算聚合数据,以提高频繁查询的效率。
3.优点:
时间序列数据库在海量数据的读取和写出都比关系型数据库和NoSql快很多,有人做过mysql和influxDB对比,存储1000万条数据mysql要7分多钟,influxDB只需2分多钟,从1000万条数据读10000条所需数据mysql要6秒多,influxDB只需0.22秒多.
用作涉及大量带时间戳数据的任何用例的后备存储.效率高。读写速度快。
4.安装下载
https://portal.influxdata.com/downloads#influxdb
5.influxDB数据库常用命令:
1、显示所有数据库:show databases
2、创建数据库: create database test 删除数据库: drop database test
3、使用某个数据库:use test
4、显示所有表:show measurements
5、新建表和插入数据 :新建表没有具体的语法,只是增加第一条数据时,会自动建立表
insert results,hostname=index1 value=1
关键词语说明:
1)database--数据库,这个同传统数据库的数据库概念。
2)measurement--数据表,在InfluxDB中,measurement即为表的作用,同传统数据库中的table作用一致。
二、InfluxDB特有概念
1)tag--标签,在InfluxDB中,tag是一个非常重要的部分,表名+tag一起作为数据库的索引,是“key-value”的形式。
2)field--数据,field主要是用来存放数据的部分,也是“key-value”的形式。
3)timestamp--时间戳,作为时序型数据库,时间戳是InfluxDB中最重要的部分,在插入数据时可以自己指定也可留空让系统指定。
说明:在插入新数据时,tag、field和timestamp之间用空格分隔。
4)series--序列,所有在数据库中的数据,都需要通过图表来展示,而这个series表示这个表里面的数据,可以在图表上画成
几条线。
5)Retention policy--数据保留策略,可以定义数据保留的时长,每个数据库可以有多个数据保留策略,
但只能有一个默认策略。。
6)Point--点,表示每个表里某个时刻的某个条件下的一个field的数据,因为体现在图表上就是一个点,
于是将其称为point。
7.GROUP BY 参数只能是time和tag)
如:SELECT mean("water_level") FROM "h2o_feet" WHERE time >= '2018-11-17T23:48:00Z' AND time <= '2018-11-18T00:30:00Z' GROUP BY time(10m),* fill(200) LIMIT 7 SLIMIT 1 SOFFSET 1
GROUP BY time(10m)则表示以10分钟分组,起始时间为包含这个区间的第一个10m的时间,即 2018-11-17T23:40:00Z。默认返回的是第一个series,如果要计算另外那个series,可以在SQL语句后面加上 SOFFSET 1。
fill(200)表示如果这个时间段没有数据,以200填充。mean(field_key)求该范围内数据的平均值(注意:这是依据series来计算。其他还有SUM求和,MEDIAN求中位数)。LIMIT 7表示限制返回的point(记录数)最多为7条,而SLIMIT 1则是限制返回的series为1个.
那如果时间小于数据本身采集的时间间隔呢,比如GROUP BY time(10s) 这样的话,就会按10s取一个点,没有数值的为空或者FILL填充,对应时间点有数据则保持不变。
6.设置一下时间显示格式:precision rfc3339
7、查询数据 表名有点号时,输入双引号
8、用户管理
a.显示所有用户: show users
b.新增用户:
--普通用户 create user "user" with password 'user'
--管理员用户 create user "admin" with password 'admin' with all privileges
c.删除用户:drop user "user"
修改和删除数据
InfluxDB属于时序数据库,没有提供修改和删除数据的方法。
但是删除可以通过InfluxDB的数据保存策略(Retention Policies)来实现
9.series操作
series表示这个表里面的数据,可以在图表上画成几条线,series主要通过tags排列组合算出来。
show series from test;
6.InfluxDB的HTTP API:使用curl这个工具来模拟HTTP 请求:
- 1)建立数据库
curl -POST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mytest" 建立一个名为mydb的数据库。
- 2)删除数据库
curl -POST http://localhost:8086/query --data-urlencode "q=DROP DATABASE mytest"
-
添加数据
curl -i -XPOST 'http://localhost:8086/write?db=mytest' --data-binary 'cpu_short,host=server01,region=us-west value=0.64 1s's055562000000000'
说明:db=mytest是指使用mydb这个数据库。
--data-binary后面是需插入数据。
cpu_short是表名(measurement),tag字段是host和region,值分别为:server01和us-west。
field key字段是value,值为0.64。
时间戳(timestamp)指定为1434055562000000000。
这样,就向mytest数据库的cpu_short表中插入了一条数据。
其中,db参数必须指定一个数据库中已经存在的数据库名,数据体的格式遵从InfluxDB规定格式,首先是表名,后面是tags,然后是field,最后是时间戳。tags、field和时间戳三者之间以空格相分隔。
-
添加多条数据
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_short,host=server02 value=0.67 cpu_short,host=server02,region=us-west value=0.55 1422568543702900257 cpu_short,direction=in,host=server01,region=us-west value=2.0 1422568543702900257'
这条语句向数据库mytest的表cpu_short中插入了三条数据。
第一条指定tag为host,值为server02,第二条指定tag为host和region,值分别为server02和us-west,第三条指定tag为direction,host,region,值分别为:in,server01,us-west。
-
HTTP API响应
InfluxDB的响应主要有以下几个:
1)2xx:204代表no content,200代表InfluxDB可以接收请求但是没有完成请求。一般会在body体中带有出错信息。
2)4xx:InfluxDB不能解析请求。
3)5xx:系统出现错误。
7.数据保留策略:
- 用来定义数据在InfluxDB中存放的时间,或者定义保存某个期间的数据。
- 一个数据库可以有多个保留策略,但每个策略必须是独一无二的。
7.1 InfluxDB 数据保留策略 目的:
InfluxDB本身不提供数据的删除操作,因此用来控制数据量的方式就是定义数据保留策略。
因此定义数据保留策略的目的是让InfluxDB能够知道可以丢弃哪些数据,从而更高效的处理数据
7.2 数据保留策略 操作:
- 1)查询策略 -->SHOW RETENTION POLICIES ON telegraf
test表只有一个策略,各字段的含义如下:
name--名称,此示例名称为 default
duration--持续时间,0代表无限制
shardGroupDuration--shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构,应该大于这个时间的数据在查询效率上应该有所降低。
replicaN--全称是REPLICATION,副本个数
default--是否是默认策略
- 2)新建策略
CREATE RETENTION POLICY "2_hours" ON "test" DURATION 2h REPLICATION 1 DEFAULT
在 test库添加了一个2小时的策略,名字叫做 2_hours, duration为2小时,副本为1,设置为默认策略。
因为名为autogen的策略不再是默认策略,因此,在查询使用autogen策略的表时要显式的加上策略名 “autogen”。
select * from "autogen".cpu limit 2
- 3)修改策略
ALTER RETENTION POLICY "autogen" ON "test" DURATION 0s DEFAULT 将策略 autogen 设置未default默认模式
- 4)删除策略
drop retention POLICY "2_hours" ON "test"
8、注意
策略这个关键词“POLICY”在使用是应该大写,小写应该会出错。
当一个表使用的策略不是默认策略时,在进行操作时一定要显式的指定策略名称,否则会出现错误。
9.InfluxDB连续查询:
数据库中自动定时启动的一组语句,语句中必须包含 SELECT
关键词和GROUP BY time()
。InfluxDB会将查询结果放在指定的数据表中。相当于mysql存储过程,函数,触发器等
9.1优点:
- 最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量。
- 而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。
9.2连续查询 操作 -->用户限制 管理员
- 1)新建连续查询语法:
CREATE CONTINUOUS QUERY <cq_name> ON <database_name> [RESAMPLE [EVERY <interval>] [FOR <interval>]] BEGIN SELECT <function>(<stuff>)[,<function>(<stuff>)] INTO <different_measurement> FROM <current_measurement> [WHERE <stuff>] GROUP BY time(<interval>)[,<stuff>] END 查询部分包含在 BEGIN 和 END 之间。
使用示例:
CREATE CONTINUOUS QUERY query_30m ON test BEGIN SELECT mean(userid) INTO user_used_30m FROM mem GROUP BY time(30m) END
在test 库中新建了一个名为 query_30m 的连续查询,每三十分钟取一个userid字段的平均值,加入 user_used_30m 表中。使用的数据保留策略都是 default。
- 2)显示所有已存在的连续查询
SHOW CONTINUOUS QUERIES
- 3)删除Continuous Queries -->
DROP CONTINUOUS QUERY <cq_name> ON <database_name>
9.3用处:
- 在InfluxDB中,将连续查询与数据存储策略一起使用会达到最好的效果。
比如,将精度高的表的存储策略定为一个周,然后将精度底的表存储策略定的时间久一点,这要就可以实现高低搭配,以满足不同的工作需要。
参考官网:http://docs.influxdata.com/influxdb/v1.7/
influxdb学习:https://www.linuxdaxue.com
更多推荐
所有评论(0)