Influxdb数据库(centos7)

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、权限配置

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ElasticSearch索引库、文档、RestClient操作

文章目录 一、索引库1、mapping属性2、索引库的crud 二、文档的crud三、RestClient 一、索引库 es中的索引是指相同类型的文档集合&#xff0c;即mysql中表的概念 映射&#xff1a;索引中文档字段的约束&#xff0c;比如名称、类型 1、mapping属性 mapping映射是对索引库中文…

MyBatis入门配置及CURD实现

目录 一、MyBatis简介 1. 什么是 MyBatis ? 2. MyBatis的特性 3. 什么是持久层框架&#xff1f; 二、MyBatis环境配置 2.1 创建maven工程 2.2 导入相关pom依赖 2.3 导入jdbc配置文件 2.4 Mybatis相关插件安装 3.5 Mybatis-cfg.xml 核心配置 2.6 引入Log4j2日志文件…

在项目中如何解除idea和Git的绑定

在项目中如何解除idea和Git的绑定 1、点击File--->Settings...(CtrlAltS)--->Version Control--->Directory Mappings--->点击取消Git的注册根路径&#xff1a; 2、回到idea界面就没有Git了&#xff1a; 3、给这个项目初始化 这样就可以重新绑定远程仓库了&#x…

前端vue自定义柱形图 选中更改柱形图颜色及文字标注颜色

随着技术的发展&#xff0c;开发的复杂度也越来越高&#xff0c;传统开发方式将一个系统做成了整块应用&#xff0c;经常出现的情况就是一个小小的改动或者一个小功能的增加可能会引起整体逻辑的修改&#xff0c;造成牵一发而动全身。 通过组件化开发&#xff0c;可以有效实现…

船舶法兰盘法兰管件3D扫描尺寸测量|三维扫描检测|CAV测量-CASAIM

第一章 服务背景 船舶建造多采用分段建造法&#xff0c;即将零件、预装好的部件在胎架上组合焊接成分段或总段&#xff0c;然后由船台装配成整船的建造方法。而当船体合拢组装时&#xff0c;在船体上遍布着各种各样的管道&#xff0c;这些管道都需要互相完全适配以确保船体安装…

第8章:集成学习

个体与集成 同质&#xff1a;相同的基学习器&#xff0c;实现容易&#xff0c;但是很难保证差异性。异质&#xff1a;不同的基学习器&#xff0c;实现复杂&#xff0c;不同模型之间本来就存在差异性&#xff0c;但是很难直接比较不同模型的输出&#xff0c;需要复杂的配准方法。…

python基础5——正则、数据库操作

文章目录 一、数据库编程1.1 connect()函数1.2 命令参数1.3 常用语句 二、正则表达式2.1 匹配方式2.2 字符匹配2.3 数量匹配2.4 边界匹配2.5 分组匹配2.6 贪婪模式&非贪婪模式2.7 标志位 一、数据库编程 可以使用python脚本对数据库进行操作&#xff0c;比如获取数据库数据…

前后端分离------后端创建笔记(09)密码加密网络安全

本文章转载于【SpringBootVue】全网最简单但实用的前后端分离项目实战笔记 - 前端_大菜007的博客-CSDN博客 仅用于学习和讨论&#xff0c;如有侵权请联系 源码&#xff1a;https://gitee.com/green_vegetables/x-admin-project.git 素材&#xff1a;https://pan.baidu.com/s/…

Pixar、Adobe 和苹果等成立 OpenUSD 联盟推行 3D 内容开放标准

导读Pixar、Adobe、Apple、Autodesk 与 NVIDIA 联手 Linux 基金会旗下的联合开发基金会&#xff08;JDF&#xff09;宣布建立 OpenUSD 联盟&#xff08;AOUSD&#xff09;以推行 Pixar 创建的通用场景描述技术的标准化、开发、进化和发展。 联盟寻求通过推进开放式通用场景描述…

Crimson:高性能,高扩展的新一代 Ceph OSD

背景 随着物理硬件的不断发展&#xff0c;存储软件所使用的硬件的情况也一直在不断变化。 一方面&#xff0c;内存和 IO 技术一直在快速发展&#xff0c;硬件的性能在极速增加。在最初设计 Ceph 的时候&#xff0c;通常情况下&#xff0c;Ceph 都是被部署到机械硬盘上&#x…

Git问题:解决“ssh:connect to host github.com port 22: Connection timed out”

操作系统 Windows11 使用Git IDEA 连接方式&#xff1a;SSH 今天上传代码出现如下报错&#xff1a;ssh:connect to host github.com port 22: Connection timed out 再多尝试几次&#xff0c;依然是这样。 解决 最终发现两个解决方案&#xff1a;&#xff08;二选一&#xf…

Android 9.0 Vold挂载流程解析(上)

前言 我们分2篇文章来介绍Android 9.0中存储卡的挂载流程&#xff0c;本篇文章先介绍总体的挂载模块、Vold进程的入口main函数的详细分析&#xff0c;有了这些基础知识&#xff0c;下一篇中我们再详细介绍收到驱动层消息是怎么挂载和卸载存储卡的&#xff0c;还有framework层如…

合宙Air724UG LuatOS-Air LVGL API--对象

对象 概念 在 LVGL 中&#xff0c;用户界面的基本构建块是对象。例如&#xff0c;按钮&#xff0c;标签&#xff0c;图像&#xff0c;列表&#xff0c;图表或文本区域。 属性 基本属性 所有对象类型都共享一些基本属性&#xff1a; Position (位置) Size (尺寸) Parent (父母…

申请部署阿里云SSL免费证书

使用宝塔自动创建的证书有时候会报NET::ERR_CERT_COMMON_NAME_INVALID&#xff0c;并且每次只能三个月&#xff0c;需要点击续期非常麻烦&#xff0c;容易遗忘。 阿里云免费SSL证书 前往阿里云管理控制台【数字证书管理服务】【SSL证书】&#xff0c;每年20个额度&#xff0c;一…

阿里云无影云电脑/云桌面收费价格表_使用申请方法

阿里云无影云电脑配置具体收费价格表&#xff0c;4核8G企业办公型云电脑可以免费使用3个月&#xff0c;无影云电脑地域不同价格不同&#xff0c;无影云电脑费用是由云桌面配置、云盘、互联网访问带宽、AD Connector 、桌面组共用桌面session 等费用组成&#xff0c;阿里云百科分…

Golang使用消息队列(RabbitMQ)

最近在使用Golang做了一个网盘项目&#xff08;类似百度网盘&#xff09;&#xff0c;这个网盘项目有一个功能描述如下&#xff1a;用户会删除一个文件到垃圾回收站&#xff0c;回收站的文件有一个时间期限&#xff0c;比如24h&#xff0c;24h后数据库中记录和oss中文件会被删除…

vue中实现订单支付倒计时

需求 创建订单后15分钟内进行支付&#xff0c;否则订单取消。 实现 思路&#xff1a; 获取当前时间和支付超时时间&#xff08;在创建时间的基础上增加15分钟即为超时时间&#xff0c;倒计时多久根据自己的实际需求&#xff0c;这里为15分钟&#xff09;&#xff0c;支付超时…

后端开发12.商品模块

概述 简介 商品模块这个设计的非常复杂 效果图 数据库

FPGA原理与结构——ROM IP的使用与测试

一、前言 本文介绍Block Memory Generator v8.4 IP核 实现ROM&#xff0c;在学习一个IP核的使用之前&#xff0c;首先需要对于IP核的具体参数和原理有一个基本的了解&#xff0c;具体可以参考&#xff1a; FPGA原理与结构——块RAM&#xff08;Block RAM,BRAM&#xff09;http…

KUST_LI计算机视觉实验室服务器安装与管理

第一步&#xff1a;安装 Linux-Ubuntu系统 系统语言设置为英文 ENGLISH&#xff0c;防止系统 BUG&#xff1b;选择-清除整个磁盘并安装系统&#xff1b;设置用户名和密码&#xff0c;实验室统一其余全部默认设置 开机后设置磁盘挂载 在系统设置中找到 desk 打开&#xff0c;…