数据中心-时序数据库InfluxDB

目录

一、InfluxDB介绍

[1.1 什么是InfluxDB?](#1.1 什么是InfluxDB?)

[1.2 应用场景](#1.2 应用场景)

[1.3 特点](#1.3 特点)

[1.4 版本差异](#1.4 版本差异)

二、数据模型和存储架构

[2.1 相关概念](#2.1 相关概念)

[2.2 存储架构](#2.2 存储架构)

三、InfluxDB基础操作

[3.1 数据库操作](#3.1 数据库操作)

[3.2 数据表操作](#3.2 数据表操作)

显示所有表

新建表

删除表

[3.3 数据保存策略](#3.3 数据保存策略)

查看保存策略

创建保存策略

修改保存策略

删除保存策略

[3.4 数据查询](#3.4 数据查询)

查询全部

条件查询

or查询

模糊查询

排序查询

去重

分组

聚合函数

分页


一、InfluxDB介绍

1.1 什么是InfluxDB?

InfluxDB是 一个开源的时间序列数据库 ,特别为处理和分析带有时间戳的数据而设计。

它由InfluxData公司开发,并使用Go语言编写,目标在提供高性能的数据写入与查询能力。

1.2 应用场景

▪ 物联网**(IoT):**处理来自传感器的大量实时数据,用于环境监测、智能城市、工业自动化等领域.

**▪ 系统监控:**收集和分析服务器、应用程序的性能指标,如CPU使用率、内存占用、网络流量.

**实时分析:**在金融、电商等行业中,用于实时交易分析、市场趋势预测等.

1.3 特点

**▪**高写入性能

专为时序数据的 "写多读少" 场景优化,支持每秒数十万条数据写入(取决于硬件),写入时跳过复杂索引和事务检查,优先保证吞吐量。

**▪**时间优化的存储

采用 TSM(Time-Structured Merge Tree)存储引擎,数据按时间分段存储,查询时可快速定位时间范围,避免全表扫描。

**▪**灵活的数据模型

不依赖固定表结构,支持动态字段扩展,适合数据格式多变的场景(如不同传感器的指标差异)。

**▪**内置数据生命周期管理

通过数据保留策略(Retention Policy, RP) 自动删除过期数据,减少存储成本(如只保留最近 30 天的监控数据)。

**▪**专用查询语言

支持 InfluxQL(类 SQL,易上手)和 Flux(函数式语言,支持复杂数据处理,如跨时间范围聚合、数据转换)。

总的来说;非常适合对实时大量数据进行存储与计算

1.4 版本差异

InfluxDB 有两个主要版本,架构和功能差异较大:

二、数据模型和存储架构

2.1 相关概念

  • Measurement: 主要用来存储具有相似特征或属于同一类别的数据点集合,类似于关系型数据库中的表(table);包含了列Timestamp时间戳,field字段和tag标签

  • Field set: 每组field key和field value的集合,即我们需要的字段,如internale[key] = 76[value], external[key]= 18[value]。不可索引

  • Tag set: 不同的每组tag key和tag value的集合,如device[key]= dev1[value], buiding[key]= b1[value]。可索引

  • **Point:**表里面的一行数据,由时间戳(timestamp)、标签(tag)、字段(field)和组成:

    • 时间戳time:每条数据记录的时间,也是数据库自动生成的主索引,如果时间戳没有指定。那么InfluxDB就使用当前系统的时间戳(纳秒)

    • 字段field:字段包含数据的实际值,可以是各种数据类型(整数、浮点数、字符串、布尔值等);与标签不同,字段在查询时可以进行数学运算。

    • 标签tag:用于索引和过滤数据;通常是字符串类型。

2.2 存储架构

三、InfluxDB基础操作

这里我已经进行安装

bash 复制代码
# 进入InfluxDB的命令行终端
docker exec -it influxdb /bin/bash

# 连接InfluxDB
influx

3.1 数据库操作

连接InfluxDB:

进入InfluxDB的命令行终端,再连接InfluxDB

bash 复制代码
# 进入InfluxDB的命令行终端
docker exec -it influxdb /bin/bash

# 连接InfluxDB
influx

数据库操作:

bash 复制代码
# 显示数据库
show databases

# 创建数据库
create database itheima

# 删除数据库
drop database itheima

# 使用数据库
use itheima

3.2 数据表操作

显示所有表
bash 复制代码
# 显示所有的 measurement
show measurements
新建表
sql 复制代码
insert measurement+","+tag1=value1,tag2=value2 + 空格 + field1=value1,field2=values2

-- 例如:对measurement为tb_user的插入数据;有一个tag索引名为region,值为广东;有三个field分别是age,high,weight 对应的值分别为25、175、130
insert tb_user,region=广东 name="张三",age=25,high=175,weight=130
删除表
bash 复制代码
-- 删除语法
drop measurement 表名

-- 例如:删除名为 tb_user 的measurement
drop measurement tb_user

3.3 数据保存策略

查看保存策略
bash 复制代码
show retention policies on 数据库名称

-- 例如:查看 point_data 数据库的保存策略
show retention policies on point_data
创建保存策略
bash 复制代码
-- 语法
create retention policy 策略名 on 数据库名 duration 保留时长 replication 副本个数 [default]

-- 示例:创建point_data数据库的默认保存策略名字为 my_retention ,保留时长为24小时,副本数1个
create retention policy my_retention on point_data duration 24h replication 1 default

-- 示例:同样的,但是保存时长设置为3天,但是不设置为默认的保存策略的话就不加default
create retention policy my_retention2 on point_data duration 3d replication 1
修改保存策略
bash 复制代码
-- 语法
alter retention policy 策略名 on 数据库名 duration 时长 default(可选)

-- 例如:修改point_data数据库中的my_retention2策略,保留时长为2天,并设置为默认
alter retention policy my_retention2 on point_data duration 2d default
删除保存策略
bash 复制代码
drop retention policy 策略名 on 数据库名

-- 例如:删除point_data数据库中策略名为 my_retention2 的策略
drop retention policy my_retention2 on point_data

--- 删除保存策略如果是默认的;则不会自动的指定一个策略为默认;不过可以修改
alter retention policy autogen on point_data default

3.4 数据查询

查询全部
sql 复制代码
-- 插入数据
insert tb_user,region=广东 name="张三",age=25,high=175,weight=130
insert tb_user,region=湖南 name="李四",age=21,high=177,weight=135
insert tb_user,region=广东 name="王五",age=28,high=178,weight=138

-- 查询数据
select * from tb_user
条件查询
sql 复制代码
-- 查询名字为 李四,年龄为21 的用户
select * from tb_user where "name"='李四' and age=21
or查询
sql 复制代码
-- 查询姓名为张三或李四
select * from tb_user where "name"='张三' or "name"='李四'
模糊查询
sql 复制代码
-- 查询名字中包含王的
select * from tb_user where "name"=~/王/
排序查询
sql 复制代码
-- 只能根据时间排序;根据创建时间降序排序
select * from tb_user order by time desc
去重
sql 复制代码
insert tb_user,region=广西 name="钱六",age=28,high=178,weight=138

-- 对age字段去重查询;注意:只能在distinct 之后接一个字段
select distinct age from tb_user
分组

在InfluxDB中,GROUP BY 语句主要用于根据时间序列数据的标签(tags)进行分组。GROUP BY 仅能用于标签(tag)字段,而不能直接用于字段(field)进行分组。

sql 复制代码
-- 根据region进行分组
select * from tb_user group by region
sql 复制代码
-- 统计所有年龄之和
select sum(age) from tb_user
聚合函数
sql 复制代码
-- 统计一条记录中;每个非空field的总数
select count(*) from tb_user
sql 复制代码
-- 求用户表的广东地区的用户平均年龄
select mean(age) from tb_user where region='广东'
sql 复制代码
-- 查询身高中间值
select median(high) from tb_user

-- 插入数据后再查看
insert tb_user,region=湖南 name="赵六",age=28,high=171,weight=110
sql 复制代码
-- 返回最大与最小年龄之间的差值
select spread(age) from tb_user
分页
sql 复制代码
-- 查询第1页,每页3条数据
select * from tb_user limit 3 offset 0

-- 查询第2页,每页3条数据
select * from tb_user limit 3 offset 3


相关推荐
Elastic 中国社区官方博客11 小时前
Elasticsearch:Workflows 介绍 - 9.3
大数据·数据库·人工智能·elasticsearch·ai·全文检索
仍然.11 小时前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐11 小时前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_999911 小时前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学12 小时前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.12 小时前
Mysql
数据库·mysql
全栈前端老曹12 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG86312 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道12 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议
逍遥德13 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring