InfluxDB笔记

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。