当前位置: 首页 > 工具软件 > InfluxDB > 使用案例 >

influxDB1.x

董翰池
2023-12-01

InfluxDB(1.x)简介

InfluxDB用Go语言编写的一个开源分布式时序、事件和指标数据库,用于处理海量写入与负载查询。InfluxDB旨在用作涉及大量时间戳数据的任何用例(包括DevOps监控,应用程序指标,物联网传感器数据和实时分析)的后端存储。

InfluxDB特点

  1. 为时间序列数据专门编写的自定义高性能数据存储。 TSM引擎具有高性能的写入和数据压缩
  2. Golang编写,没有其它的依赖
  3. 提供简单、高性能的写入、查询 http api
  4. 支持类sql查询语句
  5. tags可以索引序列化,提供快速有效的查询
  6. 数据保存策略(Retention policies)自动处理过期数据
  7. 连续查询(Continuous queries)自动聚合,提高查询效率

与传统数据库中的名词做比较

influxdb传统数据库
database数据库
measurement数据库中的表
points表里面的一行数据

InfluxDB中独有的一些念概

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

Point属性传统数据库中的概念
time每个数据记录时间,是数据库中的主索引(会自动生成)
fields字段
tags索引字段

InfluxDB用户管理

# 显示用户
SHOW USERS
# 创建用户
CREATE USER "username" WITH PASSWORD 'password'
# 创建管理员权限的用户
CREATE USER "username" WITH PASSWORD 'password' WITH ALL PRIVILEGES

# 删除用户
DROP USER "username"

InfluxDBB基本操作

基本操作

#创建数据库
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"

通过命令行

use testDB

#tag必须是字符串类型所以中文可以不加引号 field如果是中文必须带引号
insert weather,altitude=1000,area=北 temperature=11,humidity=-4

通过Http接口

curl -curl i -XPOST 'http://localhost:8086/write?db=testDB' --data-binary 'weather,altitude=1000,area=北 temperature=11,humidity=-4'

通过命令行

use testDB
# 查询最新的三条数据
SELECT * FROM weather ORDER BY time DESC LIMIT 3
#时间格式
precision rfc3339
#注意时间与中国时间差8小时 windows环境需要安装golang环境后在查询语句后加TZ('Asia/Shanghai') 或者在代码中手动-8小时
select * from weather where time >='2022-02-25T10:00:00Z'

通过Http接口

curl -G 'http://localhost:8086/query?pretty=true' --data-urlencode "db=testDB" --data-urlencode "q=SELECT * FROM weather ORDER BY time DESC LIMIT 3"

where中的条件,只允许根据时间来进行删除操作

delete from weather where time=1645775285847244500

在InfluxDB中并没有提供数据的修改方法。

数据保存策略(Retention Policies)

InfluxDB没有提供直接删除Points的方法,但是它提供了Retention Policies。
主要用于指定数据的保留时间:当数据超过了指定的时间之后,就会被删除

查看当前数据库的Retention Policies

SHOW RETENTION POLICIES ON "test"

创建新的Retention Policies

CREATE RETENTION POLICY "test_rp" ON "test" 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

ALTER RETENTION POLICY "test_rp" ON test" DURATION 3w DEFAULT

删除Retention Policies

DROP RETENTION POLICY "rp_name" ON "db_name"

DROP RETENTION POLICY "test_rp" ON "test"

连续查询(Continuous Queries)

当数据超过保存策略里指定的时间之后,就会被删除。
如果我们不想完全删除掉,比如做一个数据统计采样:把原先每秒的数据,存为每小时的数据,让数据占用的空间大大减少(以降低精度为代价)。

这就需要InfluxDB提供的:连续查询(Continuous Queries)

当前数据库的Continuous Queries

SHOW CONTINUOUS QUERIES

创建新的Continuous Queries

CREATE CONTINUOUS QUERY cq_30s ON test BEGIN SELECT mean(temperature) INTO weather30s FROM weather GROUP BY time(30s) END

cq_30s:连续查询的名字
test:具体的数据库名
mean(temperature): 算平均温度
weather: 当前表名
weather30s: 存新数据的表名
30s:时间间隔为30秒

删除Continuous Queries

DROP CONTINUOUS QUERY <cq_name> ON <database_name>

DROP CONTINUOUS QUERY cq_30s ON test

InfluxDB常用函数

  1. COUNT() 函数:返回一个field中的非空值数量
  2. MEAN() 函数:求平均值,字段类型必须是整型或浮点型
  3. SPREAD()函数:返回字段的最小值和最大值的差值,字段类型必须是整型或浮点型
  4. SUM()函数:求和,字段类型必须是整型或浮点型
  5. TOP()函数:返回字段中最大的前N个值,字段必须是整型或浮点型
  6. BOTTOM()函数:返回字段中最小的N个值,使用方法同上
  7. MAX()函数:返回字段中最大的值,该字段类型必须是长整型,float64,或布尔类型
  8. MIN()函数:返回一个字段中的最小值。该字段类型必须是长整型,float64,或布尔类型。
    用法同MAX()

Springboot集成InfluxDB

见代码

 类似资料: