简述

时间序列数据:就是随时间不断产生的一系列数据,简单来说就是带时间戳的数据,每毫秒记录一下,然后制作成图表,揭示其趋势性,规律性,异常性,实现预测预警。

  • 基于时间序列:支持与时间有关的相关函数(如最大,最小,求和等)。
  • 可度量性:你可以实时对大量数据进行计算。
  • 基于事件:它支持任意的事件数据基于事件:它支持任意的事件数据。

主要特点

  • 无结构(无模式):可以是任意数量的列
  • 可拓展的,支持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直接下载压缩包解压就可以了

influxdb数据库增加索引 influxdb sum_数据库


解压后在当前目录打开cmd

influxdb数据库增加索引 influxdb sum_数据_02


执行 influxd.exe 命令启动influxDB

influxdb数据库增加索引 influxdb sum_HTTP_03


然后我们下载一款可以可视化操作InfluxDB的软件

直接访问: https://github.com/CymaticLabs/InfluxDBStudio/releases/tag/v0.2.0-beta.1

下载后解压就可以使用,打开InfluxDBStudio-0.2.0/InfluxDBStudio.exe

influxdb数据库增加索引 influxdb sum_HTTP_04

  • Name 名称 - 连接的名称。这是使用此连接时将看到的标签
  • Address 地址 - InfluxDB服务器的主机URI。排除协议信息。端口填写在右侧
  • Database 数据库 - 用于连接的数据库。将其留空以列出所有数据库(需要管理员权限)
  • UserName 用户名 - 用于连接的InfluxDB用户名(可以留空)
  • Password 密码 - 与连接一起使用的InfluxDB密码(可以留空)
  • Security Use SSL 使用SSL - 连接到InfluxDB时是否使用SSL安全性(HTTPS)

连接成功如下

influxdb数据库增加索引 influxdb sum_数据库_05

名词解释

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"