InfluxDB笔记
InfluxDB简介
InluxDB是用Go语言编写的开源分布式时序、事件和指标数据库,无需外部依赖。
主要特色
1)基于时间序列,支持与时间有关的相关函数(如最大,最小,求和等)
2)可度量性:你可以实时对大量数据进行计算
3)基于事件:它支持任意的事件数据
主要特点
1)无结构(无模式):可以是任意数量的列
2)可拓展的
3)支持min, max, sum, count, mean, median 等一系列函数,方便统计
4)原生的HTTP支持,内置HTTP API
5)强大的类SQL语法
6)自带管理界面,方便使用
基本概念
与传统数据库中的名词做比较
influxDB中的名词 | 传统数据库中的概念 |
---|---|
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据 |
influxDB中的重要概念
timestamp
influxdb的数据都有一列名为time的列,里面存储UTC时间戳
fileld key,field value,field set
influxdb的字段(fields)由field key和field value组成。
field key为string类型,用于存储元数据。
field value可以为string,float,integer或boolean类型,通常都是与时间关联的。
field key和field value组成的集合称之为field set。
在influxdb中,字段必须存在。注意,字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段的值,性能不及tag。类比一下,fields相当于SQL的没有索引的列。
tag key,tag value,tag set
标签(tags)由tag key和tag value组成。
tag key和tag value组成了tag set。
tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。
measurement
measurement是fields,tags以及time列的容器,measurement的名字用于描述存储在其中的字段数据,类似mysql的表名。
retention policy
retention policy指数据保留策略。retention policy默认为autogen,它表示数据一直保留永不过期。你也可以指定数据的保留时间,如30天。
series
series是共享同一个retention policy,measurement以及tag set的数据集合。
表示可以在图表上画成几条线,通过tags排列组合算出来。
point
point则是同一个series中具有相同时间的field set,points相当于SQL中的数据行。
基本操作
influxDB操作方式
influxDB提供三种操作方式:
1)客户端命令行方式
2)HTTP API接口
3)各语言API库
influxDB数据库操作
1)显示数据库:
show databases
2)新建数据库:
create database test
3)删除数据库
drop database test
4)使用某个数据库
use test
5)显示所有表
show measurements
6)新建表
InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表
insert disk_free,hostname=server01 value=442221834240
7)增加数据
增加数据采用insert的方式,要注意的是 InfluxDB的insert中,表名与数据之间用逗号(,)分隔,tag和field之间用 空格分隔,多个tag或者多个field之间用逗号(,)分隔。
insert disk_free,hostname=server01 value=442221834240
在这条语句中,disk_free是表名,hostname=server01是tag,属于索引,value=xx是field
8)查询数据
查询语句与SQL一样,在此不再赘述。
9)修改和删除数据
InfluxDB属于时序数据库,没有提供修改和删除数据的方法。
但是删除可以通过InfluxDB的数据保存策略来实现
特色函数
一些常用的特色函数
聚合函数:FILL()
, INTEGRAL()
,SPREAD()
, STDDEV()
,MEAN()
, MEDIAN()
等。
选择函数: SAMPLE()
, PERCENTILE()
, FIRST()
, LAST()
, TOP()
, BOTTOM()
等。
转换函数: DERIVATIVE()
, DIFFERENCE()
等。
预测函数:HOLT_WINTERS()
。
GROUP BY,FILL()
GROUP BY参数只能是time和tag,fill(200)表示如果这个时间段没有数据,以200填充
mean(field_key)求该范围内数据的平均值
SUM求和
MEDIAN求中位数
LIMIT 7表示限制返回的point(记录数)最多为7条
SLIMIT 1 则是限制返回的series为1个
连续查询
定义
InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT
关键词和GROUP BY time()
关键词。
InfluxDB会将查询结果放在指定的数据表中
目的
使用连续查询是最优的降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量。
而且使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便
操作
CREATE CONTINUOUS QUERY cq_30m ON telegraf
BEGIN SELECT mean(used) INTO mem_used_30m
FROM mem GROUP BY time(30m)
END
示例在telegraf库中新建了一个名为 cq_30m 的连续查询,每三十分钟取一个used字段的平均值,加入 mem_used_30m 表中。使用的数据保留策略都是 default。