乐趣区

关于java:Spring-Boot中使用时序数据库InfluxDB

除了最罕用的关系数据库和缓存之外,之前咱们曾经介绍了在 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:8086
spring.influx.user=admin
spring.influx.password=

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

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

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

@Service
@AllArgsConstructor
@Slf4j
public 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          : 上报统计数据:25
2021-08-03 01:52:52.736  INFO 94110 --- [scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:30
2021-08-03 01:52:57.737  INFO 94110 --- [scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:38
2021-08-03 01:53:02.739  INFO 94110 --- [scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:51
2021-08-03 01:53:07.739  INFO 94110 --- [scheduling-1] com.didispace.chapter63.Monitor          : 上报统计数据:31

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

> select * from ApiQPS order by time desc;

name: ApiQPS
time                count url
----                ----- ---
1627926787730000000 31    /hello
1627926782730000000 51    /hello
1627926777729000000 38    /hello
1627926772727000000 30    /hello
1627926767728000000 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,分享其余中央看不到的常识与思考

退出移动版