简述
时间序列数据:就是随时间不断产生的一系列数据,简单来说就是带时间戳的数据,每毫秒记录一下,然后制作成图表,揭示其趋势性,规律性,异常性,实现预测预警。
- 基于时间序列:支持与时间有关的相关函数(如最大,最小,求和等)。
- 可度量性:你可以实时对大量数据进行计算。
- 基于事件:它支持任意的事件数据基于事件:它支持任意的事件数据。
主要特点
- 无结构(无模式):可以是任意数量的列
- 可拓展的,支持min, max, sum, count, mean, median 等一系列函数,方便统计支持min, max, sum,
count, mean, median 等一系列函数,方便统计 - 原生的HTTP支持,内置HTTP API原生的HTTP支持,内置HTTP API
- 强大的类SQL语法强大的类SQL语法
- 自带管理界面,方便使用自带管理界面,方便使用
- 能够实时查询,数据在写入时被索引后就能够被立即查出
下载地址
https://influxdata.com/downloads/#influxdb window直接下载压缩包解压就可以了
解压后在当前目录打开cmd
执行 influxd.exe 命令启动influxDB
然后我们下载一款可以可视化操作InfluxDB的软件
直接访问: https://github.com/CymaticLabs/InfluxDBStudio/releases/tag/v0.2.0-beta.1
下载后解压就可以使用,打开InfluxDBStudio-0.2.0/InfluxDBStudio.exe
- Name 名称 - 连接的名称。这是使用此连接时将看到的标签
- Address 地址 - InfluxDB服务器的主机URI。排除协议信息。端口填写在右侧
- Database 数据库 - 用于连接的数据库。将其留空以列出所有数据库(需要管理员权限)
- UserName 用户名 - 用于连接的InfluxDB用户名(可以留空)
- Password 密码 - 与连接一起使用的InfluxDB密码(可以留空)
- Security Use SSL 使用SSL - 连接到InfluxDB时是否使用SSL安全性(HTTPS)
连接成功如下
名词解释
influxDB中的词 | 概念 |
database | 数据库 |
measurement | 数据库中的表 |
points | 表里面的一行数据 |
Point由时间戳(time)、数据(field)、标签(tags)组成。
Point属性 | 概念 |
time | 每个数据记录时间,是数据库中的主索引(会自动生成) |
fields | 各种没有索引的属性(通常作为被查询的字段) |
tags | 各种有索引的属性(通常需要被作为查询条件或group by)的字段 |
基本操作
写入数据
有很多可以向InfluxDB写数据的方式,包括命令行、客户端还有一些像Graphite有一样数据格式的插件。这篇文章将会展示怎样创建数据库,并使用內建的HTTP接口及命令行写入数据。
使用HTTP接口创建数据库
使用POST方式发送到URL的/query路径,参数q为CREATE DATABASE <new_database_name>,下面的例子发送一个请求到本地运行的InfluxDB创建数据库mydb:
curl -i -XPOST http://localhost:8086/query --data-urlencode "q=CREATE DATABASE mydb"
使用HTTP接口写数据
通过HTTP接口POST数据到/write路径是我们往InfluxDB写数据的主要方式。下面的例子写了一条数据到mydb数据库。这条数据的组成部分是measurement为cpu_load_short,tag的key为host和region,对应tag的value是server01和us-west,field的key是value,对应的数值为0.64,而时间戳是1434055562000000000。
curl -i -XPOST 'http://localhost:8086/write?db=mydb' --data-binary 'cpu_load_short,host=server01,region=us-west value=0.64 1434055562000000000'
当写入这条数据点的时候,你必须明确存在一个数据库对应名字是db参数的值。如果你没有通过rp参数设置retention policy的话,那么这个数据会写到db默认的retention policy中。想要获取更多参数的完整信息,请移步到API参考章节。
POST的请求体我们称之为Line Protocol,包含了你希望存储的时间序列数据。它的组成部分有measurement,tags,fields和timestamp。measurement是InfluxDB必须的,严格地说,tags是可选的,但是对于大部分数据都会包含tags用来区分数据的来源,让查询变得容易和高效。tag的key和value都必须是字符串。fields的key也是必须的,而且是字符串,默认情况下field的value是float类型的。timestamp在这个请求行的最后,是一个从1/1/1970 UTC开始到现在的一个纳秒级的Unix time,它是可选的,如果不传,InfluxDB会使用服务器的本地的纳米级的timestamp来作为数据的时间戳,注意无论哪种方式,在InfluxDB中的timestamp只能是UTC时间。
使用命令行写数据
use mydb
insert into measurement,tagKey=tagValue fieldKey=fieldValue timestamp
当measurement不存在的时候,我们插入一条数据时,就会创建这个measurement
需要注意的是tag和field中间使用空格隔开,tag与tag之间用逗号分隔,field与field之间用逗号分隔
tag都是string类型,不需要引号将value包裹
field如果是string类型,需要加引号
field有四种类型,int, float, string, boolean,只有String需要加引号
当写入数据不指定时间时,会自动用当前时间来补齐,如果需要自己指定时间时,再最后面添加上即可,注意时间为ns
查询数据
使用HTTP接口查询数据
HTTP接口是InfluxDB查询数据的主要方式。通过发送一个GET请求到/query路径,并设置URL的db参数为目标数据库,设置URL参数q为查询语句。
curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=mydb" --data-urlencode "q=SELECT * FROM measurement ORDER BY time DESC LIMIT 3"
InfluxDB返回一个json值,你查询的结果在result列表中,如果有错误发送,InfluxDB会在error这个key里解释错误发生的原因。
说明:添加pretty=ture参数在URL里面,是为了让返回的json格式化。这在调试或者是直接用curl的时候很有用,但在生产上不建议使用,因为这样会消耗不必要的网络带宽。
通过命令行
# 查询最新的三条数据
use mydb
SELECT * FROM measurement ORDER BY time DESC LIMIT 3
采样和数据保留
InfluxDB每秒可以处理数十万的数据点。如果要长时间地存储大量的数据,对于存储会是很大的压力。一个很自然的方式就是对数据进行采样,对于高精度的裸数据存储较短的时间,而对于低精度的的数据可以保存得久一些甚至永久保存。
InfluxDB提供了两个特性——连续查询(Continuous Queries简称CQ)和保留策略(Retention Policies简称RP),分别用来处理数据采样和管理老数据的。这一章将会展示CQs和RPs的例子,看下在InfluxDB中怎么使用这两个特性。
定义
Continuous Query (CQ)是在数据库内部自动周期性跑着的一个InfluxQL的查询,CQs需要在SELECT语句中使用一个函数,并且一定包括一个GROUP BY time()语句。
Retention Policy (RP)是InfluxDB数据架构的一部分,它描述了InfluxDB保存数据的时间。InfluxDB会比较服务器本地的时间戳和请求数据里的时间戳,并删除比你在RPs里面用DURATION设置的更老的数据。一个数据库中可以有多个RPs但是每个数据库的RPs是唯一的。
查看当前数据库的Retention Policies
SHOW RETENTION POLICIES ON "mydb"
创建新的Retention Policies
CREATE RETENTION POLICY "rp_name" ON "db_name" DURATION 30d REPLICATION 1 DEFAULT
- rp_name:策略名
- db_name:具体的数据库名
- 30d:保存30天,30天之前的数据将被删除 它具有各种时间参数,比如:h(小时),w(星期)
- REPLICATION 1:副本个数,这里填1就可以了
- DEFAULT 设为默认的策略
修改Retention Policies
ALTER RETENTION POLICY "rp_name" ON db_name" DURATION 3w DEFAULT
删除Retention Policies
DROP RETENTION POLICY "rp_name" ON "db_name"