InfluxDB笔记

参考链接:

InfluxDB系列教程

时序数据库技术体系 – 初识InfluxDB

influxDB 简介

influxDB 是用Go语言编写的一个开源分布式时序、事件和指标数据库,无需外部依赖。类似的数据库有Elasticsearch、Graphite等

  • 特色:

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

# OS X(Via Homebrew)
brew update
brew install influxdb# Ubuntu(64 bit)
wget https://dl.influxdata.com/influxdb/releases/influxdb_0.13.0_amd64.deb
sudo dpkg -i influxdb_0.13.0_amd64.deb# Docker Image
docker pull influxdb
  • 服务器端启动
> sudo service influxdb start
  • 客户端登录

    1. 使用influxdb的环境变量在CLI进行登录
    2. Web页面:http://:8083

基本概念

Influxdb中的概念 传统数据库中的概念
database 数据库
measurement 数据库中的表
points 表里面的一行数据
  • Point

    1. Point由时间戳(timestamp)、数据(field)、标签(tags)组成。

      • timestamp: 时序型数据库的标志,可以留空让系统自己设置也可以指定
      • field: 主要是用来存放数据的部分,是“key-value”形式。
      • tag: 表名+tag一起作为数据库的索引,是“key-value”的形式。
    2. Point相当于传统数据库里的一行数据,如下表所示:

      Point属性 传统数据库中的概念
      time 每个数据记录时间,是数据库中的主索引(会自动生成)
      fields 各种记录值(没有索引的属性)也就是记录的值:温度, 湿度
      tags 各种有索引的属性:地区,海拔
  • Series
    Series的官方解释为:一个共享相同Retention Policy, measurement和tag set的数据集。换句话说,Series就是一个数据集,这个数据集由RP,measurement和tag set共同确定。

    例子:measurement: census

    time location scientist butterflies honeybees
    2015-08-18T00:00:00Z 1 langstroth 12 23
    2015-08-18T00:00:00Z 1 perpetua 1 30
    2015-08-18T00:06:00Z 1 langstroth 11 28
    2015-08-18T00:06:00Z 1 perpetua 3 28
    2015-08-18T05:54:00Z 2 langstroth 2 11
    2015-08-18T06:00:00Z 2 langstroth 1 10
    2015-08-18T06:06:00Z 2 perpetua 8 23
    2015-08-18T06:12:00Z 2 perpetua 7 22

    它的series为:

    Arbitrary series number Retention policy Measurement Tag set
    series 1 default census location = 1,scientist = langstroth
    series 2 default census location = 2,scientist = langstroth
    series 3 default census location = 1,scientist = perpetua
    series 4 default census location = 2,scientist = perpetua

基本操作

如同MYSQL一样,InfluxDB提供多数据库支持,对数据库的操作也与MYSQL相同。

# 显示数据库
> SHOW DATABASES# 新建数据库
> CREATE DATABASE <db name># 删除数据库
> DROP DATABASE <db name># 使用数据库
> USE <db name># 显示表
> SHOW <measurement name># 新建表
> INSERT <measurement name>, <tag key>=<tag value> <field key>=<field value> [timestamp]# 删除表
> DROP MEASUREMENT <measurement name># 增加数据
> INSERT <measurement name>, <tag key>=<tag value>,<tag key>=<tag value> <field key>=<field value>,<field key>=<field value> [timestamp]

InfluxDB是时序型数据库,没有提供修改和删除数据的方法,但是数据删除可以通过influxDB的数据保存策略实现(Retention Policies)

influxDB中的数据保留策略

InfluxDB的数据保留策略(RP) 用来定义数据在InfluxDB中存放的时间,或者定义保存某个期间的数据。

注意:

  1. RP是数据库级别而不是表级别的属性。这和很多数据库都不同。
  2. 每个数据库可以有多个数据保留策略,但只能有一个默认策略。
  3. 不同表可以根据保留策略规划在写入数据的时候指定RP进行写入

目的:控制数据库中的数据量,因为influxDB中没有删除数据的操作

Shard Group

Shard Group是influxDB中的一个重要的逻辑概念,它的意思是将数据按照时间进行分区,每一个Shard只能存储特定时间段内的数据。不同Shard Group对应的时间段不会重合。比如2017年9月份的数据落在Shard Group0上,2017年10月份的数据落在Shard Group1上。

每个Shard Group对应多长时间是通过Retention Policy中字段”SHARD DURATION”指定的,如果没有指定,也可以通过Retention Duration(数据过期时间)计算出来,两者的对应关系为:

使用Shard Group的原因:

  1. 将数据按照时间分割成小的粒度会使得数据过期实现非常简单,InfluxDB中数据过期删除的执行粒度就是Shard Group,系统会对每一个Shard Group判断是否过期,而不是一条一条记录判断。

  2. 实现了将数据按照时间分区的特性。将时序数据按照时间分区是时序数据库一个非常重要的特性,基本上所有时序数据查询操作都会带有时间的过滤条件,比如查询最近一小时或最近一天,数据分区可以有效根据时间维度选择部分目标分区,淘汰部分分区。

Note: Shard为InfluxDB后台真正的存储引擎,influxDB的Sharding策略为Hash Sharding,分布式存储的Sharding策略暂不研究

# 查询策略
> SHOW RETENTION POLICIES ON <db name>
name    duration    shardGroupDuration    replicaN    default
default    0        168h0m0s        1        true
# name: 保留策略的名称
# duration:持续时间,0表示无限制
# shardGroupDuration--shardGroup的存储时间,shardGroup是InfluxDB的一个基本储存结构
# replicaN--副本个数
# default: 是否是默认策略# 新建策略
> CREATE RETENTION POLICY <retention policy name> ON <db name> DURATION <duration> REPLICATION <n> [SHARD DURATION <duration>] [DEFAULT]# 修改策略
> ALTER RETENTION POLICY <retention policy name> ON <db name> DURATION <duration> DEFAULT# 删除策略
> DROP RETENTION POLICY <retention policy name> ON <db name>

influxDB中的连续查询

InfluxDB的连续查询是在数据库中自动定时启动的一组语句,语句中必须包含 SELECT 关键词和 GROUP BY time() 关键词。

InfluxDB会将查询结果放在指定的数据表中。

连续查询的目的:

  1. 降低采样率的方式,连续查询和存储策略搭配使用将会大大降低InfluxDB的系统占用量
  2. 使用连续查询后,数据会存放到指定的数据表中,这样就为以后统计不同精度的数据提供了方便。

注意:InfluxDB的连续查询操作只能由管理员用户完成

# 创建连续查询
> CREATE CONTINUOUS QUERY <continusous query name> ON <db 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# 显示已存在的连续查询
> SHOW CONTINUOUS QUERIES# 删除连续查询
> DROP CONTINUOUS QUERY <continuous query name> ON <db name>

常用聚合类函数

  1. COUNT()函数:

    返回一个field中的非空值的数量

    > SELECT COUNT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]# 注意:InfluxDB中的函数如果没有指定时间的话,会默认以 epoch 0 (1970-01-01T00:00:00Z) 作为时间。# 可以在where中加入时间条件> SELECT COUNT(<field name>) FROM <measurement name> WHERE time >= 'yyyy-mm-ddThh:MM:ssZ' AND time < 'yyyy-mm-ddThh:MM:ssZ' GROUP BY time(<time length>)
  2. DISTINCT()函数:

    返回一个字段(field)的唯一值。

    > SELECT DISTINCT(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  3. MEAN() 函数:

    返回一个字段(field)中的值的算术平均值(平均值)。字段类型必须是长整型或float64。

    > SELECT MEAN(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  4. MEDIAN()函数:

    从单个字段(field)中的排序值返回中间值(中位数)。字段值的类型必须是长整型或float64格式。

    > SELECT MEDIAN(<field_key>) FROM <measurement name> [WHERE <stuff>] [GROUP by <stuff>]
  5. SPREAD()函数:

    返回字段的最小值和最大值之间的差值。数据的类型必须是长整型或float64。

    > SELECT SPREAD(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  6. SUM()函数

    返回一个字段中的所有值的和。字段的类型必须是长整型或float64。

    > SELECT SUM(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

常用选择类函数

  1. TOP()函数

    作用:返回一个字段中最大的N个值,字段类型必须是长整型或float64类型。

    > SELECT TOP( <field_key>[,<tag_key(s)>],<N> )[,<tag_key(s)>|<field_key(s)>] [INTO_clause] FROM_clause [WHERE_clause] [GROUP_BY_clause] [ORDER_BY_clause] [LIMIT_clause] [OFFSET_clause] [SLIMIT_clause] [SOFFSET_clause]
  2. BOTTOM()函数

    作用:返回一个字段中最小的N个值。字段类型必须是长整型或float64类型。

    > SELECT BOTTOM(<field_key>[,<tag_keys>],<N>)[,<tag_keys>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  3. FIRST()函数

    作用:返回一个字段中最老的取值。

    > SELECT FIRST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  4. LAST()函数

    作用:返回一个字段中最新的取值。

    > SELECT LAST(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  5. MAX()函数

    作用:返回一个字段中的最大值。该字段类型必须是长整型,float64,或布尔类型。

    > SELECT MAX(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  6. MIN()函数

    作用:返回一个字段中的最小值。该字段类型必须是长整型,float64,或布尔类型。

    > SELECT MIN(<field_key>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]
  7. PERCENTILE()函数

    作用:返回排序值排位为N的百分值。字段的类型必须是长整型或float64。

    百分值是介于100到0之间的整数或浮点数,包括100。

    > SELECT PERCENTILE(<field_key>, <N>)[,<tag_key(s)>] FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

常用变化类函数

  1. DERIVATIVE()函数

    作用:返回一个字段在一个series中的变化率。
    InfluxDB会计算按照时间进行排序的字段值之间的差异,并将这些结果转化为单位变化率。其中,单位可以指定,默认为1s。

    > SELECT DERIVATIVE(<field_key>, [<unit>]) FROM <measurement_name> [WHERE <stuff>]

    其中unit的取值可以有以下几种:

    u --microseconds
    s --seconds
    m --minutes
    h --hours
    d --days
    w --weeks

    DERIVATIVE()函数还可以在GROUP BY time()的条件下与聚合函数嵌套使用,格式如下:

    > SELECT DERIVATIVE(AGGREGATION_FUNCTION(<field_key>),[<unit>]) FROM <measurement_name> WHERE <stuff> GROUP BY time(<aggregation_interval>)
  2. DIFFERENCE()函数

    作用:返回一个字段中连续的时间值之间的差异。字段类型必须是长整型或float64。
    最基本的语法:

    > SELECT DIFFERENCE(<field_key>) FROM <measurement_name> [WHERE <stuff>]

    与GROUP BY time()以及其他嵌套函数一起使用的语法格式:

    > SELECT DIFFERENCE(<function>(<field_key>)) FROM <measurement_name> WHERE <stuff> GROUP BY time(<time_interval>)

    其中函数可以包含:
    COUNT(), MEAN(), MEDIAN(),SUM(), FIRST(), LAST(), MIN(), MAX(), 和 PERCENTILE()。

  3. ELAPSED()函数

    作用:返回一个字段在连续的时间间隔间的差异,间隔单位可选,默认为1纳秒。
    可选单位如下表

    Units Meaning
    u microseconds(1 millionth of a second)
    ms milliseconds(1 thousandth of a second)
    s second
    m minute
    h hour
    d day
    w week
    > SELECT ELAPSED(<field_key>, <unit>) FROM <measurement_name> [WHERE <stuff>]
  4. MOVING_AVERAGE()函数

    作用:返回一个连续字段值的移动平均值,字段类型必须是长整形或者float64类型。
    语法:

    > SELECT MOVING_AVERAGE(<field_key>,<window>) FROM <measurement_name> [WHERE <stuff>]

    与其他函数和GROUP BY time()语句一起使用时的语法:

    > SELECT MOVING_AVERAGE(<function>(<field_key>),<window>) FROM <measurement_name> WHERE <stuff> GROUP BY time(<time_interval>)

    此函数可以和以下函数一起使用:

    COUNT(), MEAN(),MEDIAN(), SUM(), FIRST(), LAST(), MIN(), MAX(), and PERCENTILE().

  5. NON_NEGATIVE_DERIVATIVE()函数

    作用:返回在一个series中的一个字段中值的变化的非负速率。

    > SELECT NON_NEGATIVE_DERIVATIVE(<field_key>, [<unit>]) FROM <measurement_name> [WHERE <stuff>]

    unit取值可以有:

    Unit Meaning
    u microseconds
    s seconds
    m minutes
    h hour
    d days
    w weeks

    与聚合类函数放在一起使用时的语法如下所示:

    > SELECT NON_NEGATIVE_DERIVATIVE(AGGREGATION_FUNCTION(<field_key>),[<unit>]) FROM <measurement_name> WHERE <stuff> GROUP BY time(<aggregation_interval>)
  6. STDDEV()函数

    作用:返回一个字段中的值的标准偏差。值的类型必须是长整型或float64类型。

    基本语法:

    > SELECT STDDEV(<field_key>) FROM <measurement_name> [WHERE <stuff>] [GROUP BY <stuff>]

InfluxDB笔记相关推荐

  1. influxdb 笔记: Continuous Queries - CQs

    https://docs.influxdata.com/influxdb/v0.13/guides/downsampling_and_retention/ # 自动执行查询 CREATE CONTIN ...

  2. ChirpStack 学习笔记 2.8.1 ChirpStack 容器连接本机 InfluxDB 容器的一个典型问题处理

    文章目录 前言 1 问题描述 2 原因分析 2.1 容器网络分析 lora-app-server_default loraserver-docker_default 2.2 容器网络梳理 3 处理方案 ...

  3. 搬砖方法论:命令查询分离原则(Command-Query Separation,CQS原则)

    其原则主张方法应给分为两类: 查询:方法返回结果,但不改变任何系统状态(无副作用). 命令:方法没有结果,但会改变系统状态. 此原则带来的优点如下 查询类型的方法,对于调用者来讲不用在顾虑各个查询方法 ...

  4. InfluxDB时序数据库-笔记

    本笔记由在Bilibili学习的尚硅谷教学视频后整理得来 文章目录 一.InfluxDB基础概念 1.1InfluxDB是什么 1.2为什么选择InfluxDB而不选择关系型数据库 1.3下载安装 1 ...

  5. Jmeter工具笔记-Jmeter+influxdb+grafanas设置性能监控过程

    1.下载 1)influxdb下载链接:https://portal.influxdata.com/downloads 2)grafanas下载链接:https://grafana.com/grafa ...

  6. influxdb学习笔记

    目录标题 一.influxdb简介 (一)InfluxDB 不是 CRUD (二)InfluxDB 支持两种风格的查询(操作数据库的)方式 1. Flux 2. InfluxQL 3. Flux 与 ...

  7. influxdb数据过期_InfluxDB 学习笔记

    InfluxDB 是什么 InfluxDB 是用Go语言编写的一个开源分布式时序.事件和指标数据库,无需外部依赖. InfluxDB在DB-Engines的时序数据库类别里排名第一. 重要特性极简架构 ...

  8. jmeter的性能监控框架搭建记录(Influxdb+Grafana+Jmeter)

    查看笔记 http://note.youdao.com/noteshare?id=c700365713abb98bd3d10e6f45393af9&sub=6F4E14FF3F9D4167AE ...

  9. InfluxDB(官方使用说明)

    安装InfluxDB OSS 此页面提供有关安装,启动和配置InfluxDB的说明. InfluxDB OSS安装要求 root为了成功完成,需要安装InfluxDB软件包或具有管理员权限. Infl ...

最新文章

  1. 架构设计之分布式文件系统
  2. HyperLedger Fabric 错误记录
  3. php读取文件和读取redis,本地测试读取redis和普通文件缓存的速度,redis慢一倍?...
  4. Jzoj4743 积木
  5. java static 初始化顺序_java static 初始化顺序语法并不正确
  6. rgba 透明度转换十六进制
  7. 【T+】T+和天联高级版软件结合使用的时候,运行T+提示网页崩溃了。
  8. 所谓区块链,信息化的族谱而已——简单区块链python代码示例
  9. 计算机维修难点,计算机组装与维修习重难点.doc
  10. Poco Timer
  11. 基于 EG6831 的无感 BLDC 控制方案
  12. 哀悼日,不发布文章(技术类)!为逝者哀悼!
  13. mysql 特性之一 double write (双写)
  14. 升级autoconf版本 Autoconf version 2.68 or higher is required
  15. C语言:由大到小排序
  16. 开发利器IntelliJ IDEA—带你体验各种神奇操作
  17. php artisan --,php artisan
  18. 稿费计算机在线,稿酬个税计算器2017年.doc
  19. ai电销机器人系统搭建开发-通话模块
  20. 常用的CSS命名规范大总结

热门文章

  1. 高通公布骁龙835关键规格:集成首款X16千兆基带
  2. 推荐的看电影网站,值得拥有
  3. 本地WinSCP上传文件到腾讯云服务器显示Permission Denied
  4. ssh移植 打包根文件系统的第一步
  5. 编程实现计算机硬件温度探测极其控制风扇转速总结
  6. mac 复制粘贴快捷键 系统和idea (eclipse风格)保持一致
  7. mysql无法停止slave_stop slave卡住
  8. C++遍历map方法
  9. 马方发现mh370强有力线索 已禁止机长独处驾驶舱
  10. MongoDB 安装配置以及连接