沧澜的博客

芝兰生于幽谷,不以无人而不芳


  • 首页

  • 归档

  • 分类

  • 标签

  • 搜索
软件思想 SpringBoot 领域驱动设计 算法 中间件 计算机网络 MySQL 数据库 javascript 极客时间 分布式架构 Jenkins JVM 多线程 Java基础 CentOS安装 编译OpenJDK 持续集成 杂谈

MySQL学习篇(1)——连接池

发表于 2020-02-15 | 分类于 数据库 | 0 | 阅读次数 1138

程序员眼中的数据库

平时在我们写Java系统时,一般会连接到一个MySQL数据库上,执行各种增删改查。在实际使用过程中,遇到一些死锁、SQL性能太差、异常错误等,就只会网上博客,尝试着捣鼓一下,最后可能解决了问题,但是也没有最终搞明白原理。

这里我现在就系统的学习MySQL底层技术原理,如何基于MySQL原理去解决排查问题。

MySQL的驱动

在使用Java代码连接MySQL数据库时,我们都需要在系统的依赖中加入一个数据库驱动。

<dependency>
	<groupId>mysql</groupId>
	<artifactId>mysql-connector-java</artifactId>
	<version>8.0.18</version>
</dependency>

MySQL驱动会负责与MySQL数据库建立网络连接,如下图 image.png 当有了网络连接后,Java代码才能够访问数据库进行增删改查。

对于不同的语言,MySQL会提供不同的语言版本的MySQL驱动程序,让不同的语言程序可以访问MySQL数据库。

数据库连接池的作用

一个Java程序只会创建一个数据库连接吗?

这个肯定不是的,可以假想在tomcat中,tomcat本身是有多个线程来同时处理多个任务请求的,如下图

image.png

但如果多个任务抢夺一个数据库连接访问数据库的话,那效果肯定是不行的。

那么如果每个任务都创建一个数据库连接访问,那么tomcat中上百个线程频繁创建数据库连接,执行SQL之后频繁销毁连接,这样效率肯定是低下的。

image.png

所以一般情况下我们需要使用一个数据库连接池,也就是在一个池子里维护多个连接,让多个线程使用不同的连接访问数据库,执行SQL之后不销毁连接,然后再放回到连接池中,后续还可以使用。

基于这样的一个数据库连接池的机制,就可以解决多个线程并发的使用多个数据库连接去执行SQL语句的问题,而且还避免了数据库连接使用完之后就销毁的问题。

image.png

MySQL数据库连接池有什么用

我们再把目光转移到MySQL中,MySQL肯定也会与多个系统建立连接,那么MySQL也需要维护与各个系统的连接,所以MySQL架构中的第一个环节就是连接池。

如下图,实际上MySQL中的连接池就是维护了与系统之间的多个数据库连接。除此之外,你的系统每次跟MySQL建立连接的时候,还会根据你传递过来的账号和密码,进行账号密码的验证,库表权限的验证。

image.png

小节

今天从数据库驱动联想到连接池,再到MySQL架构中的连接池,由知识的对照学习,逐渐加深印象。

  • 本文作者: 沧澜
  • 本文链接: https://www.meetxiyu.cn/archives/MySQL学习篇(1)——连接池
  • 版权声明: 本博客所有文章除特别声明外,均采用CC BY-NC-SA 3.0 许可协议。转载请注明出处!
# 软件思想 # SpringBoot # 领域驱动设计 # 算法 # 中间件 # 计算机网络 # MySQL # 数据库 # javascript # 极客时间 # 分布式架构 # Jenkins # JVM # 多线程 # Java基础 # CentOS安装 # 编译OpenJDK # 持续集成 # 杂谈
陆奇:卓越源于极致自律
MySQL学习篇(3)——InnoDB存储引擎的架构设计
  • 文章目录
  • 站点概览
沧澜

沧澜

芝兰生于幽谷,不以无人而不芳
君子修身养德,不以穷困而改志

74 日志
19 分类
19 标签
RSS
Creative Commons
0%
© 2019 — 2026 蜀ICP备19039166号
由 Halo 强力驱动
|
主题 - NexT.Mist v5.1.4