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

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐