中间件学习--InfluxDB部署(docker)及springboot代码集成实例

一、需要了解的概念
1、时序数据
时序数据是以时间为维度的一组数据。如温度随着时间变化趋势图,CPU随着时间的使用占比图等等。通常使用曲线图、柱状图等形式去展现时序数据,也就是我们常常听到的“数据可视化”。

2、时序数据库
非关系型数据库,以时间作为数据主键,专门用来存储时序数据。

3、时序数据库特点
(1)、时序数据库能存储海量数据。数据特点就是冷热差别明显,一般近期产生的数据为热数据,产生时间较远的数据为冷数据,冷数据被压缩放到磁盘里去来节省空间。
(2)、写入性能极优,时序数据库通常都是采用LSM Tree 的变种,顺序写磁盘来增强数据的写入能力。通常,关系型数据库采用 B+树数据结构,在数据写入时,有可能会触发叶裂变,从而产生了对磁盘的随机读写,降低写入速度。
(3)、低延时、高并发查询:通过索引降低查询延时,通过缓存等技术提高数据并发能力。
(4)、数据只写不改。

4、InfluxDB
是一种时序数据库,通常被用在监控场景,比如运维和 IOT(物联网)领域。这类数据库旨在存储时序数据处理数据用于数据展示分析,和通过监控预警策略达到响应的服务预警等。

5、InfluxDB的相关概念说明
(1)、Bucket–相当于mysql的database–数据库概念
(2)、Measurement—相当于mysql的table–数据表概念
(3)、Point–相当于数据表的一行。
Point包含:tag(数据标签,非必须)、field(不带索引)、timestemp(唯一主键)
(3.1)、tag–数据的标签-类似mysql的索引
(3.2)、field–数据的值保存
(3.3)、time-数据采集时间,数据唯一标识,一个表内不可重复,重复会覆盖

二、docker部署influxDB
1、拉取镜像
docker pull influxdb
在这里插入图片描述
2、启动容器
docker run -d -p 8086:8086 --name influxdb influxdb:latest
在这里插入图片描述
3、打开浏览器,可以正常打开
http://192.168.249.88:8086/
在这里插入图片描述
4、首次访问需要配置账号密码组织等信息
userName:admin // 登录账户
password:12345678 // 密码
org:zw // 组织
bucket:fruit // 数据桶
下图为配置界面,具体本人配置如上面的文字描述,下面的界面仅第一次会出现,之后就没有,所以无法截图了。
在这里插入图片描述
5、再次登录
在这里插入图片描述

三、springboot集成
官方提供了很多语言的集成方式,这里我们以java为例,其他语言,可以在下图位置查看
在这里插入图片描述
具体步骤:
1、引入pom

<!-- influxdb --><dependency><groupId>com.influxdb</groupId><artifactId>influxdb-client-java</artifactId><version>3.1.0</version></dependency>

2、添加配置(application.properties)

influxdb.url=http://192.168.249.88:8086
influxdb.bucket=fruit
influxdb.org=zw
influxdb.token=0jgapBVZ6GWMWpE77XYuPi_GLhWksvqEfNraocXMchivz5XvcLM_50tWLpXskTKFWQbUCoD_bS-iYFOjWvHzrg==

3、配置类,读取配置注入容器,不用导出应用配置
根据前缀读取配置,注入容器,以后就不用导出用@value引了,可以直接引入配置类

import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;@Data
@ConfigurationProperties(prefix = "influxdb")
public class InfluxdbProperties {private String url;private String bucket;private String org;private String token;
}

4、influxDB数据库客户端InfluxDBClient实例化和注入spring容器
初始化client连接和注入容器

import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.InfluxDBClientFactory;
import org.springframework.boot.context.properties.EnableConfigurationProperties;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;@Configuration
@EnableConfigurationProperties(InfluxdbProperties.class)
public class InfluxdbConfig {@Beanpublic InfluxDBClient initInfluxDBClient(InfluxdbProperties properties){InfluxDBClient client = InfluxDBClientFactory.create(properties.getUrl(),properties.getToken().toCharArray(),properties.getOrg(),properties.getBucket());return client;}
}

5、封装InfluxDB工具类–封装新增和查询的方法
本例仅简单封装了一下,还有很多批量操作等其他接口,可以自己在点进去看下如何调用。

import com.alibaba.fastjson.JSON;
import com.influxdb.client.InfluxDBClient;
import com.influxdb.client.QueryApi;
import com.influxdb.client.WriteApiBlocking;
import com.influxdb.client.domain.WritePrecision;
import com.influxdb.client.write.Point;
import com.influxdb.query.FluxRecord;
import com.influxdb.query.FluxTable;
import com.zw.study.influxdb.entity.Orange;
import org.springframework.beans.factory.DisposableBean;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;@Service
public class InfluxdbService implements DisposableBean {@Autowiredprivate InfluxDBClient client;@Autowiredprivate InfluxdbProperties properties;// 新增1,字符串形式,格式:String data = "zw_pear,host=host1 value=1111.11";public void writeLine(String data){WriteApiBlocking writeApi = client.getWriteApiBlocking();writeApi.writeRecord(properties.getBucket(), properties.getOrg(), WritePrecision.NS, data);}// 新增2,Point形式public void writePoint(Point point){WriteApiBlocking writeApi = client.getWriteApiBlocking();writeApi.writePoint(properties.getBucket(), properties.getOrg(), point);}// 新增3,自定义pojo形式public void writePojo(Orange orange){WriteApiBlocking writeApi = client.getWriteApiBlocking();writeApi.writeMeasurement(WritePrecision.NS, orange);}@Overridepublic void destroy() throws Exception {client.close();}public <M> List<M> queryList(){// 查询fruit库中过去1小时的数据String query = "from(bucket: \"fruit\") |> range(start: -1h)";QueryApi queryApi = client.getQueryApi();List<FluxTable> tables = queryApi.query(query, properties.getOrg());for (FluxTable table : tables) {for (FluxRecord record : table.getRecords()) {System.out.println(JSON.toJSONString(record));}}// 查询fruit库中zw_orange表中过去12小时数据,最多取10条,封装到pojo中String query1 = "from(bucket: \"fruit\")\n" +"  |> range(start: -12h, stop: now())\n" +"  |> filter(fn: (r) => r._measurement == \"zw_orange\" and r._field == \"value\")\n" +"  |> limit(n:10)";List<Orange> table2 = queryApi.query(query1, Orange.class);System.out.println("table2:"+ JSON.toJSONString(table2));return null;}
}

6、测试和验证新增

    @RequestMapping("/influx/test")public void test(String type) {logger.info("进入influxdb方法");if ("1".equals(type)) {String line = "zw_pear,host=host1 value=1111.11";influxdbService.writeLine(line);} else if ("2".equals(type)) {Point point = Point.measurement("zw_apple").addTag("host", "host1").addField("value", 222.22).time(Instant.now(), WritePrecision.NS);influxdbService.writePoint(point);} else if ("3".equals(type)) {Orange orange = new Orange();orange.setHost("host1");orange.setValue(3333.33);orange.setTime(Instant.now());influxdbService.writePojo(orange);} else  if ("4".equals(type)) {influxdbService.queryList();}}

分别用type1,2,3验证新增,
浏览器查看
在这里插入图片描述
用type为4查看查询
在这里插入图片描述

不同的业务场景,选择适合的中间件还是比较重要的。对于工业行业中需要采集声音,温度,湿度等的情况,实时观察数据变化趋势,根据趋势或者其他策略做出响应的预警提示,时序数据库是相对关系数据库而言更优的选择。

学海无涯苦作舟!!!

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

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

相关文章

Day31:学习SpringCloud

学习计划&#xff1a;完成尚硅谷的尚上优选项目 学习进度&#xff1a;完成尚上优选项目的前置知识点&#xff1a;SpringCloud 知识点&#xff1a; 面试相关问题及源码 微服务篇 SpringCloud常见组件有哪些&#xff1f;Nacos的服务注册表结构是怎样的&#xff1f;Nacos如何支…

爬虫实践(1)

这一篇只提登录模拟&#xff0c;主要介绍chrome开发者窗口的使用&#xff0c;实际上相关接口调用都是用到cookie&#xff0c;需要再加一篇从token到cookie&#xff0c;以保证实践的完整性 以migu登录为例&#xff0c;分析其登录过程&#xff0c;之后可以使用任意语言模拟登录&…

P8687 [蓝桥杯 2019 省 A] 糖果

一、题目描述 P8687 [蓝桥杯 2019 省 A] 糖果 二、问题简析 由题意&#xff0c;糖果的种类 M M M 最多为 20 20 20&#xff0c;所以我们可以采用二进制位的方式来表示每包糖果的组成。具体&#xff1a;二进制的第 i i i 位表示第 i 1 i 1 i1 种糖果&#xff0c; 1 1 1…

Spark SQL DataFrame

Spark SQL DataFrame DataFrame是一个分布式数据集合&#xff0c;它被组织成命名列。从概念上讲&#xff0c;它相当于具有良好优化技术的关系表。 DataFrame可以从不同来源的数组构造&#xff0c;例如Hive表&#xff0c;结构化数据文件&#xff0c;外部数据库或现有RDD。这个…

小程序富文本图片宽度自适应

解决这个问题 创建一个util.js文件,图片的最大宽度设置为100%就行了 function formatRichText(html) {let newContent html.replace(/\<img/gi, <img style"max-width:100%;height:auto;display:block;");return newContent; }module.exports {formatRichT…

vue2创建项目(自用,初学)

vue2创建项目(自用&#xff0c;初学) 创建项目 1.在文件资源管理器中&#xff0c;选择想建立文件夹的目录&#xff0c;输入cmd指令 vue create 项目名2.初学练习选择最后一项 3.按空格进行勾选&#xff0c;回车下一步 4.因为是vue2&#xff0c;所以选2.x 5.选y 6.选Less 7.选…

canvas跟随鼠标画有透明度的椭圆边框

提示&#xff1a;canvas跟随鼠标画有透明度的椭圆边框 文章目录 前言一、跟随鼠标画有透明度的椭圆边框总结 前言 一、跟随鼠标画有透明度的椭圆边框 test.html <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8">&…

论文阅读-《Lite Pose: Efficient Architecture Design for 2D Human Pose Estimation》

摘要 这篇论文主要研究了2D人体姿态估计的高效架构设计。姿态估计在以人为中心的视觉应用中发挥着关键作用&#xff0c;但由于基于HRNet的先进姿态估计模型计算成本高昂&#xff08;每帧超过150 GMACs&#xff09;&#xff0c;难以在资源受限的边缘设备上部署。因此&#xff0…

html和ashx之间的传值以及js和aspx传值

html 代码 var content window.location.href; var ori content.split(?) console.log(ori[1]) GetJsonByUrl2("getData_stock2.ashx?workline" ori[1], get_html); $.ajax({ type: "post", url: "Handler1.ashx", …

大数据入门(一)

大数据主要要解决&#xff1a;海量数据的采集&#xff0c;存储&#xff0c;分析计算问题。 大数据的特点&#xff1a;大量&#xff08;数据量大&#xff09;&#xff0c;高速&#xff08;数据量的累积越来越快&#xff09;&#xff0c;多样&#xff08;结构化数据和非结构化数…

Intellij IDEA构建Android开发环境

Intellij IDEA创建项目时没有Android的选项 进设置&#xff08;Intellij IDEA - Settings - Plugins &#xff09; 再次创建项目可以看到Android的选项 解决Android导入项目时Gradle下载速度慢/超时/失败

票据查重查漏问题

题目背景 某涉密单位下发了某种票据&#xff0c;并要在年终全部收回。 题目描述 每张票据有唯一的 ID 号&#xff0c;全年所有票据的 ID 号是连续的&#xff0c;但 ID 的开始数码是随机选定的。因为工作人员疏忽&#xff0c;在录入 ID 号的时候发生了一处错误&#xff0c;造成了…

HCIP —— 多生成树 (MSTP)

MSTP --- Multiple Spanning Tree Protocol --- 802.1s 在 MSTP 中 &#xff0c;提出了实例的概念&#xff0c;相当于可用让多个VLAN同时属于一个实例&#xff0c;然后只需要一个实例生成一棵树。 --- 一种 VLAN 分流的思想 实例ID &#xff1a;instance ID 由 12位 二进制…

windows安装tomcat

安装之前需要安装jdk1.8可以参考windows安装jdk1.8-CSDN博客 一、下载tomcat Apache Tomcat - Apache Tomcat 8 Software Downloads 解压到D盘的D:\Program Files\tomcat目录下 二、配置环境变量 电脑右键属性-高级系统设置-高级-环境变量 1、在系统变量配置CATALINA_HOME环…

掌握ES6的箭头函数:深入了解其实用性与规则

引言 ES6&#xff08;ECMAScript 2015&#xff09;引入了箭头函数&#xff0c;这是一种新的函数声明方式&#xff0c;它改变了我们编写JavaScript代码的方式。箭头函数提供了更简洁、更直观的语法&#xff0c;并且具有一些独特的特性和行为。本文将深入探讨箭头函数的规则、用…

将word转为PDF的几种简单方式

第一种&#xff1a;使用spire.doc.jar包&#xff0c;用时7秒左右。 引入spire.doc-11.1.1.jar包&#xff0c;该包带水印&#xff0c;建议使用免费版的spire.doc.free-5.2.0.jar&#xff0c;免费版只能转三页。 package web.tools.excel; import com.spire.doc.*; public cl…

【分布式】——降级熔断限流

降级&熔断&限流 ⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记仓库&#x1f449;https://github.com/A-BigTree/tree-learning-notes 个人主页&#x1f449;https://www.abigtree.top ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点…

mysqldump 备份与恢复

1. mysqldump 简介 mysqldump 是 MySQL 提供的一个命令行工具&#xff0c;用于备份 MySQL 数据库的结构和数据。它能够生成一个包含 SQL 语句的文本文件&#xff0c;以便在需要时恢复数据库。 2. mysqldump 备份数据库 要备份一个或多个数据库&#xff0c;可以使用 mysqldum…

uniApp中使用小程序XR-Frame创建3D场景(2)加载模型

上篇文章讲述了如何将XR-Frame作为子组件集成到uniApp中使用&#xff0c;只完成了简单的环境搭建&#xff0c;这篇文章讲解如何加载3D模型。 1 加入模型加载标签 在XR-Frame框架中&#xff0c;加载资源都是在wxml文件的标签中实现的。下面是wxml中完整的代码 index.wxml &l…

spark-submit 主要参数详细说明及Standalone集群最佳实践

文章目录 1. 前言2. 参数说明3. Standalone集群最佳实践 1. 前言 部署提交应用到 spark 集群&#xff0c;可能会用到 spark-submit 工具&#xff0c;鉴于网上的博客质量残差不齐&#xff0c;且有很多完全是无效且错误的配置&#xff0c;没有搞明白诸如--total-executor-cores …