当前位置: 首页 > news >正文

传统方式连接数据库的弊端和数据库连接池原理

本次博客带领大家学习传统方式连接数据库的弊端和数据库连接池原理。

传统获取Connection问题分析

  1. 传统的JDBC数据库连接使用 DriverManager 来获取,每次向数据库建立连接的时候都要将 Connection 加载到内存中,再验证IP地址,用户名和密码(0.05s ~ 1s 时间)。需要数据库连接的时候,就向数据库要求一个,频繁的进行数据库连接操作将占用很多的系统资源,容易造成服务器的崩溃。
  2. 每一次数据库连接,使用完后都得断开,如果程序出现异常而未能关闭,将导致数据库内存泄漏,最终将导致重启数据库。
  3. 传统获取连接的方式,不能控制创建的连接数量,如连接过多,也可能导致内存泄漏,MySQL崩溃。
  4. 解决传统开发中数据库连接问题,可以采用数据库连接池技术(connection pool)。

传统方式连接数据库的案例

public void testCon(){

    //看看连接 - 关闭 connection 会耗用多久
    System.out.println("开始执行");
    long start = System.currentTimeMillis();
    for (int i=0;i<5000;i++){
        //使用传统的jdbc方式,得到连接
        Connection connection = JDBCUtils.getConnection();

        //关闭
        JDBCUtils.close(null,null,connection);
    }
    long end = System.currentTimeMillis();
    System.out.println("批量方式 耗时="+(end-start));
}

数据库连接池的基本介绍

  1. 预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从"缓冲池"中取出一个,使用完毕之后再放回去。
  2. 数据库连接池负责分配、管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个。
  3. 当应用程序向连接池请求的连接数超过最大连接数量时,这些请求将被加入到等待队列中。
  4. 数据库连接池的图文分析:
    请添加图片描述

数据库连接池种类

  1. JDBC 的数据库连接池中使用 javax.sql.DataSource 来表示,DataSource只是一个接口,该接口通常由第三方提供实现。
  2. C3P0 数据库连接池,速度相对较慢,稳定性不错(hibernate,spring)。
  3. DBCP 数据库连接池,速度相对C3P0较快,但不稳定。
  4. Proxool 数据库连接池,有监控连接池状态的功能,稳定性较C3P0差一点。
  5. BoneCP 数据库连接池,速度快。
  6. Druid(德鲁伊) 是阿里提供的数据库连接池,集C3P0、DBCP、Proxool优点于一身的数据库连接池。

相关文章:

  • 什么叫 “雪碧图”?
  • 公众号网课搜题题库使用方法
  • Excel中身份证号码相关操作详解
  • 如何用4行 C 代码实现一个跨平台的命令行 mp3 播放器
  • ES 查询用法
  • golang泛型
  • 如何快速安装JDK 1.8 以及配置环境变量
  • DataGrip 如何导出和恢复整个数据库数据,使用单个 SQL 文件
  • 基于SpringBoot+MyBatisPlus+DynamicDatasource+mysql的多数据源本地事务方案
  • 计算机毕业设计ssm+vue基本微信的健康食谱交流 论坛小程序
  • 天龙八部科举答题问题和答案(全5/8)
  • Python Matplotlib库:基本绘图补充
  • 类与对象(下)
  • 【DouZero】 强化学习+self play达到人类玩家斗地主水平。
  • CMake Tutorial 巡礼(5)_添加系统自察
  • 11111111
  • extjs4学习之配置
  • JavaScript工作原理(五):深入了解WebSockets,HTTP/2和SSE,以及如何选择
  • Java多线程(4):使用线程池执行定时任务
  • Markdown 语法简单说明
  • session共享问题解决方案
  • STAR法则
  • vuex 学习笔记 01
  • 多线程事务回滚
  • 复杂数据处理
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 小试R空间处理新库sf
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 再次简单明了总结flex布局,一看就懂...
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • zabbix3.2监控linux磁盘IO
  • 我们雇佣了一只大猴子...
  • ​iOS安全加固方法及实现
  • ​Kaggle X光肺炎检测比赛第二名方案解析 | CVPR 2020 Workshop
  • ​ssh免密码登录设置及问题总结
  • (vue)页面文件上传获取:action地址
  • (第27天)Oracle 数据泵转换分区表
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (免费领源码)python+django+mysql线上兼职平台系统83320-计算机毕业设计项目选题推荐
  • .gitignore
  • .NET Framework杂记
  • .NET开发者必备的11款免费工具
  • .考试倒计时43天!来提分啦!
  • @ 代码随想录算法训练营第8周(C语言)|Day53(动态规划)
  • @Autowired @Resource @Qualifier的区别
  • @德人合科技——天锐绿盾 | 图纸加密软件有哪些功能呢?
  • @取消转义
  • [20181219]script使用小技巧.txt
  • [Android 13]Input系列--获取触摸窗口
  • [Android]Android开发入门之HelloWorld
  • [AutoSar]BSW_OS 01 priority ceiling protocol(PCP)
  • [C# 基础知识系列]专题十六:Linq介绍
  • [ffmpeg] x264 配置参数解析
  • [hihocoder1395] 最大权闭合子图
  • [Java][方法引用]构造方法的引用事例分析