除了最罕用的关系数据库和缓存之外,之前咱们曾经介绍了在Spring Boot中如何配置和应用MongoDB、LDAP这些存储的案例。接下来,咱们持续介绍另一种非凡的数据库:时序数据库InfluxDB在Spring Boot中的应用。

InfluxDB简介

什么是时序数据库?全称为工夫序列数据库。工夫序列数据库次要用于指解决带工夫标签(依照工夫的程序变动,即工夫序列化)的数据,带工夫标签的数据也称为工夫序列数据。
工夫序列数据次要由电力行业、化工行业等各类型实时监测、查看与剖析设施所采集、产生的数据,这些工业数据的典型特点是:产生频率快(每一个监测点一秒钟内可产生多条数据)、重大依赖于采集工夫(每一条数据均要求对应惟一的工夫)、测点多信息量大(惯例的实时监测零碎均有成千上万的监测点,监测点每秒钟都产生数据,每天产生几十GB的数据量)。尽管关系型数据库也能够存储基于工夫序列的数据,但因为存储构造上的劣势,使得这些数据无奈高效的实现高频存储和查问统计,因而就诞生了一种专门针对工夫序列来做存储和优化的数据库,以满足更高的效率要求。 -- 参考:百度百科:时序数据库

InfluxDB就是目前比拟风行的开源时序数据库(官网地址:https://www.influxdata.com/),咱们比拟常见的应用场景就是一些与工夫相干的高频的数据记录和统计须要,比方:监控数据的存储和查问。

在进行上面的入手环节之前,先理解一下InfluxDB中的几个重要名词:

  • database:数据库
  • measurement:相似于关系数据库中的table(表)
  • points:相似于关系数据库中的row(一行数据)

其中,一个Point由三个局部组成:

  • time:工夫戳
  • fields:记录的值
  • tags:索引的属性

入手试试

在理解了什么是时序数据库以及InfluxDB一些根底概念之后,上面咱们通过一个简略的定时上报监控数据的小案例,进一步了解InfluxDB的根底配置、数据组织和写入操作!

第一步:创立一个根底的Spring Boot我的项目(如果您还不会,能够参考这篇文章:疾速入门1)

第二步:在pom.xml中引入influx的官网SDK

<dependency>    <groupId>org.influxdb</groupId>    <artifactId>influxdb-java</artifactId></dependency>

留神:这里因为Spring Boot 2.x版本的parent中有保护InfluxDB的SDK版本,所以不须要手工指明版本信息。如果应用的Spring Boot版本比拟老,那么可能会短少version信息,就须要手工写了。

第三步:配置要连贯的influxdb信息

spring.influx.url=http://localhost:8086spring.influx.user=adminspring.influx.password=

三个属性别离代表:连贯地址、用户名、明码。到这一步,根底配置就实现了。

留神:尽管没有spring data的反对,但spring boot 2.x版本中也实现了InfluxDB的自动化配置,所以只须要写好配置信息,就能够应用了。具体配置属性能够查看源码:org.springframework.boot.autoconfigure.influx.InfluxDbProperties

第四步:创立定时工作,模仿上报数据,并写入InfluxDB

@Service@AllArgsConstructor@Slf4jpublic class Monitor {    private InfluxDB influxDB;    @Scheduled(fixedRate = 5000)    public void writeQPS() {        // 模仿要上报的统计数据        int count = (int) (Math.random() * 100);        Point point = Point.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 database "test"

第二步:启动Spring Boot利用,在定时工作的作用下,咱们会看到相似上面的日志:

2021-08-03 01:52:47.732  INFO 94110 --- [           main] c.d.chapter63.Chapter63Application       : Started Chapter63Application in 2.326 seconds (JVM running for 3.027)2021-08-03 01:52:47.764  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:252021-08-03 01:52:52.736  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:302021-08-03 01:52:57.737  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:382021-08-03 01:53:02.739  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:512021-08-03 01:53:07.739  INFO 94110 --- [   scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:31

第三步:通过命令,查看一下InfluxDB中是否曾经存在这些数据

> select * from ApiQPS order by time desc;name: ApiQPStime                count url----                ----- ---1627926787730000000 31    /hello1627926782730000000 51    /hello1627926777729000000 38    /hello1627926772727000000 30    /hello1627926767728000000 25    /hello

能够看到,曾经存在与日志中一样的数据了。

好了,明天的教程到这里完结了,记得本人入手试试哦!记得关注我,学习不迷路!前面咱们还会再持续介绍,如何去展现这些时序数据!本系列教程《Spring Boot 2.x基础教程》点击中转!,欢送珍藏与转发!如果学习过程中如遇艰难?能够退出咱们Spring技术交换群,参加交换与探讨,更好的学习与提高!

代码示例

本文的残缺工程能够查看上面仓库中的chapter6-3目录:

  • Github:https://github.com/dyc87112/SpringBoot-Learning/
  • Gitee:https://gitee.com/didispace/SpringBoot-Learning/

如果您感觉本文不错,欢送Star反对,您的关注是我保持的能源!

欢送关注我的公众号:程序猿DD,分享其余中央看不到的常识与思考