springboot中使用 InfluxDB-元一软件

springboot中使用 InfluxDB-元一软件 InfluxDB简介什么是时序数据库全称为时间序列数据库。时间序列数据库主要用于指处理带时间标签按照时间的顺序变化即时间序列化的数据带时间标签的数据也称为时间序列数据。时间序列数据主要由电力行业、化工行业等各类型实时监测、检查与分析设备所采集、产生的数据这些工业数据的典型特点是产生频率快每一个监测点一秒钟内可产生多条数据、严重依赖于采集时间每一条数据均要求对应唯一的时间、测点多信息量大常规的实时监测系统均有成千上万的监测点监测点每秒钟都产生数据每天产生几十GB的数据量。虽然关系型数据库也可以存储基于时间序列的数据但由于存储结构上的劣势使得这些数据无法高效的实现高频存储和查询统计因此就诞生了一种专门针对时间序列来做存储和优化的数据库以满足更高的效率要求。InfluxDB就是目前比较流行的开源时序数据库我们比较常见的使用场景就是一些与时间相关的高频的数据记录和统计需要比如监控数据的存储和查询。在进行下面的动手环节之前先了解一下InfluxDB中的几个重要名词database数据库measurement类似于关系数据库中的table表points类似于关系数据库中的row一行数据其中一个Point由三个部分组成time时间戳fields记录的值tags索引的属性动手试试在了解了什么是时序数据库以及InfluxDB一些基础概念之后下面我们通过一个简单的定时上报监控数据的小案例进一步理解InfluxDB的基础配置、数据组织和写入操作第一步创建一个基础的Spring Boot项目第二步在pom.xml中引入influx的官方SDKdependencygroupIdorg.influxdb/groupIdartifactIdinfluxdb-java/artifactId/dependency注意这里因为Spring Boot 2.x版本的parent中有维护InfluxDB的SDK版本所以不需要手工指明版本信息。如果使用的Spring Boot版本比较老那么可能会缺少version信息就需要手工写了。第三步配置要连接的influxdb信息spring.influx.urlhttp://localhost:8086spring.influx.useradminspring.influx.password三个属性分别代表连接地址、用户名、密码。到这一步基础配置就完成了。注意虽然没有spring data的支持但spring boot 2.x版本中也实现了InfluxDB的自动化配置所以只需要写好配置信息就可以使用了。具体配置属性可以查看源码org.springframework.boot.autoconfigure.influx.InfluxDbProperties。第四步创建定时任务模拟上报数据并写入InfluxDBService AllArgsConstructor Slf4j public class Monitor{private InfluxDB influxDB;Scheduled(fixedRate5000)public voidwriteQPS(){// 模拟要上报的统计数据 int count(int)(Math.random()*100);Point pointPoint.measurement(ApiQPS)// ApiQPS表 .tag(url,/hello)// url字段 .addField(count, count)// 统计数据 .time(System.currentTimeMillis(), TimeUnit.MILLISECONDS)// 时间 .build();// 往test库写数据 influxDB.write(test,autogen, point);log.info(上报统计数据 count);}}测试验证第一步启动InfluxDB并通过命令行准备好要使用的数据库主要涉及的命令如下进入InfluxDB$ influx查询当前存在的数据库show databases创建数据库注意数据库名称与上面Java代码中write的第一个参数一致create databasetest第二步启动Spring Boot应用在定时任务的作用下我们会看到类似下面的日志2021-08-03 01:52:47.732 INFO94110---[main]c.d.chapter63.Chapter63Application:Started Chapter63Applicationin2.326seconds(JVM runningfor3.027)2021-08-03 01:52:47.764 INFO94110---[scheduling-1]com.didispace.chapter63.Monitor:上报统计数据252021-08-03 01:52:52.736 INFO94110---[scheduling-1]com.didispace.chapter63.Monitor:上报统计数据302021-08-03 01:52:57.737 INFO94110---[scheduling-1]com.didispace.chapter63.Monitor:上报统计数据382021-08-03 01:53:02.739 INFO94110---[scheduling-1]com.didispace.chapter63.Monitor:上报统计数据512021-08-03 01:53:07.739 INFO94110---[scheduling-1]com.didispace.chapter63.Monitor:上报统计数据31第三步通过命令查看一下InfluxDB中是否已经存在这些数据select* from ApiQPS order bytimedesc;name: ApiQPStimecount url ---- ----- ---162792678773000000031/hello162792678273000000051/hello162792677772900000038/hello162792677272700000030/hello162792676772800000025/hello