当前位置: 首页 > news >正文

数据中心-时序数据库InfluxDB

目录

一、InfluxDB介绍

1.1 什么是InfluxDB?

1.2 应用场景

1.3 特点

1.4 版本差异

二、数据模型和存储架构

2.1 相关概念

2.2 存储架构

三、InfluxDB基础操作

3.1 数据库操作

3.2 数据表操作

显示所有表

新建表

删除表

3.3 数据保存策略

查看保存策略

创建保存策略

修改保存策略

 删除保存策略

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基础操作

这里我已经进行安装

# 进入InfluxDB的命令行终端
docker exec -it influxdb /bin/bash# 连接InfluxDB
influx

3.1 数据库操作

连接InfluxDB:

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

# 进入InfluxDB的命令行终端
docker exec -it influxdb /bin/bash# 连接InfluxDB
influx

数据库操作:

# 显示数据库
show databases# 创建数据库
create database itheima# 删除数据库
drop database itheima# 使用数据库
use itheima

3.2 数据表操作

显示所有表
# 显示所有的 measurement
show measurements

 

新建表
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

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

3.3 数据保存策略

查看保存策略
show retention policies on 数据库名称-- 例如:查看 point_data 数据库的保存策略
show retention policies on point_data

创建保存策略
-- 语法
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

修改保存策略
-- 语法
alter retention policy 策略名 on 数据库名 duration 时长 default(可选)-- 例如:修改point_data数据库中的my_retention2策略,保留时长为2天,并设置为默认
alter retention policy my_retention2 on point_data duration 2d default
 删除保存策略
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 数据查询

查询全部
-- 插入数据
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

条件查询
-- 查询名字为 李四,年龄为21 的用户
select * from tb_user where "name"='李四' and age=21

or查询
-- 查询姓名为张三或李四
select * from tb_user where "name"='张三' or "name"='李四'

模糊查询
-- 查询名字中包含王的
select * from tb_user where "name"=~/王/

排序查询 
-- 只能根据时间排序;根据创建时间降序排序
select * from tb_user order by time desc

去重
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)进行分组。

-- 根据region进行分组
select * from tb_user group by region
-- 统计所有年龄之和
select sum(age) from tb_user

聚合函数
-- 统计一条记录中;每个非空field的总数
select count(*) from tb_user

-- 求用户表的广东地区的用户平均年龄
select mean(age) from tb_user where region='广东'

-- 查询身高中间值
select median(high) from tb_user-- 插入数据后再查看
insert tb_user,region=湖南 name="赵六",age=28,high=171,weight=110

-- 返回最大与最小年龄之间的差值
select spread(age) from tb_user

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



http://www.lryc.cn/news/600386.html

相关文章:

  • 【影刀RPA_初级课程_我的第一个机器人】
  • jxORM--查询数据
  • 前端模块化开发实战指南
  • 【机器学习深度学习】模型私有化部署与微调训练:赋能特定问题处理能力
  • Oracle 11g RAC数据库实例重启的两种方式
  • JavaScript:现代Web开发的核心动力
  • 基于深度学习的胸部 X 光图像肺炎分类系统(六)
  • 技术赋能与营销创新:开源链动2+1模式AI智能名片S2B2C商城小程序的流量转化路径研究
  • SpringBoot连接Sftp服务器实现文件上传/下载(亲测可用)
  • Linux选择题
  • 《从零开始学 JSSIP:JavaScript 实时通信开发实战》
  • Jmeter的元件使用介绍:(五)定时器详解
  • Baumer工业相机堡盟工业相机如何通过YoloV8深度学习模型实现轮船检测识别(C#代码UI界面版)
  • PostGIS面试题及详细答案120道之 (011-020 )
  • 零基础学习性能测试第三章:jmeter构建性能业务场景
  • 论文阅读-RaftStereo
  • 【硬件-笔试面试题】硬件/电子工程师,笔试面试题-27,(知识点:信号完整性,信号反射,串扰,时延,抖动,衰减)
  • Qt 延时处理方法介绍
  • day 36打卡
  • 去中心化时代的通信革命:briefing与cpolar技术融合带来的安全范式革新
  • 明辨 JS 中 prototype 与 __proto__
  • 秋招Day19 - 分布式 - 限流
  • C++11 右值引用 Lambda 表达式
  • 基于深度学习的食管癌右喉返神经旁淋巴结预测系统研究
  • CSS3知识补充
  • git笔记(七)使用代理
  • 从一个“诡异“的C++程序理解状态机、防抖与系统交互
  • 外带服务的温度:藏在包装里的“生活共情力”
  • 从零开始的云计算生活——第三十六天,山雨欲来,Ansible入门
  • Java 注解(Annotation)详解:从基础到实战,彻底掌握元数据驱动开发