SpringBoot:整合数据库连接池durid插件以及优化SQL查看查询效果

什么是Druid?

Druid是一个高效的数据查询系统,主要解决的是对于大量的基于时序的数据进行聚合查询。数据可以实时摄入,进入到Druid后立即可查,同时数据是几乎是不可变。通常是基于时序的事实事件,事实发生后进入Druid,外部系统就可以对该事实进行查询。

Druid采用的架构:shared-nothing架构与lambda架构

Druid设计三个原则:

1.快速查询:部分数据聚合(Partial Aggregate) + 内存华(In-Memory) + 索引(Index)
2.水平拓展能力:分布式数据(Distributed data)+并行化查询(Parallelizable Query)
3.实时分析:Immutable Past , Append-Only Future

Druid是一个JDBC组件,包括三部分:

  • DruidDriver 代理Driver,能够提供基于Filter-Chain模式的插件体系。
  • DruidDataSource 高效可管理的数据库连接池。
  • SQLParser

Druid可以做什么?

  1. 可以监控数据库访问性能,Druid内置提供了一个功能强大的StatFilter插件,能够详细统计SQL的执行性能,这对于线上分析数据库访问性能有帮助。

  2. 替换DBCPC3P0。Druid提供了一个高效、功能强大、可扩展性好的数据库连接池。

  3. 数据库密码加密。直接把数据库密码写在配置文件中,这是不好的行为,容易导致安全问题。DruidDruiver和DruidDataSource都支持PasswordCallback。

  4. SQL执行日志,Druid提供了不同的LogFilter,能够支持Common-LoggingLog4j和JdkLog,你可以按需要选择相应的LogFilter,监控你应用的数据库访问情况。

SpringBoot连接Mysql

Step1:Mysql驱动以及Druid连接池配置

server:
  port: 8091

#=========================数据库连接=========================================
druid:
  allow:
    ip: 127.0.0.1
  login:
    username: root
    password: root
spring:
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://localhost:3306/educationapp?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root
    password: root
    type: com.alibaba.druid.pool.DruidDataSource
    #初始化大小
    initial-size: 1
    #最小线程数
    min-idle: 1
    #最大线程数
    max-idle: 5
    max-wait-millis: 60000
    timeBetweenEvictionRunsMillis: 60000
    # 配置⼀个连接在池中最⼩⽣存的时间,单位是毫秒
    minEvictableIdleTimeMillis: 300000
    validationQuery: SELECT 1 FROM DUAL
    testWhileIdle: true
    testOnBorrow: true
    testOnReturn: false
    # 打开PSCache,并且指定每个连接上PSCache的⼤⼩
    poolPreparedStatements: false
    maxPoolPreparedStatementPerConnectionSize: 20
    # 配置监控统计拦截的filters,去掉后监控界⾯sql⽆法统计,'wall'⽤于防⽕墙
    filters: stat,wall
    # 通过connectProperties属性来打开mergeSql功能;慢SQL记录
    connectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=5000
    # 合并多个DruidDataSource的监控数据
    #spring.datasource.useGlobalDataSourceStat=true

Step2:启动SpringBoot项目浏览器访问控制台

访问:localhost:端口/druid

输入yml文件配置的用户名和密码,我配置的全是root
在这里插入图片描述

随便写了个接口,调用可以看到Session监控的访问ip以及请求次数、并发执行数等
在这里插入图片描述

Step3:SQL执行效率查询

Step3.1:写了一个新增的接口方法,先写入10万条数据

这里有个题外话和大家说一下。比如你某些字段比如code这种值一般作为一些唯一性码的存在,但你数据量越来越多它一定会出现重复的情况,而且UUID生成是有规律的,前缀一般都是两个0或者三个0。很大概率发生数据冲突,UUID与机器码和本地MAC值有关。所以建议大家后面可以跟上时间戳
在这里插入图片描述

Step3.2:生成后的10万数据
在这里插入图片描述

Step3.3:写一个条件查询code数据
在这里插入图片描述

Step3.4:调用接口查看druid监控

可以看到最慢也只有100毫秒,主要还是数据太少的原因
在这里插入图片描述

以上数据库字段是没加索引的情况,下面我来将code字段加上唯一索引
在这里插入图片描述

重启后台,以及更换code条件值,主要是防止缓存

可以看到下面结果,最慢只有4毫秒,这是非常显著的提升

也可以发现druid还是非常好用,可以帮助我们查看慢SQL以及名中并发等。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/q736317048/article/details/113484718