Influxdb数据库(centos7)

news2024/11/24 13:07:36

Influxdb数据库

1、简介与使用场景

简介

InfluxDB是一个由InfluxData开发的开源时序型数据库,专注于海量时序数据的高性能读、高性能写、高效存储与实时分析等,在DB-Engines Ranking时序型数据库排行榜上排名第一:image-20230820001520158 InfluxDB广泛应用于DevOps监控、IoT监控、实时分析等场景。除了具有成本优势的高性能读、高性能写、高存储率,InfluxDB还具有如下特点:

  1. 无系统环境依赖,部署方便。
  2. 无结构化(SchemaLess)的数据模型,灵活强大。
  3. 原生HTTP管理接口,免插件配置和免第三方依赖。
  4. 强大的类SQL查询语句的操作接口,学习成本低,上手快。
  5. 丰富的权限管理功能,精细到“表”级别。
  6. 丰富的时效管理功能,自动删除过期数据,自定义删除指标数据。
  7. 低成本存储,采样时序数据,压缩存储。
  8. 丰富的聚合函数,支持AVG、SUM、MAX、MIN等聚合函数。

使用场景

时序数据以时间作为主要的查询纬度,通常会将连续的多个时序数据绘制成线,制作基于时间的多纬度报表,用于揭示数据背后的趋势、规律、异常,进行实时在线预测和预警,时序数据普遍存在于IT基础设施、运维监控系统和物联网中。如:监控数据统计。每毫秒记录一下电脑内存的使用情况,然后就可以根据统计的数据,利用图形化界面(InfluxDB V1一般配合Grafana)制作内存使用情况的折线图;可以理解为按时间记录一些数据(常用的监控数据、埋点统计数据等),然后制作图表做统计。

2、安装

2.1、传统安装

  1. 下载Linux的安装包:https://dl.influxdata.com/influxdb/releases/influxdb-1.8.0_linux_amd64.tar.gz,或者直接执行
wget https://dl.influxdata.com/influxdb/releases/influxdb-1.8.0_linux_amd64.tar.gz
  1. 推送到Linux系统上

  2. 解压缩

tar -zxf influxdb-1.8.0_linux_amd64.tar.gz 
  1. 查看目录结构
[root@bogon temp]# cd influxdb-1.8.0-1/
[root@bogon influxdb-1.8.0-1]# ll
drwxr-xr-x. 4 root root 41 412 2020 etc
drwxr-xr-x. 5 root root 41 412 2020 usr
drwxr-xr-x. 4 root root 28 412 2020 var
  • etc 主要用来存储 influxdb 的系统配置信息
  • usr 主要用来存储 influxdb 的操作相关脚本文件
  • var 主要用来存储 influxdb 的运行日志、产生数据和依赖库文件
  1. 启动influxdb
[root@bogon influxdb-1.8.0-1]# cd usr/bin/
[root@bogon bin]# ls
influx  influxd  influx_inspect  influx_stress  influx_tsm
[root@bogon bin]# ./influxd
  1. 验证启动成功
# 新开一个终端
[root@bogon ~]# cd /root/temp/influxdb-1.8.0-1/usr/bin/
[root@bogon bin]# ./influx -host 127.0.0.1 -port 8086
Connected to http://127.0.0.1:8086 version 1.8.0
InfluxDB shell version: 1.8.0

# 连接格式
influx -database '数据库名' -host '主机名' -port '端口号' -username 用户名 -password 密码

2.2、Docker安装

需要有Docker前置知识

可以看这篇文章:https://blog.csdn.net/qq_56517253/article/details/127281571

  1. 编写docker-compose.yml
# 这里的版本号要对应自己的docker版本
version: "3"

volumes:
  influxdb:
  
services:
  influxdb: 
    image: influxdb:1.7.8
    ports: 
        - '8086:8086'
    volumes:
      - influxdb:/root/influxdb/data
      #- $PWD/influxdb.conf:/root/influxdb/influxdb.conf
    environment:
      - INFLUXDB_ADMIN_USER=root
      - INFLUXDB_ADMIN_PASSWORD=root
      - INFLUXDB_DB=history
    restart: always
  1. 执行yml
# 本系统为centos7
# 1.更新依赖
[root@bogon influxdb]# yum install -y epel-release

# 2.安装docker-compose
[root@bogon influxdb]# yum install docker-compose

# 3.执行文件
[root@bogon influxdb]# docker-compose up
  1. 验证是否启动成功
[root@bogon bin]# docker ps
CONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                                       NAMES
c1f8b1988283   influxdb:1.7.8   "/entrypoint.sh infl…"   50 seconds ago   Up 48 seconds   0.0.0.0:8086->8086/tcp, :::8086->8086/tcp   influxdb_influxdb_1

[root@bogon bin]# docker exec -it influxdb_influxdb_1 bash
root@c1f8b1988283:/# influx
Connected to http://localhost:8086 version 1.7.8
InfluxDB shell version: 1.7.8
>

3、客户端工具

DBeaver

4、相关概念

概念

  • database:数据库,针对不同应用的数据进行隔离
  • measurement:数据库中的表
  • points:表里的一行数据
  • Influxdb中独有的一些概念:Point由时间戳(time)、数据(field)和标签(tags)组成

库 database

​ 表 measurement

​ 数据 point = time(主键) + field(普通字段、存储数据) + tags(索引:加快查询速度)

​ time:主键,类似PrimaryKey

​ field:不经常查询的数据,可以直接存为 field

​ tags:索引字段

与Mysql对比

概念MysqlInfluxdb
数据库(同)databasedatabase
表(不同)tablemeasurement
列(不同)columntag(带索引,非必须)、field(不带索引)、timestamp(唯一主键)

Point相当于传统数据库里的一行数据,如下表:

Point属性传统数据库中的概念
time(时间戳)每个数据的记录时间,是数据库中的主索引(自动生成)
fields(字段、数据)各种记录值(没有索引的属性):温度、湿度…
tags(标签)各种有索引的属性:地区、海拔…

注意:在influxdb中,字段必须存在。因为字段是没有索引的。如果使用字段作为查询条件,会扫描符合查询条件的所有字段值,性能不及tag。类比一下, fields相当于SQL的没有索引的列。tags是可选的,但是强烈建议你用上它,因为tag是有索引的,tags相当于SQL中的有索引的列。tag value只能是string类型。

类型说明

  • tag类型
    • tag都是string类型
  • field类型
    • 支持四种类型:int、float、string、boolean
类型使用方式实例
float数字id=21
int数字iage=18i
booleantrue/falsebuy=true
string“” | ‘’email=“876606658@qq.com”

5、基本操作

5.1、库 database

# 显示所有库
show databases

# 创建库
create database <name>

# 选中库
user <database-name>

# 删除库
drop database <name>

# 清空当前上下文的库
clear database|db		# 取消当前选中的库

5.2、表 mesaurement

# 显示所有表
show measurements

# 删除表
drop measurement <name>

5.3、数据操作

插入数据

# 基本语法
insert <retention policy> measurement, tagKey=tagValue fieldKey=fieldValue timestamp
	1. insert + measurement + "," + tag=value,tag=value + " " + field=value,field=value
	2. tag与tag之间用逗号隔开,field与field之间用逗号隔开
	3. tag与field之间用空格隔开
	4. tag都是string类型,不需要引号
	5. field如果是string类型,需要用引号

# 举例
> insert user,name=bby,phone=13066586501 age=20i,'email'="876606658@qq.com" 

> show measurements
name: measurements
name
----
user	# 多了user表

注意:Influxdb是不允许手动删除数据的,只能根据保留策略自己删除

查询数据

# 测试数据
insert test,id=1 age=23,name="bby",address="shenyang"
insert test,id=2 age=24,name="zqj",address="changyuan"
insert test,id=3 age=20,name="zwj",address="zhoukou"
insert test,id=4 age=20,name="ctx",address="yanan"
insert test,id=5 age=21,name="zh",address="hanzhong"
insert test,id=6 age=22,name="zxd",address="ningbo"
insert test,id=7 age=22,name="zqx",address="zhengzhou"
insert test,id=8 age=23,name="dyz",address="nanyang"
insert test,id=9 age=24,name="hnb",address="taizhou"
  • 普通查询
# 查询所有数据
> select * from test
name: test
time                address   age id name
----                -------   --- -- ----
1692521949440454412 shenyang  23  1  bby
1692521971727361412 changyuan 24  2  zqj
1692521993268148981 zhoukou   20  3  zwj
1692522010600707668 yanan     20  4  ctx
1692522032293330114 hanzhong  21  5  zh
1692522050213472795 ningbo    22  6  zxd
1692522066004959288 zhengzhou 22  7  zqx
1692522086233138642 nanyang   23  8  dyz
1692522104458762739 taizhou   24  9  hnb

# 根据tag查询
> select * from test where id='5'
name: test
time                address  age id name
----                -------  --- -- ----
1692522032293330114 hanzhong 21  5  zh

# 根据field查询
> select * from test where "name"='zwj'		# 注意:name是保留字,需要+“”区分
name: test
time                address age id name
----                ------- --- -- ----
1692521993268148981 zhoukou 20  3  zwj

# 从单个measurement中查询所有的field,不查tag
> select *::field from test;
name: test
time                address   age name
----                -------   --- ----
1692521949440454412 shenyang  23  bby
1692521971727361412 changyuan 24  zqj
1692521993268148981 zhoukou   20  zwj
1692522010600707668 yanan     20  ctx
1692522032293330114 hanzhong  21  zh
1692522050213472795 ningbo    22  zxd
1692522066004959288 zhengzhou 22  zqx
1692522086233138642 nanyang   23  dyz
1692522104458762739 taizhou   24  hnb

# 查询时不能只查tag,至少要有一个field项
> select *::tag,age from test;
name: test
time                id age
----                -- ---
1692521949440454412 1  23
1692521971727361412 2  24
1692521993268148981 3  20
1692522010600707668 4  20
1692522032293330114 5  21
1692522050213472795 6  22
1692522066004959288 7  22
1692522086233138642 8  23
1692522104458762739 9  24

# 查询多张表 (没什么用,两个表依然是单独的数据)
> select * from "user",test
name: test
time                'email' address   age id name name_1 phone
----                ------- -------   --- -- ---- ------ -----
1692521949440454412         shenyang  23  1  bby         
1692521971727361412         changyuan 24  2  zqj         
1692521993268148981         zhoukou   20  3  zwj         
1692522010600707668         yanan     20  4  ctx         
1692522032293330114         hanzhong  21  5  zh          
1692522050213472795         ningbo    22  6  zxd         
1692522066004959288         zhengzhou 22  7  zqx         
1692522086233138642         nanyang   23  8  dyz         
1692522104458762739         taizhou   24  9  hnb         

name: user
time                'email'          address age id name name_1 phone
----                -------          ------- --- -- ---- ------ -----
1692518226057415102 876606658@qq.com         20          bby    13066586531

# 模糊查询
# 前缀匹配  like 'z%'
> select * from test where "name"=~/^z/
name: test
time                address   age id name
----                -------   --- -- ----
1692521971727361412 changyuan 24  2  zqj
1692521993268148981 zhoukou   20  3  zwj
1692522032293330114 hanzhong  21  5  zh
1692522050213472795 ningbo    22  6  zxd
1692522066004959288 zhengzhou 22  7  zqx

# 后缀匹配 like '%j'
> select * from test where "name"=~/j$/
name: test
time                address   age id name
----                -------   --- -- ----
1692521971727361412 changyuan 24  2  zqj
1692521993268148981 zhoukou   20  3  zwj

# 前后匹配 like '%q%'
> select * from test where "name"=~/q/
name: test
time                address   age id name
----                -------   --- -- ----
1692521971727361412 changyuan 24  2  zqj
1692522066004959288 zhengzhou 22  7  zqx
  • 聚合查询(聚合查询只能对field字段进行操作,不能对tag字段操作
# 非要对tag操作的话,子查询
> select distinct(id) from (select * from test)
name: test
time distinct
---- --------
0    1
0    2
0    3
0    4
0    5
0    6
0    7
0    8
0    9

# count() 统计某个 field 非空值的数量
> select count(age) from test
name: test
time count
---- -----
0    9

# distinct 去重
> select distinct(age) from test
name: test
time distinct
---- --------
0    23
0    24
0    20
0    21
0    22

# median() 求中位数
> select median(age) from test
name: test
time median
---- ------
0    22

# spread() 返回字段最小值与最大值的差值
select spread(age) from test
name: test
time spread
---- ------
0    4

# sum() 求和,字段必须是 int 或 float
> select sum(age) from test
name: test
time sum
---- ---
0    199

# bottom() 返回一个字段中最小的N个值
> select bottom(age,3) from test
name: test
time                bottom
----                ------
1692521993268148981 20
1692522010600707668 20
1692522032293330114 21

# first() 返回一个字段中时间最早的值
> select first(age) from test
name: test
time                first
----                -----
1692521949440454412 23

# last() 返回一个字段中时间最晚的值
> select last(age) from test
name: test
time                last
----                ----
1692522104458762739 24

# max() 求最大值
> select max(age) from test
name: test
time                max
----                ---
1692521971727361412 24
  • 分组聚合

5.4、保留策略

6、权限配置

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

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

相关文章

odoo 设备增加二维码 python生成二维码的一个有意思的问题

odoo 设备增加二维码 python生成二维码的一个有意思的问题 在odoo设备集成中根据客户要求&#xff0c;增加了一个二维码&#xff0c;想包含一些信息&#xff0c;用python的二维码库qrcode&#xff0c;qrcode是二维码生成的Python开源库。 代码如下: ewmny 设备&#xff1a; …

开源远程控制硬件 BliKVM v4测试 1000公里外远程重装系统

测试准备 测试时间&#xff1a;20230818 测试硬件&#xff1a;BliKVM v4 文档 BliKVM v4是一款生产就绪、即插即用的 KVM-over-IP 设备&#xff0c;为专业用户提供了远程服务器或工作站管理的便捷解决方案。 它基于Linux并且完全开源。 借助 BliKVM&#xff0c;您可以轻松打…

机器学习算法-随机森林

目录 机器学习算法-随机森林 &#xff08;1&#xff09;构建单棵决策树。 决策树的构建过程 决策树的构建一般包含三个部分&#xff1a;特征选择、树的生成、剪枝。 机器学习算法-随机森林 机器学习算法-随机森林 随机森林是一种监督式学习算法&#xff0c;适用于分类和回…

9万字企业数字化技术中台、数据中台、工业互联网建设方案WORD

导读&#xff1a;原文《9万字企业数字化技术中台、数据中台、工业互联网建设方案WORD》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。 目录 1 概述 1.1. 数字化企…

SPI ServiceLoader.load()无法加载实现类

[TOC](SPI ServiceLoader.load()无法加载实现类) 问题描述 项目是maven结构&#xff0c;其中的resources里结构如下&#xff1a; 解决方案 改为如下结构&#xff1a; 原因分析 问题出现的原因是&#xff1a;创建Directory时用点号隔开了 META-INFO.services ,结果META-…

chapter 3 Free electrons in solid - 3.1 自由电子模型

3.1 自由电子模型 Free electron model 研究晶体中的电子&#xff1a; 自由电子理论&#xff1a;不考虑离子实能带理论&#xff1a;考虑离子实&#xff08;周期性势场&#xff09;的作用 3.1.1 德鲁德模型 Drude Model - Classical Free Electron Model (1)德鲁德模型 德鲁…

ruoyi-vue-pro yudao 项目支付 pay 模块启用及相关SQL脚本

目前ruoyi-vue-pro 项目虽然开源&#xff0c;但是pay 支付模块被屏蔽了&#xff0c;查看文档却要收费 199元&#xff08;知识星球&#xff09;&#xff0c;价格有点太高了吧。 分享下如何启用 pay 模块&#xff0c;顺便贴上sql相关脚本。 一、启用模块 修改根目录 pom.xml 启…

超详解——容器搭建ownCloud个人网盘

目录 在搭建开始前需要准备好所须的环境 拉取镜像 创建容器 创建mysql容器&#xff1a; 创建OwnCloud容器&#xff0c;并连接到数据库&#xff1a; 创建Nginx容器&#xff1a; 剩下的只需要根据向导安装指引步骤即可&#xff01;​编辑​编辑 docker-compose搭建请参照&…

正则表达式在PHP8中的应用案例-PHP8知识详解

正则表达式在php8中有许多应用案例。以下是一些常见的应用场景&#xff1a;如数据验证、数据提取、数据替换、url路由、文本搜索和过滤等。 1、数据验证 使用正则表达式可以对用户输入的数据进行验证&#xff0c;例如验证邮箱地址、手机号码、密码强度等。 下面是一个用正则表…

【算法】二分查找(整数二分和浮点数二分)

二分查找也称折半查找&#xff08;Binary Search&#xff09;&#xff0c;是一种效率较高的查找方法&#xff0c;时间复杂度为O(logN)。 二分查找采用了“分治”策略。使用二分查找时&#xff0c;数组中的元素之间得有单调性&#xff08;升序或者降序&#xff09;。 二分的模…

每日一题——螺旋矩阵

题目 给定一个m x n大小的矩阵&#xff08;m行&#xff0c;n列&#xff09;&#xff0c;按螺旋的顺序返回矩阵中的所有元素。 数据范围&#xff1a;0≤n,m≤10&#xff0c;矩阵中任意元素都满足 ∣val∣≤100 要求&#xff1a;空间复杂度 O(nm) &#xff0c;时间复杂度 O(nm)…

网络安全等级保护2.0

等保介绍 等保测评是为了符合国家法律发挥的需求&#xff0c;而不是安全认证&#xff08;ISO&#xff09; 一般情况没有高危安全风险一般可以通过&#xff0c;但若发现高位安全风险则一票否决 二级两年一次 三级等保测评每年一次 &#xff08;收费&#xff09; 四级每个年…

虚拟内存机制2

转载自公众号&#xff1a;在下小神仙 为什么要有虚拟内存机制&#xff1f; 在早期的计算机中&#xff0c;是没有虚拟内存的概念的。 我们要运行一个程序&#xff0c;会把程序全部装入内存&#xff0c;然后运行。 当运行多个程序时&#xff0c;经常会出现以下问题&#xff1a…

不使用导入表而直接调用dll中函数的病毒的工作方式

一、实验目的&#xff1a; 通过该实验&#xff0c; 使学生掌握使用PEB结构确定kernel32.dll基地址的方法与原理&#xff0c;通过对PE导出表结构分析来理解获取API函数地址的方法&#xff0c;最终通过编码完成一个没有导入表的测试程序。 二、实验步骤&#xff1a; 1.通过使用…

适用于 Windows 的 5 款最佳免费数据恢复软件

每个计算机用户都曾经历过数据丢失的情况。很容易错误地删除重要的文件和文件夹&#xff0c;当发生这种情况时&#xff0c;可能会导致不必要的心痛和压力。值得庆幸的是&#xff0c;可以恢复 Windows PC 上丢失的数据。在本文中&#xff0c;我们将分享您可以使用的五种最佳 Win…

第三讲:ApplicationContext的实现

这里写目录标题 一、前文回顾二、基础代码准备三、基于XML的ClassPathXmlApplicationContext1. 创建spring-config.xml配置文件2. 指定配置文件的路径 四、基于注解的AnnotationConfigApplicationContext1. 新增一个配置类2.指定配置类信息 五、基于注解和ServletWebServer应用…

剑指offer全集系列(1)

目录 JZ3 数组中重复的数字 JZ4 二维数组中的查找 JZ5 替换空格 JZ6 从尾到头打印链表 JZ18 删除链表的节点 JZ22 链表中倒数最后k个结点 题目为剑指offer top100题目, 欢迎大家来学习&#x1f618; JZ3 数组中重复的数字 数组中重复的数字_牛客题霸_牛客网在一个长度为…

centos7安装virtualbox

在线安装 vi /etc/yum.repos.d/virtualbox.repo&#xff0c;复制后将下面内容编辑保存。 [virtualbox] nameOracle Linux / RHEL / CentOS-$releasever / $basearch - VirtualBox baseurlhttp://download.virtualbox.org/virtualbox/rpm/el/$releasever/$basearch enabled1 …

DeFINE:用于神经序列建模的深度分解输入令牌嵌入

一、说明 DeFINE&#xff0c;是华盛顿大学和艾伦人工智能开发的自然语言处理工具&#xff0c;可以处理的范围是&#xff1a;NLP、语言模型、LM、神经机器翻译、NMT、变压器、变压器-XL等&#xff1b;本文对token-bedding进行生成。 借助DeFINE&#xff0c;Transformer-XL可以在…