InfluxDB快速掌握

news2024/12/28 3:16:55

文章目录

  • 1、InfluxDB简介
  • 2、InfluxDB数据结构
  • 3、InfluxDB存储架构
  • 4、InfluxDB基本操作
    • 1_数据库操作
    • 2_数据表操作
    • 3_数据保存策略
    • 4_数据查询操作
  • 5、存储引擎
  • 6、总结

1、InfluxDB简介

时序数据库是近几年一个特殊的概念,与传统的Mysql关系型数据库相比,它的最大的特点是:数据按照时间顺序存储。举例来说,日志数据,是以时间顺序存储的,所以用时序数据库存储是一种很好的选择。使用Mysql在存储的过程中,不对这种基于时间的数据进行优化的,所以在查询、插入上有一些瓶颈。而InfluxDB则会进行优化,并且具备有很多特点,如下:

  • 专为时间序列数据编写的自定义高性能数据存储。 TSM引擎允许高摄取速度和数据压缩
  • 完全用 Go 语言编写。 它编译成单个二进制文件,没有外部依赖项
  • 简单,高性能的写入和查询HTTP API
  • 专为类似SQL的查询语言量身定制,可轻松查询聚合数据
  • 标签允许对系列进行索引以实现快速有效的查询
  • 保留策略有效地自动使过时数据过期
  • 连续查询自动计算聚合数据,以提高频繁查询的效率

常见的时间序列数据库除了InfluxDB之外还有:opentsdb、timeScaladb、Druid等。

那么数据是如何在InfluxDB中进行存储的呢?下面我们来看下InfluxDB的数据模型:

在这里插入图片描述

2、InfluxDB数据结构

以下是 InfluxDB 和传统关系型数据库(如 MySQL、PostgreSQL)的概念对比表格:

InfluxDB 概念传统关系型数据库概念描述
databasedatabase数据库(同)
MeasurementTableInfluxDB 中的数据组织单元,是一个容器,类似于关系型数据库中的表。包含了列time,field和tag。
FieldColumnInfluxDB 中的数据字段,存储时间序列的具体数据,类似于关系数据库中的列。
TimestampTimestamp每个数据点都有一个时间戳,表示数据的存储时间,关系数据库也可以有时间戳字段。
TagIndex/MetadataInfluxDB 中的元数据,用于索引和查询,类似于关系数据库中的索引列。
PointRow表里面的一行数据,由时间戳(time)、数据(field)和标签(tags)组成
SeriesRows在 InfluxDB 中,Series 是具有共同retention policy,measurement和tag set的时间序列集合。
Continuous QueriesViewInfluxDB 提供的持续查询功能,可以定期计算数据并存储结果,类似于关系型数据库中的视图。
Retention PolicyData RetentionInfluxDB 的数据保留策略,控制数据的存储时间,关系数据库通常没有这种自动过期机制。
Line ProtocolSQLInfluxDB 使用行协议(Line Protocol)写入数据,格式独特;关系型数据库使用 SQL 来管理数据。
Schema-lessSchema-basedInfluxDB 是无模式的,数据可以随时添加新字段,而关系型数据库有严格的模式定义。
Time Series DataGeneral DataInfluxDB 专门为时间序列数据设计,优化高频率写入和查询,而关系数据库更通用,可以存储多种类型的数据。

这个表格提供了 InfluxDB 和传统关系型数据库在概念上的主要差异,可以帮助你理解两者的结构和用途。

point属性含义
time数据记录的时间,主索引,默认自动生成,相当于每行数据都具备的列
tags相当于有索引的列。tag中存储的值的类型总是字符串类型
fieldsvalue值,没有索引的列。field中存储的值的类型:字符串、浮点数、整数、布尔型。一个field value总是和一个timestamp相关联

Field sets: 每组field key和field value的集合,即我们需要的字段,如internale[key]= 76[value], external[key]= 18[value]。不可索引
Tag sets: 不同的每组tag key和tag value的集合,如device[key]= dev1[value], buiding[key]=b1[value]。可索引

在 InfluxDB 表结构中,field 和 tag 是用于存储数据的两种不同类型。

Field(字段)Tag(标签)
Field 用于存储实际的数值数据,例如温度、湿度等测量值。Tag 用于存储元数据信息和标识数据的键值对,例如传感器名称、地理位置等。
Field 是可变的,可以随时间的推移而改变其值。Tag 是不可变的,一旦设置就不能更改。
Field 的值可以进行聚合计算,例如求平均值或总和等。Tag 的值不能进行聚合计算,只能用于过滤和分组查询。
Field 不适合用于过滤和索引数据,因为它没有元数据信息。Tag 是 InfluxDB 中的主要索引机制之一,可以提高查询性能和数据过滤效率。

3、InfluxDB存储架构

在 InfluxDB 中可以创建多个数据库,不同数据库中的数据文件是隔离存放的,存放在磁盘上的不同目录,每个database 可以有多个RP(retention policy数据保存策略),但是只有一个默认策略。策略下按照时间段分为多个ShardGroup,每个ShardGroup存储一个时间段的数据。每个shardgroup下分多个shard来存储数据。如下图所示:

  • retention policy: 存储策略,用于设置数据保留的时间,每个数据库刚开始会自动创建一个默认的存储策略 autogen,数据保留时间为永久,之后用户可以自己设置,例如保留最近2小时的数据。插入和查询数据时如果不指定存储策略,则使用默认存储策略,且默认存储策略可以修改。InfluxDB 会定期清除过期的数据。
  • ShardGroup: 是一个逻辑概念,按时间区间划分,是InfluxDB数据过期执行的最小单元。
  • Shard: 在 InfluxDB 中是一个比较重要的概念,它和 retention policy 相关联。每一个存储策略下会存在许多 shard,每一个 shard 存储一个指定时间段内的数据,并且不重复,例如 7点-8点 的数据落入 shard0 中,8点-9点的数据则落入 shard1 中。每一个 shard 都对应一个底层的 tsm存储引擎.。

4、InfluxDB基本操作

InfluxDB最好基于docker容器进行安装,这里就略过了。

1_数据库操作

首先我们进入虚拟机中的Influx的镜像

docker exec -it influxdb /bin/bash #进入influxdb虚拟机中

链接InfluxDB

influx  #进入influx操作界面

在这里插入图片描述

显示数据库

show databases #显示数据库

在这里插入图片描述

创建数据库

create database restkeeper #创建数据库

在这里插入图片描述

删除数据库

drop database restkeeper  #删除数据库

在这里插入图片描述

使用指定数据库

use 库名称

在这里插入图片描述

2_数据表操作

显示所有的表

在InfluxDB当中,并没有表(table)这个概念,取而代之的是MEASUREMENTS,MEASUREMENTS的功能与传统数据库中的表一致,因此我们也可以将MEASUREMENTS称为InfluxDB中的表。

SHOW MEASUREMENTS

在这里插入图片描述

新建表

InfluxDB中没有显式的新建表的语句,只能通过insert数据的方式来建立新表。其中 disk_free 就是表名,hostname是索引(tag),value=xx是记录值(field),记录值可以有多个,系统自带追加时间戳

insert customer,customer_name=张三,identity_card=342401198811180000 age=37,earning=5000

insert customer,customer_name=李四,identity_card=342401198811180001 age=37,earning=4500

insert customer,customer_name=王五,identity_card=342401198411180002 age=41,earning=6000

insert customer,customer_name=黄六,identity_card=342401198311180002 age=42,earning=7000

上面,我们新增一条数据,measurement为customer, tag为customer_name,identity_card, field为age,earning。

我们简单小结一下插入的语句写法:

  1. 基本格式:insert + measurement + "," + tag=value,tag=value +空格+ field=value,field=value
  2. tag与tag之间用逗号分隔;field与field之间用逗号分隔;
  3. tag与field之间用空格分隔;
  4. tag都是string类型,不需要引号将value包裹;
  5. field如果是string类型,需要加引号;

在这里插入图片描述

在 InfluxDB 行协议中,一条数据和另一条数据之间使用换行符分隔, 所以一行就是一条数据。另外,在时序数据库领域,一行数据一行数据由下面 4 种元素构成。

在这里插入图片描述
删除表

drop measurement customer

在这里插入图片描述

3_数据保存策略

InfluxDB是没有提供直接删除数据记录的方法,但是提供数据保存策略主要用于指定数据保留时间,超过指定时间,就删除这部分数据。

查看保存策略

show retention policies on "db_name"

show retention policies on restkeeper

注意:其中test为数据库名称

在这里插入图片描述

创建保存策略

create retention policy "rp_name" on "db_name" duration 3w replication 1 default

create retention policy rp_restkeeper on restkeeper duration 1h replication 1 default

rp_name:策略名; db_name:具体的数据库名;
3w:保存3周,3周之前的数据将被删除,influxdb具有各种事件参数,比如:h(小时),d(天),w(星期);
replication 1:副本个数,一般为1就可以了; default:设置为默认策略

在这里插入图片描述

修改保存策略

alter retention policy "rp_name" on "db_name" duration 30d default


alter retention policy rp_restkeeper on restkeeper duration 2h default

在这里插入图片描述

删除保存策略

drop retention policy "rp_name" on "db_name"


drop retention policy rp_restkeeper on restkeeper

在这里插入图片描述

注意:其中test为数据库名称

4_数据查询操作

InfluxDB基本查询操作和MySQL的基本查询是类似,综合使用如下所示:

#----综合使用
书写顺序
select distinct * from '表名' where '限制条件'  group by '分组依据' having '过滤条件' order by  limit '展示条数'
执行顺序
from       -- 查询
where      -- 限制条件 使用单引号,否则无数据返回或报错
group by   -- 分组 只能对tags和time进行分组
having     -- 过滤条件
order by   -- 排序 只能对time进行排序
limit      -- 展示条数
distinct   -- 去重
select     -- 查询的结果

查询数据表customer的所有记录

select * from customer

在这里插入图片描述

条件查询

select * from customer where  customer_name ='张三'

在这里插入图片描述

排序查询

select * from customer order by time desc

在这里插入图片描述

去重 (distinct)

select distinct age from customer

在这里插入图片描述

注意:distinct 函数只能有一个值

group by

为了分组我们先插入一条数据

insert customer,customer_name=张七,identity_card=342401198311180002 age=42,earning=7000

在这里插入图片描述

select * from customer group by identity_card

在这里插入图片描述

聚合函数

count()函数:返回一个(field)字段中的非空值的数量。

select count(*) from customer

在这里插入图片描述

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

select mean(age) from customer

在这里插入图片描述

median()函数:从单个字段(field)中的排序值返回中间值(中位数)。中值是在一组数值中居于中间的数值。字段值的类型必须是长整型或float64格式。

select median(age) from customer

在这里插入图片描述

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

select spread(age) from customer

在这里插入图片描述

sum()函数:返回一个字段中的所有值的和。字段的类型必须是长整型或float64。

select sum(age) from customer

在这里插入图片描述

integral()函数:用于计算时间序列数据在制定时间范围内的积分值,积分值可以帮助我们更好的理解时间序列数据的趋势和变化

select integral(age) from customer

limit限制条数

select * from customer limit 1 offset 2

在这里插入图片描述

or查询

influxDB中没有in的操作,但是有or。对于习惯了mysql的in来说,用or就需要在代码中循环了。

select * from customer where customer_name='张三' or customer_name='李四'

在这里插入图片描述

模糊查询

模糊查询支持正则表达式方式,例如

  • =~/给定字段/ 包含指定字段的
  • =~/^给定字段/ 以指定字段开始的
  • =~/给定字段$/ 以指定字段结尾的
select * from customer where customer_name=~//

在这里插入图片描述

5、存储引擎

InfluxDB 采用自研的TSM (Time-Structured Merge Tree) 作为存储引擎, 其核心思想是通过牺牲掉一些功能来对性能达到极致优化,其官方文档上有项目存储引擎经历了从LevelDB到BlotDB,再到选择自研TSM的过程,整个选择转变的思考。

TSM存储引擎将多个组件结合在一起,并提供用于存储和查询数据的外部接口。 它由许多组件组成,每个组件都起着特定的作用:

在这里插入图片描述

  • WAL —— WAL是一种写优化的存储格式,允许写入持久化,但不容易查询。 对WAL的写入就是append到固定大小的段中。
  • Cache —— Cache是存储在WAL中的数据的内存中的表示。 它在运行时可以被查询,并与TSM文件中存储的数据进行合并。
  • TSM Files —— 单个 tsm file 大小最大为 2GB,用于存放数据。TSM file 使用了自己设计的格式,对查询性能以及压缩方面进行了很多优化。
  • Compactor —— Compactor负责将不够优化的Cache和TSM数据转换为读取更为优化的格式。 它通过压缩,去除已经删除的数据,优化索引并将较小的文件组合成较大的文件来实现。

存储目录

influxdb的数据存储有三个目录,分别是metawaldata

  • meta 用于存储数据库的一些元数据,meta 目录下有一个 meta.db 文件;
  • wal 目录存放预写日志文件,以 .wal 结尾;
  • data 目录存放实际存储的数据文件,以 .tsm 结尾。

6、总结

另外本篇皆是基于V1版本的InfluxDB,V2还会有一些差别。

主要差别1.x2.x
存储引擎使用自研的 Time-Structured Merge Tree (TSM) 存储引擎仍然使用 TSM 作为存储引擎,但优化了写入性能和数据压缩。
查询语言InfluxQL,这是一种 SQL 类的查询语言。引入了 Flux,这是一种功能更强大的查询语言,支持更复杂的数据转换和分析,尤其适合时间序列数据的处理。
数据存储使用 measurement、tags 和 fields 的数据模型保持了相似的数据模型,但在功能上更加强大,
支持更复杂的时间序列处理。
新增了 B u c k e t Bucket Bucket的概念,移除了database 和 RP。
一个存储桶(bucket)可以包含多个measurement。
B u c k e t Bucket Bucket是InfluxDB基本存储单元,用于组织和存储时间序列。
是数据的存储容器,区分和隔离不同类型或来源的数据
Schema 支持在设计上是无模式的允许更灵活的数据模型,添加了在元数据中支持 Schema 的功能
API 变更提供了 REST API 和一些其他功能引入了统一的 API,包括写入、查询、管理和认证等,支持更现代化的 API 设计。
客户端库提供了多个语言的客户端库继续支持多种语言的客户端库,并在功能上做了增强,以支持新的 Flux 查询语言。
身份验证和授权具有基本的用户管理和身份验证(user,password)引入更强大的身份验证机制,改为使用秘钥、令牌身份验证方式。
增加了组织 O r g a n i z a t i o n Organization Organization和原则的概念,用于管理访问权限。
用户界面no提供了新的 Web UI 界面,用户体验更佳,支持直观的数据可视化和管理功能。
连续查询 vs Task使用连续查询来处理定期计算通过任务(Tasks)和 Flux 语言实现更高级的数据计算和处理。
集群管理数据复制以提高可靠性和容错能力
手动介入进行故障转移和节点替换‌
InfluxDB 2.x版本简化了集群管理,支持自动故障转移。
服务采用单一服务架构,所有功能(写入、查询、管理)都在一个进程中运行。具有更好的微服务架构,支持多种组件,如 InfluxDB、Telegraf、Chronograf 和 Kapacitor 等,更可扩展和可维护。
文档InfluxDB 1.x 文档InfluxDB 2.x 文档

Influx官网上有更加详细的说明,比如:官方文档、自研TSM存储引擎的发展过程和选择转变的思考等。

有关使用springboot封装InfluxDB持久层点击这里。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2211315.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法:560.和为k的子数组

题目 链接:leetcode链接 思路分析&#xff08;前缀和&#xff09; 注意&#xff1a;我们前面讲过滑动窗口可以处理子数组、子串等问题&#xff0c; 但是在这道题目里面注意数据范围 -1000 < nums[i] < 1000 nums[i]可正可负&#xff0c;区间的和没有单调性&#xff0c;使…

Python案例 |地图绘制及分级着色

1、分级着色地图 分级着色地图常用于可视化地理数据&#xff0c;比如人口密度、经济数据、气候变化等。其原理是使用颜色或阴影的渐变来表示不同区域(如国家、省份、城市等)中的数据差异。例如&#xff0c;地图上的每个区域根据其代表的数值被着色&#xff0c;通常数值越大&am…

React Leaflet + React Pixi:双倍的快乐,我全都要

一篇实用性的文章&#xff0c;记录一下最近在自娱自乐使用 Leaflet 和 PixiJS 的过程中整的一个有意思的活&#xff0c;帮助我们使用 React 声明式的语法在 Leaflet 的图层上使用 PixiJS 绘图。 如果你对这些库和它们的用途都已有所了解&#xff0c;只想直接看代码的话&#xf…

今日指数项目day8实战权限管理功能(下)

3.4 权限添加按钮 1&#xff09;原型效果 2&#xff09;接口说明 功能描述&#xff1a; 权限添加按钮 服务路径&#xff1a; /api/permission 服务方法&#xff1a;Post请求参数格式: {"type":"1", //菜单等级 0 顶级目录 1.目录 2 菜单 3 按钮"t…

牛筋面,一口就爱上的神仙美食

宝子们&#x1f44b;&#xff0c;今天我一定要给大家种草一款超级好吃的美食 —— 食家巷牛筋面&#x1f60b;。&#x1f380;牛筋面真的是一种神奇的存在✨。它的口感 Q 弹有嚼劲&#xff0c;就像在你的嘴巴里跳舞一样&#x1f483;。每一根面条都裹满了浓郁的酱汁&#xff0c…

原生mybatis框架引入mybatisplus,调用接口时找不到原生Mapper自带的默认方法

1.yaml配置文件和Mapper注解基本上可以不用关注&#xff0c;因为mybatis能用就证明这俩多半是没有问题的 2.再看看是不是映射出了问题&#xff0c;像Namespace的空间包名和Mapper没有对上之类的 这个框架的问题是出在配置mybatis的config文件当中&#xff0c;原本的config文件用…

Unity 从零开始搭建一套简单易用的UGUI小框架 扩展与优化篇(完结)

一个通用的UGUI小框架就算是写完了&#xff0c;下面是一步步的思考与优化过程 Unity 从零开始搭建一套简单易用的UGUI小框架 基础分析篇-CSDN博客 Unity 从零开始搭建一套简单易用的UGUI小框架 功能撰写与优化篇-CSDN博客 从使用者的角度来整理一下可能会发出的疑问 0. Panel…

【微服务】springboot远程docker进行debug调试使用详解

目录 一、前言 二、线上问题常用解决方案 2.1 微服务线上运行中常见的问题 2.2 微服务线上问题解决方案 2.3 远程debug概述 2.3.1 远程debug原理 2.3.2 远程debug优势 三、实验环境准备 3.1 搭建springboot工程 3.1.1 工程结构 3.1.2 引入基础依赖 3.1.3 添加配置文…

YOLO11改进 | 注意力机制| 对小目标友好的BiFormer【CVPR2023】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 本文介绍了一种新颖的动态稀疏注意力机制…

C++,STL 029(24.10.13)

内容 一道练习题。 &#xff08;涉及string&#xff0c;vector&#xff0c;deque&#xff0c;sort&#xff09; 题目&#xff08;大致&#xff09; 有五名选手ABCDE&#xff0c;10个评委分别对每一个选手打分&#xff0c;去除最高分和最低分&#xff0c;取平均分。 思路&…

bat脚本banenr

飞出个未来班得 echo off echo .-. echo ( ) echo - echo J L echo ^| ^| echo J L echo ^| ^| echo J L echo …

Node.js概述

1. Node.js简介 Node.js是一个基于Chrome V8引擎的JavaScript运行环境。 地址&#xff1a;Node.js 中文网 1.1 Node.js中的JavaScript运行环境 &#xff08;1&#xff09;浏览器是JavaScript的前端运行环境 &#xff08;2&#xff09;Node.js是JavaScript的后端运行环境 …

vue3之插件

插件plugins是一种能为vue添加全局功能的代码,官网连接&#xff1a;https://cn.vuejs.org/guide/reusability/plugins.html 项目的src文件夹下新建plugins文件夹 新建i18n.js文件 插件是一个拥有install方法的对象 export default {install: (app, options)>{app.config.…

Linux中用java命令运行class文件提示“错误:找不到或无法加载主类”

1.问题&#xff1a; 很多时候&#xff0c;我们需要在Linux终端编译并运行普通Java程序&#xff0c;但是会遇到以下问题&#xff1a; 错误&#xff1a;找不到或无法加载主类” 2.问题原因及解决办法 其实原因很简单&#xff0c;可能由两方面造成。 原因一 java在运行.class文…

进制的介绍

一、进制介绍 对于整数&#xff0c;有四种表示方式&#xff1a;二进制&#xff1a;0,1 &#xff0c;满 2 进 1.以 0b 或 0B 开头。十进制&#xff1a;0-9 &#xff0c;满 10 进 1。八进制&#xff1a;0-7 &#xff0c;满 8 进 1. 以数字 0 开头表示。十六进制&#xff1a;0-9 …

损失函数篇 | YOLOv8更换损失函数之SlideLoss | 解决简单样本和困难样本之间的不平衡问题

前言:Hello大家好,我是小哥谈。SlideLoss是一种新颖的损失函数,可以有效地解决YOLO算法在处理小目标和密集目标时的问题。本文所做出的改进是在YOLOv8算法中引入SlideLoss损失函数。🌈 目录 🚀1.基础概念 🚀2.更换方法 🍀🍀步骤1:loss.py文件修改 🍀�…

C#源码安装ZedGraph曲线显示组件

在软件开发里,数据的显示,已经是软件开发的大头。 如果让数据更加漂亮地、智能地显示,就是软件的核心价值了。 因为不管数据千万条,关键在于用户看到图。因为一个图表,就可以表示整个数据的趋势, 或者整个数据的走向,数据频度和密码。所以图表显示是软件的核心功能,比如…

25.1 降低采集资源消耗的收益和无用监控指标的判定依据

本节重点介绍 : 降低采集资源消耗的收益哪些是无用指标&#xff0c;什么判定依据 通过 grafana的 mysql 表获取所有的 查询表达式expr通过 获取所有的prometheus rule文件获取所有的 告警表达式expr通过 获取所有的prometheus 采集器接口 获取所有的采集metrics计算可得到现在…

SpringBoot——静态资源访问的四种方式

1.默认的静态资源目录 /static /public /resources /META-INF/resources 动态资源目录&#xff1a;/templates 2.resources静态资源目录图片存放 3. 静态资源访问 3.1.通过路径访问静态资源 http://localhost:8080/a.jpg http://localhost:8080/b.jpg …

《深度学习》OpenCV 物体跟踪 原理及案例解析

目录 一、物体跟踪 1、什么是物体跟踪 2、步骤 1&#xff09;选择跟踪算法 2&#xff09;初始化跟踪器 3&#xff09;在每个视频帧上执行跟踪 4&#xff09;可选的重新初始化 3、原理 二、案例实现 1、完整代码 1&#xff09;使用方式 2&#xff09;运行结果 2、关…