NightPxy 个人技术博客

influxDB 简单使用

Posted on By NightPxy

结构&概念

结构

  • database 数据库
  • measurement 类似数据库中的表
  • point 类似数据库表中的一行记录

Point

Point由时间戳(time)、数据(field)和标签(tags)组成

  • time:每条数据记录的时间,也是数据库自动生成的主索引
  • fields:各种记录的值
  • tags:tag以字符串字符串形式存放.
    tag是可选的,可以用来做索引,一般用于where中限制条件

Series

Series 相当于influxDB中的一些数据集合. 在同一个数据库中,retention policy、measurement、tag sets完全相同的数据同属于一个series 同一个series的数据在物理上会按照时间顺序排列存储在一起

CRUD

类Sql形式

#创建数据库
create database "db_name"

#显示所有的数据库
show databases

#删除数据库
drop database "db_name"

#使用数据库
use db_name

#显示该数据库中所有的表
show measurements

#创建表,直接在插入数据的时候指定表名
insert test,host=127.0.0.1,monitor_name=test count=1

#删除表
drop measurement "measurement_name"

# 查询 
select * from test order by time desc

scala-code

val influxDB = InfluxDBFactory.connect("http://192.168.18.151:8086", "root", "");

//程序方式写入influxDB,一般是大量的,请求密集的
//所以一般使用批量发送 + 异步 

 val batchPoints = BatchPoints
    .database(dbName)
    .tag("async", "true") //异步提交
    .retentionPolicy("default") //使用默认存储策略
    .consistency(InfluxDB.ConsistencyLevel.ALL)//强一致性级别,方便幂等
    .build();

保存策略(Retention Policies)

influxDB是没有提供直接删除数据记录的方法.而是类似kafka的思路,保存数据直到个过期时间
这个控制就是数据保存策略,主要用于指定数据保留时间

# 查看当前数据库的数据保存策略
show retention policies on "db_name"

# 创建数据保存策略  
# rp_name:策略名
# db_name:具体的数据库名
# 3w:保存3周,3周之前的数据将被删除.可选:h(小时),d(天),w(星期)
# replication 1:副本个数,一般为1
# default:设置为默认策略
create retention policy "rp_name" on "db_name" duration 3w replication 1 default

# 修改数据保存策略
alter retention policy "rp_name" on "db_name" duration 30d default

# 删除数据保存策略
drop retention policy "rp_name"

连续查询

当数据超过保存策略里指定的时间之后就会被删除
这里influxDB提供了一种策略可以有限度的继续保留这些应该过期删除的数据
这种策略就是连续查询,它的意思是可以计算并保留这些数据的统计信息,以便后来可以聚合统计
注意:
这种保留仅仅只是保留统计信息,原始数据已经被删除了.这意味着连续查询的保留,是不可恢复不可修改的

# 查看连续查询
show continuous queries

# 创建连续查询
# cq_name:连续查询名字
# db_name:数据库名字
# sum(count):计算总和
# table_name:当前表名
# new_table_name:存新的数据的表名
# 30m:时间间隔为30分钟
create continous query cq_name on db_name begin select sum(count) into new_table_name from table_name group by time(30m) end

# 删除连续查询
drop continous query cp_name on db_name

用户管理

可以直接在web界面操作

#显示用户
show users
 
#创建用户
create user "username" with password 'password'
 
#创建管理员权限用户
create user "username" with password 'password' with all privileges
 
#删除用户
drop user "username"

常用函数

聚合函数

  • count
    返回一个(field)字段中的非空值的数量
  • DISTINCT
    返回一个字段(field)的唯一值
  • MEAN
    返回一个字段(field)中的值的算术平均值(平均值).字段类型必须是长整型或float64
  • MEDIAN
    从单个字段(field)中的排序值返回中间值(中位数).字段值的类型必须是长整型或float64格式
  • SPREAD
    返回字段的最小值和最大值之间的差值.数据的类型必须是长整型或float64
  • SUM
    返回一个字段中的所有值的和。字段的类型必须是长整型或float64

选择函数

  • TOP
    返回一个字段中最大的N个值
  • BOTTOM
    返回一个字段中最小的N个值
  • FIRST
    返回一个字段中最老的取值
  • LAST
    返回一个字段中最新的取值
  • MAX
    返回一个字段中的最大值
  • MIN
    返回一个字段中的最小值
  • PERCENTILE
    作用:返回排序值排位为N的百分值

变换类函数

  • DERIVATIVE 返回一个字段在一个series中的变化率 InfluxDB会计算按照时间进行排序的字段值之间的差异,并将这些结果转化为单位变化率 其中,单位可以指定,默认为1s
  • DIFFERENCE 返回一个字段中连续的时间值之间的差异
  • ELAPSED 返回一个字段在连续的时间间隔间的差异,间隔单位可选,默认为1纳秒
  • MOVING_AVERAGE 返回一个连续字段值的移动平均值
  • NON_NEGATIVE_DERIVATIVE 返回在一个series中的一个字段中值的变化的非负速率
  • STDDEV 返回一个字段中的值的标准偏差

参考 https://www.linuxdaxue.com/influxdb-study-influxdb-transformations-funcitons.html